Bagaimana cara menyebarkan SNAPSHOT dengan sumber dan JavaDoc?


92

Saya ingin menerapkan sumber dan javadocs dengan snapshot saya. Ini berarti saya ingin mengotomatiskan perintah berikut:

mvn clean source:jar javadoc:jar deploy

Hanya untuk mengeksekusi:

mvn clean deploy

Saya tidak ingin generasi javadoc / sources dieksekusi selama installfase (misalnya, build lokal).

Saya tahu bahwa plugin source / javadoc dapat disinkronkan dengan eksekusi releaseplugin, tetapi saya tidak tahu cara menyambungkannya ke rilis snapshot.

Jawaban:


76
<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>

Lihat POM induk OSS Sonatype untuk contoh lengkapnya.


1
Saya menggunakan pengaturan ini, dan bekerja dengan cukup baik. Namun saya memiliki dua masalah kecil: satu, sumber yang dihasilkan tidak termasuk dalam tujuan "jar", Anda memerlukan "jar-no-fork". Kedua, ada bug di plugin rilis yang akan menyebabkan pembuatan sumber rilis dua kali (dan oleh karena itu diterapkan dua kali, yang akan menyebabkan masalah dengan manajer repositori)
— mglauche

1
maven-source-plugin:jarmelekat ke packagefase secara default, sehingga Anda dapat meninggalkan <phase>verify</phase>dan mencapai hal yang sama. Selain itu, saya tidak yakin mengapa Anda akan melampirkan ini untuk memverifikasi karena fase itu dimaksudkan untuk "mengemas proyek dan menjalankan tes integrasi".
— matt b

@mglauche @matt terima kasih atas komentar Anda. Saya baru saja membuat perubahan yang sesuai.
— sfussenegger

1
@Henryk Ok, saya telah secara eksplisit menambahkan maven-deploy-plugin serta maven tampaknya (atau mencoba) untuk menjamin eksekusi di oder plugin yang ditentukan di POM. Ini mungkin membutuhkan beberapa percobaan.
— sfussenegger

1
menggunakan id acak membuat eksekusi baru Saya pikir Anda ingin "memetakan ulang" satu eksekusi default
— Hurda

48

Hanya untuk menambahkan alternatif yang tidak mengharuskan Anda mengacaukan konfigurasi plugin:

mvn -DperformRelease=true [goals]

Kredit diberikan kepada mcbeelen dari http://sea36.blogspot.com/2009/02/attaching-javadocs-and-sources-to-maven.html?showComment=1314177874102#c6853460758692768998


4
Saya ingin menyebutkan bahwa fitur ini mungkin akan hilang dalam rilis Maven mendatang (mungkin Maven-4?). Lihat komentar di sini di bagian profil POM Super Maven: maven.apache.org/ref/3.1.1/maven-model-builder/super-pom.html
— Dan

45

Artikel yang dirujuk oleh Dan juga menyebutkan pendekatan lain yang bekerja tanpa memodifikasi pom DAN tidak akan hilang dalam waktu dekat:

mvn clean javadoc: jar source: jar install

Yang bekerja dengan baik dengan Maven 3+, bersama dengan ...

mvn clean javadoc: sumber jar: penyebaran jar

Yang telah saya uji dari Jenkins yang diterapkan ke Nexus.

Pendekatan ini bagus karena saya hanya perlu memodifikasi beberapa pekerjaan Jenkins dan tidak perlu mengacaukan pom saya.


5
Terima kasih untuk solusi bebas pom! Perhatikan bahwa javadoc: jar dan / atau source: jar harus muncul sebelum memasang atau menerapkan , atau jar tambahan tidak akan "dilampirkan" ke penerapan.
— Seanf

2
FWIW opsi ini juga berfungsi dengan package:mvn clean javadoc:jar source:jar package
— ecoe

Ini adalah jawaban yang bagus, karena memberi tahu Anda perintah yang tepat untuk membuat dan mengunggah sumber dan javadoc ke repo Anda.
— russellhoff
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.