Como posso baixar artefatos Maven no chef?

9

Eu quero fazer algo assim em uma receita de chef:

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

Mas não consigo encontrar um livro de receitas que forneça isso. Eu escrevi algo que basicamente faz isso, mas não lida com instantâneos, o que requer a análise do maven-metadata.xml. Antes de mergulhar nisso, queria ter certeza de que não estava faltando alguma coisa óbvia, já que isso parece ser um exemplo básico.

    
por recampbell 22.01.2012 / 22:02

3 respostas

4

Com base no código do Apache Buildr: link

Você pode fazer algo assim:

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
    
por 23.01.2012 / 09:22
4
por 19.10.2012 / 03:18
3

Se você usar o Artifactory como seu repositório Maven, uma solução mais elegante estará à mão.

A partir da versão 2.6.0 uma solicitação para um artefato não exclusivo pode retorne o instantâneo mais recente disponível .

Para utilizar esse recurso, primeiro certifique-se de que o repositório de destino esteja definido com um exclusivo política de captura instantânea , em seguida, solicite o artefato desejado usando uma versão de snapshot não exclusiva, como:

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

O último instantâneo exclusivo de artefato com uma revisão básica de 1.0 será retornado.

    
por 21.05.2012 / 10:21

Tags