ฉันจะดาวน์โหลด Maven artifacts ในพ่อครัวได้อย่างไร


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 / สิ่งประดิษฐ์ / 1.0 ภาพรวม / สิ่งประดิษฐ์-1.0-SNAPSHOT.jar

และภาพรวมที่ไม่ซ้ำกันล่าสุดของสิ่งประดิษฐ์ที่มีการแก้ไขฐานของ1.0จะถูกส่งกลับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.