Как я могу скачать артефакты Maven у шеф-повара?

9

Я хочу сделать что-то вроде этого в рецепте шеф-повара:

maven_artifact "/opt/foo/my.jar" do
  source "com.foo:my:0.1:jar"
end

Но я не могу найти поваренную книгу, которая обеспечивает это. Я написал что-то, что в основном делает это, но не обрабатывает снимки, что требует анализа maven-metadata.xml. Прежде чем погрузиться в это, я хотел убедиться, что не пропустил что-то очевидное, поскольку это похоже на базовый вариант использования.

recampbell
источник
Вы можете просто использовать кулинарную книгу Maven
Cherry

Ответы:

4

Основано на коде Apache Buildr: http://svn.apache.org/repos/asf/buildr/trunk/lib/buildr/packaging/artifact.rb

Вы можете сделать что-то вроде этого:

def snapshot?
  version =~ /-SNAPSHOT$/
end

if snapshot?
    metadata_path = "#{group_path}/#{id}/#{version}/maven-metadata.xml"
    metadata_xml = StringIO.new
    URI.download repo_url + metadata_path, metadata_xml
    metadata = REXML::Document.new(metadata_xml.string).root
    timestamp = REXML::XPath.first(metadata, '//timestamp')
    build_number = REXML::XPath.first(metadata, '//buildNumber')
    snapshot_of = version[0, version.size - 9]
    classifier_snippet = (classifier != nil) ? "-#{classifier}" : ""
    repo_url + "#{group_path}/#{id}/#{version}/#{id}-#{snapshot_of}-#{timestamp.text}-#{build_number.text}#{classifier_snippet}.#{type}"
end
Николас де Луф
источник
3

Если вы используете Artifactory в качестве хранилища Maven, под рукой будет более элегантное решение.

Начиная с версии 2.6.0, запрос неуникального артефакта может вернуть последний доступный снимок .

Чтобы использовать эту функцию, сначала убедитесь, что целевой репозиторий определен с уникальной политикой моментальных снимков , а затем запросите нужный артефакт, используя неуникальную версию моментального снимка, такую ​​как:

орг / артефакт / 1,0-СНАПШОТ / артефакт-1,0-SNAPSHOT.jar

И последний уникальный снимок артефакта с базовой ревизией 1.0 будет возвращен.

noamt
источник