จะปรับใช้ SNAPSHOT กับซอร์สและ JavaDoc ได้อย่างไร


93

ฉันต้องการปรับใช้ซอร์สและ Javadocs ด้วยสแนปชอตของฉัน ซึ่งหมายความว่าฉันต้องการทำให้คำสั่งต่อไปนี้เป็นอัตโนมัติ:

mvn clean source:jar javadoc:jar deploy

เพียงเพื่อดำเนินการ:

mvn clean deploy

ฉันไม่ต้องการให้มีการสร้าง javadoc / แหล่งที่มาในระหว่างinstallขั้นตอน (เช่นการสร้างในเครื่อง)

ฉันรู้ว่าปลั๊กอิน source / javadoc สามารถซิงโครไนซ์กับการทำงานของreleaseปลั๊กอินได้ แต่ฉันไม่สามารถหาวิธีเชื่อมต่อกับการเผยแพร่สแน็ปช็อตได้

คำตอบ:


77
<build>
  <plugins> 
    <plugin>
      <artifactId>maven-source-plugin</artifactId>
      <executions>
        <execution>
          <id>attach-sources</id>
          <phase>deploy</phase>
          <goals><goal>jar-no-fork</goal></goals> 
        </execution>
      </executions>
    </plugin>
    <plugin> 
      <artifactId>maven-javadoc-plugin</artifactId> 
      <executions> 
        <execution> 
          <id>attach-javadocs</id>
          <phase>deploy</phase>
          <goals><goal>jar</goal></goals> 
        </execution> 
      </executions> 
    </plugin>
    <plugin> 
      <!-- explicitly define maven-deploy-plugin after other to force exec order -->
      <artifactId>maven-deploy-plugin</artifactId> 
      <executions> 
        <execution> 
          <id>deploy</id>
          <phase>deploy</phase>
          <goals><goal>deploy</goal></goals> 
        </execution> 
      </executions> 
    </plugin>
  </plugins> 
</build>

ดูPOM หลัก OSS ของ Sonatypeสำหรับตัวอย่างที่สมบูรณ์


1
ฉันใช้การตั้งค่านี้และทำงานได้ดีทีเดียว อย่างไรก็ตามฉันมีปัญหาเล็กน้อยสองประการ: หนึ่งแหล่งที่มาที่สร้างขึ้นไม่รวมอยู่ในเป้าหมาย "jar" คุณจะต้องมี "jar-no-fork" สองมีข้อผิดพลาดในปลั๊กอินรุ่นที่จะทำให้สร้างแหล่งที่มาของการเผยแพร่สองครั้ง (ดังนั้นจึงใช้สองครั้งซึ่งจะนำไปสู่ปัญหากับผู้จัดการพื้นที่เก็บข้อมูล)
mglauche

1
maven-source-plugin:jarยึดติดกับpackageเฟสตามค่าเริ่มต้นดังนั้นคุณจึงสามารถละทิ้ง<phase>verify</phase>และทำสิ่งเดียวกันให้สำเร็จได้ นอกจากนี้ฉันไม่แน่ใจว่าทำไมคุณถึงแนบสิ่งนี้เพื่อยืนยันเนื่องจากขั้นตอนนั้นมีไว้สำหรับ "รวมโครงการและเรียกใช้การทดสอบการรวม"
matt b

@mglauche @matt ขอบคุณสำหรับความคิดเห็นของคุณ ฉันได้ทำการเปลี่ยนแปลงที่เหมาะสมแล้ว
sfussenegger

1
@Henryk ตกลงฉันได้เพิ่ม maven-deploy-plugin อย่างชัดเจนเช่นเดียวกับ maven ดูเหมือน (หรือพยายาม) เพื่อรับประกันการดำเนินการในส่วนอื่น ๆ ปลั๊กอินที่กำหนดไว้ใน POM อาจต้องมีการทดลองบ้าง
sfussenegger

1
การใช้รหัสสุ่มสร้างการดำเนินการใหม่ฉันคิดว่าคุณต้องการ "ทำการแมปใหม่" การดำเนินการเริ่มต้นหนึ่งรายการ
Hurda

48

เพียงเพื่อเพิ่มทางเลือกที่ไม่ต้องการให้คุณโคลนด้วยการกำหนดค่าปลั๊กอิน:

mvn -DperformRelease=true [goals]

เครดิตไปที่ mcbeelen จากhttp://sea36.blogspot.com/2009/02/attaching-javadocs-and-sources-to-maven.html?showComment=1314177874102#c6853460758692768998


4
ฉันอยากจะบอกว่าฟีเจอร์นี้อาจหายไปใน Maven รุ่นต่อ ๆ ไป (อาจเป็น Maven-4?) ตรวจสอบความคิดเห็นที่นี่ในส่วนโปรไฟล์ของ Maven Super POM: maven.apache.org/ref/3.1.1/maven-model-builder/super-pom.html
Dan

48

บทความที่ Dan อ้างถึงยังกล่าวถึงแนวทางอื่นที่ใช้ได้ผลโดยไม่ต้องปรับเปลี่ยนปอมและจะไม่หายไปในเร็ว ๆ นี้:

mvn clean javadoc: jar source: jar install

ซึ่งทำงานได้ดีกับ Maven 3+ พร้อมกับ ...

mvn clean javadoc: jar source: jar deploy

ซึ่งฉันได้ทดสอบจาก Jenkins ที่ปรับใช้กับ Nexus

แนวทางนี้ดีเพราะฉันต้องปรับเปลี่ยนงานของเจนกินส์บางอย่างเท่านั้นและไม่จำเป็นต้องยุ่งกับปอมของฉัน


5
ขอบคุณสำหรับโซลูชันที่ปราศจากปอม! โปรดทราบว่าjavadoc: jarและ / หรือsource: jarจะต้องปรากฏขึ้นก่อนที่จะติดตั้งหรือปรับใช้มิฉะนั้น jars พิเศษจะไม่ "แนบ" กับการปรับใช้
seanf

2
FWIW ตัวเลือกเหล่านี้ใช้ได้กับpackage:mvn clean javadoc:jar source:jar package
ecoe

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