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.


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


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.