Bagaimana saya bisa mengunduh artefak Maven di chef?

9

Saya ingin melakukan sesuatu seperti ini dalam resep koki:

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

Tetapi saya tidak dapat menemukan buku masak yang menyediakan ini. Saya telah menulis sesuatu yang pada dasarnya melakukan ini tetapi tidak menangani snapshot, yang membutuhkan parsing maven-metadata.xml. Sebelum saya terjun dalam hal ini, saya ingin memastikan bahwa saya tidak melewatkan sesuatu yang jelas karena ini tampaknya seperti dasar penggunaan dasar.

recampbell
sumber
Anda cukup menggunakan buku resep pakar memasak
Cherry

Jawaban:

4

Berdasarkan kode Apache Buildr: http://svn.apache.org/repos/asf/buildr/trunk/lib/buildr/packaging/artifact.rb

Anda dapat melakukan sesuatu seperti ini:

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
sumber
3

Jika Anda menggunakan Artifactory sebagai repositori Maven Anda, solusi yang lebih elegan sudah dekat.

Mulai dari versi 2.6.0 permintaan untuk artefak non-unik dapat mengembalikan snapshot terbaru yang tersedia .

Untuk memanfaatkan fitur ini, pertama-tama pastikan bahwa repositori target didefinisikan dengan kebijakan snapshot unik , kemudian minta artefak yang diinginkan menggunakan versi snapshot tidak unik seperti:

org / artifact / 1.0-SNAPSHOT / artifact-1.0-SNAPSHOT.jar

Dan snapshot artefak unik terbaru dengan revisi basis 1.0 akan dikembalikan.

noamt
sumber