Wie kann ich Maven-Artefakte in Chef herunterladen?

9

Ich möchte so etwas in einem Kochrezept machen:

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

Aber ich kann kein Kochbuch finden, das dies bietet. Ich habe etwas geschrieben, das dies im Grunde tut, aber keine Snapshots verarbeitet, was das Parsen von maven-metadata.xml erfordert. Bevor ich mich darauf einlasse, wollte ich sichergehen, dass mir nichts Offensichtliches entgeht, da dies wie ein grundlegender Anwendungsfall erscheint.

Glühbirne
quelle
Sie können einfach Maven Kochbuch
Cherry

Antworten:

4

Basierend auf dem Apache Buildr-Code: http://svn.apache.org/repos/asf/buildr/trunk/lib/buildr/packaging/artifact.rb

Sie können so etwas tun:

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

Wenn Sie Artifactory als Maven-Repository verwenden, ist eine elegantere Lösung verfügbar.

Ab Version 2.6.0 kann eine Anforderung für ein nicht eindeutiges Artefakt den neuesten verfügbaren Snapshot zurückgeben .

Um diese Funktion zu nutzen, stellen Sie zunächst sicher, dass das Ziel-Repository mit einer eindeutigen Snapshot-Richtlinie definiert ist , und fordern Sie dann das gewünschte Artefakt mithilfe einer nicht eindeutigen Snapshot-Version an, z.

org / Artefakt / 1.0-SNAPSHOT / Artefakt-1.0-SNAPSHOT.jar

Der neueste einzigartige Schnappschuss eines Artefakts mit einer Basisversion von 1.0 wird zurückgegeben.

noamt
quelle