Jak mogę pobrać artefakty Maven do szefa kuchni?

9

Chcę zrobić coś takiego w przepisie szefa kuchni:

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

Ale nie mogę znaleźć książki kucharskiej, która to zapewnia. Napisałem coś, co właściwie to robi, ale nie obsługuje migawek, co wymaga analizowania pliku maven-metadata.xml. Zanim się w to zanurzyłem, chciałem się upewnić, że nie umknęło mi coś oczywistego, ponieważ wydaje się to podstawową sprawą.

recampbell
źródło
Możesz po prostu użyć książki kucharskiej maven
Cherry

Odpowiedzi:

4

Na podstawie kodu Apache Buildr: http://svn.apache.org/repos/asf/buildr/trunk/lib/buildr/packaging/artifact.rb

Możesz zrobić coś takiego:

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
Nicolas de Loof
źródło
3

Jeśli używasz Artifactory jako repozytorium Maven, pod ręką jest bardziej eleganckie rozwiązanie.

Począwszy od wersji 2.6.0 żądanie nietypowego artefaktu może zwrócić najnowszą dostępną migawkę .

Aby skorzystać z tej funkcji, najpierw upewnij się, że docelowe repozytorium jest zdefiniowane za pomocą unikalnej zasady migawki , a następnie zażądaj żądanego artefaktu za pomocą nieunikalnej wersji migawki, takiej jak:

org / artefact / 1.0-SNAPSHOT.jar

Zostanie zwrócona najnowsza unikalna migawka artefaktu z podstawową wersją 1.0 .

noamt
źródło