如何在厨师中下载Maven工件?

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

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

但是我找不到提供这个的食谱。 我写了一些基本上这样做,但它不处理快照,这需要parsingmaven-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 

RiotGames有一些你可能会觉得有用的东西 。

如果你使用Artifactory作为你的Maven仓库,那么更优雅的解决scheme就在眼前。

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

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

组织/伪影/ 1.0-SNAPSHOT /伪像-1.0-SNAPSHOT.jar

并且将返回基本版本为1.0工件的最新独特快照。