ChefでMavenアーティファクトをダウンロードするにはどうすればよいですか?


9

私はシェフのレシピでこのようなことをしたいです:

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

しかし、私はこれを提供する料理本を見つけることができません。基本的にこれを行うものを書きましたが、スナップショットを処理しないため、maven-metadata.xmlを解析する必要があります。これに突入する前に、これは基本的なユースケースのように見えるので、明らかなものを見落とさないようにしたかったのです。


あなたは単にMavenクックブックを
Cherry

回答:


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

MavenリポジトリとしてArtifactoryを使用する場合、よりエレガントなソリューションが手近にあります。

バージョン2.6.0以降、一意でないアーティファクトをリクエストすると、利用可能な最新のスナップショットを返すことができます

この機能を利用するには、まずターゲットリポジトリが一意の スナップショットポリシーで定義されていることを確認してから、次のような一意でないスナップショットバージョンを使用して目的のアーティファクトをリクエストします。

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

また、ベースリビジョンが1.0アーティファクトの最新の一意のスナップショットが返されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.