¿Cómo puedo descargar los artefactos de Maven en chef?

9

Quiero hacer algo como esto en una receta de chef:

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

Pero no puedo encontrar un libro de cocina que proporcione esto. He escrito algo que básicamente hace esto, pero no maneja instantáneas, lo que requiere analizar maven-metadata.xml. Antes de sumergirme en esto, quería estar seguro de que no me faltaba algo obvio, ya que esto parece un caso de uso básico.

recampbell
fuente
Simplemente puede usar el libro de cocina de Maven
Cherry

Respuestas:

4

Basado en el código Apache Buildr: http://svn.apache.org/repos/asf/buildr/trunk/lib/buildr/packaging/artifact.rb

Puedes hacer algo como esto:

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

Si usa Artifactory como su repositorio Maven, tendrá a mano una solución más elegante.

A partir de la versión 2.6.0, una solicitud de un artefacto no único puede devolver la última instantánea disponible .

Para utilizar esta función, primero asegúrese de que el repositorio de destino esté definido con una política de instantánea única , luego solicite el artefacto deseado utilizando una versión de instantánea no única como:

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

Y se devolverá la última instantánea única del artefacto con una revisión base de 1.0 .

noamt
fuente