シェフのレシピでこのようなことをしたい:
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
ArtifactoryをMavenリポジトリーとして使用する場合は、より洗練されたソリューションが手元にあります。
バージョン 2.6. から、一意でないアーティファクトのリクエストは 最新の利用可能なスナップショット を返すことができます。
この機能を利用するには、最初にターゲットリポジトリがuniquesnapshot policy で定義されていることを確認してから、目的のアーティファクトをリクエストします次のような一意でないスナップショットバージョンを使用します。
org/artifact/1.0-SNAPSHOT/artifact-1.0-SNAPSHOT.jar
そして、artifactの最新の一意のスナップショットは、1.0のベースリビジョンで返されます。