Come posso scaricare i manufatti Maven in chef?


9

Voglio fare qualcosa del genere in una ricetta da chef:

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

Ma non riesco a trovare un libro di cucina che fornisca questo. Ho scritto qualcosa che sostanzialmente fa questo, ma non gestisce le istantanee, che richiede l'analisi di maven-metadata.xml. Prima di immergermi in questo, volevo essere sicuro di non aver perso qualcosa di ovvio dal momento che questo sembra un caso d'uso di base.


Puoi semplicemente usare il libro di cucina di Maven
Cherry

Risposte:


4

Basato sul codice Apache Buildr: http://svn.apache.org/repos/asf/buildr/trunk/lib/buildr/packaging/artifact.rb

Puoi fare qualcosa del genere:

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

Se usi Artifactory come repository Maven, è a portata di mano una soluzione più elegante.

A partire dalla versione 2.6.0 una richiesta per un artefatto non univoco può restituire l' ultima istantanea disponibile .

Per utilizzare questa funzione, assicurarsi innanzitutto che il repository di destinazione sia definito con un criterio di istantanea univoco , quindi richiedere l'artefatto desiderato utilizzando una versione di snapshot non unica come:

org / manufatto / 1.0-SNAPSHOT / artefatto-1,0-SNAPSHOT.jar

E verrà restituita l'ultima istantanea unica di artefatto con una revisione base di 1.0 .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.