Chef

如何在 Chef 中下載 Maven 工件?

  • December 10, 2014

我想在廚師食譜中做這樣的事情:

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

但我找不到提供這個的食譜。我寫了一些基本上可以做到這一點但它不處理快照的東西,這需要解析 maven-metadata.xml。在我深入研究之前,我想確保我沒有遺漏一些明顯的東西,因為這似乎是一個基本的案例。

基於 Apache Buildr 程式碼:http: //svn.apache.org/repos/asf/buildr/trunk/lib/buildr/packaging/artifact.rb

你可以這樣做:

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

引用自:https://serverfault.com/questions/352533