如何在Chef中下载Maven工件?


9

我想在厨师食谱中做这样的事情:

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

但我找不到提供此功能的食谱。我写的东西基本上可以做到这一点,但是它不能处理快照,这需要解析maven-metadata.xml。在深入研究之前,我想确保自己没有遗漏任何明显的东西,因为这似乎是一个基本用例。


您可以简单地使用Maven食谱
Cherry

Answers:


4

基于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


3

如果将Artifactory用作Maven存储库,那么将有一个更优雅的解决方案。

从版本2.6.0开始,对非唯一工件的请求可以返回最新的可用快照

要利用此功能,请首先确保使用唯一的 快照策略定义了目标存储库,然后使用非唯一的快照版本来请求所需的工件,例如:

组织/artifact/1.0-SNAPSHOT/artifact-1.0-SNAPSHOT.jar

并将返回基本修订版为1.0工件的最新唯一快照。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.