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

Artifactory를 Maven 저장소로 사용하는 경우 더 우아한 솔루션이 있습니다.

버전 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.