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.

Henryk Konsek
sumber

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.

sfussenegger.dll
sumber
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

Dan
sumber
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.

HDave
sumber
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