Comment puis-je télécharger des artefacts Maven dans chef?

9

Je veux faire quelque chose comme ça dans une recette de chef:

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

Mais je ne trouve pas de livre de cuisine qui le fournisse. J'ai écrit quelque chose qui fait essentiellement cela, mais il ne gère pas les instantanés, ce qui nécessite l'analyse de maven-metadata.xml. Avant de me plonger dans cela, je voulais être sûr de ne pas manquer quelque chose d'évident car cela semble être un cas d'utilisation de base.

recampbell
la source
Vous pouvez simplement utiliser le livre de recettes maven
Cherry

Réponses:

4

Basé sur le code Apache Buildr: http://svn.apache.org/repos/asf/buildr/trunk/lib/buildr/packaging/artifact.rb

Vous pouvez faire quelque chose comme ça:

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
la source
3

Si vous utilisez Artifactory comme référentiel Maven, une solution plus élégante est à portée de main.

À partir de la version 2.6.0, une demande d'artefact non unique peut renvoyer le dernier instantané disponible .

Pour utiliser cette fonctionnalité, assurez-vous d'abord que le référentiel cible est défini avec une stratégie d'instantané unique , puis demandez l'artefact souhaité à l'aide d'une version d'instantané non unique telle que:

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

Et le dernier instantané unique d' artefact avec une révision de base de 1.0 sera retourné.

noamt
la source