Karena saya menggunakan Maven, saya dapat membangun dan menginstal di proyek repositori lokal saya yang memiliki tag Javadoc tidak lengkap (misalnya, parameter yang hilang).
Namun, karena saya bermigrasi ke Java 8 (1.8.0-ea-b90) Maven benar-benar ketat tentang kehilangan tag dokumentasi dan menunjukkan kepada saya banyak kesalahan Javadoc terkait dengan masalah Javadoc ketika saya mencoba membangun atau menginstal proyek di mana Javadoc tidak "sempurna". Beberapa proyek yang saya coba kompilasi dan instal di repositori lokal saya adalah proyek pihak ketiga yang tidak saya kendalikan. Jadi solusi untuk memperbaiki semua Javadocs di semua proyek ini tampaknya tidak cocok dalam skenario saya.
Ini adalah sebagian kecil dari output yang saya lihat ketika saya jalankan mvn clean package install
di proyek saya:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.026s
[INFO] Finished at: Mon Apr 08 21:06:17 CEST 2013
[INFO] Final Memory: 27M/437M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.9:jar (attach-javadocs) on project jpc: MavenReportException: Error while creating archive:
[ERROR] Exit code: 1 - /Users/sergioc/Documents/workspaces/heal/jpc/src/main/java/org/jpc/engine/prolog/PrologDatabase.java:10: error: @param name not found
[ERROR] * @param terms the terms to assert
[ERROR] ^
[ERROR] /Users/sergioc/Documents/workspaces/heal/jpc/src/main/java/org/jpc/engine/prolog/PrologDatabase.java:11: warning: no description for @return
[ERROR] * @return
[ERROR] ^
Plugin Javadoc Maven dikonfigurasi seperti ini di POM saya:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
Seperti yang saya katakan sebelumnya, semuanya bekerja dengan baik jika saya kembali ke Jawa 7. Mungkin ini bug yang terkait dengan Maven yang berjalan di Java 8? Bagaimana saya bisa membuatnya bekerja (yaitu, bisa membangun Javadoc proyek dan menginstal kode di repositori lokal saya) dengan Java 8? Saya telah menguji dengan Maven 3.0.3 dan 3.0.5 di OSX.
MEMPERBARUI:
Jika saya mengubah konfigurasi plugin Javadoc saya dengan <failOnError>false</failOnError>
(terima kasih Martin):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
Kemudian proyek diinstal di repositori lokal saya. Namun, JAR Javadoc masih belum dihasilkan.
Sebuah fragmen dari output yang saya lihat di konsol dengan konfigurasi baru ini adalah:
[GALAT] MavenReportException: Kesalahan saat membuat arsip: Keluar kode: 1 - /Users/....java:18: peringatan: no @param ... Baris perintah adalah: / Library / Java / Home / bin / javadoc @options @ paket
Lihat file Javadoc yang dihasilkan di '/ Users / sergioc / Documents / workspaces / heal / minitoolbox / target / apidocs' dir.
di org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeJavadocCommandLine (AbstractJavadocMojo.java:5043) di org.apache.maven.plugin.javadoc.AbstrakJavadocMojo.executeReport (AbstractJavad0990ga.mugum .javadoc.JavadocJar.execute (JavadocJar.java:181) di org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:101) di org.apache.maven.lifecycle. : 209) di org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153) di org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:145) di org.apache. maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:84) di org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:59) di org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild (LifecycleStarter.java:183) di org.apache.maven.lifecycle.internal.LifecycleStarter.execute (Lifecycle) di org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:320) di org.apache.maven.DefaultMaven.execute (DefaultMaven.java:156) di org.apache.maven.cli.MavenCli.execute (MavenCli.java : 537) di org.apache.maven.cli.MavenCli.doMain (MavenCli.java:196) di org.apache.maven.cli.MavenCli.main (MavenCli.java:141) di sun.reflect.NativeMethodAccessorImpl.invoke0 ( Metode Asli) di sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) di sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43 di folder java.lebih.panggil (Method.java:491) di org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java .:90) di org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java .:30) di org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:409) di org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:352)
Adakah solusi tentang cara membangun sumber, menginstal proyek, dan menghasilkan JAR Javadoc dalam satu langkah karena bekerja dengan Java 7?
Jawaban:
Solusi terbaik adalah memperbaiki kesalahan javadoc. Jika karena alasan tertentu tidak mungkin (yaitu: kode sumber yang dibuat secara otomatis) maka Anda dapat menonaktifkan pemeriksaan ini.
DocLint adalah fitur baru di Java 8 , yang diringkas sebagai:
Ini diaktifkan secara default, dan akan menjalankan banyak pemeriksaan sebelum membuat Javadocs. Anda perlu mematikan ini untuk Java 8 seperti yang ditentukan dalam utas ini . Anda harus menambahkan ini ke konfigurasi pakar:
Untuk maven-javadoc-plugin 3.0.0+: Ganti
dengan
sumber
javadoc
tidak tahu opsi ini.<doclint>none</doclint>
. Lihat maven.apache.org/plugins/maven-javadoc-plugin/…<additionalparam/>
digantikan oleh<additionalOptions/>
. Lihat issues.apache.org/jira/browse/MJAVADOC-475Pendekatan termudah untuk membuat semuanya berfungsi dengan baik java 8 dan java 7 adalah dengan menggunakan profil di build:
sumber
Berikut adalah cara paling ringkas yang saya perhatikan untuk mengabaikan peringatan doclint terlepas dari versi java yang digunakan. Tidak perlu menduplikasi konfigurasi plugin di beberapa profil dengan sedikit modifikasi.
Diuji pada oracle / open jdk 6, 7, 8 dan 11.
sumber
build
danprofiles
merupakan blok tingkat atas di pakarpom.xml
. maven.apache.org/pom.html#Build .Tambahkan ke bagian properti global di file pom:
Solusi umum yang disediakan di sini di jawaban lain (menambahkan properti di bagian plugin) tidak berfungsi karena suatu alasan. Hanya dengan mengaturnya secara global saya dapat membangun toples javadoc dengan sukses.
sumber
Solusi terpendek yang akan bekerja dengan semua versi Java:
Cukup tambahkan itu ke POM Anda dan Anda siap melakukannya.
Ini pada dasarnya adalah jawaban @ ankon plus jawaban @ zapp .
Untuk pengguna maven-javadoc-plugin 3.0.0:
Menggantikan
<additionalparam>-Xdoclint:none</additionalparam>
oleh
<doclint>none</doclint>
sumber
<additionalJOption>-Xdoclint:none</additionalJOption>
atau<doclint>none</doclint>
properti ke Anda<properties>
<doclint>none</doclint>
(tanpa aktivasi berbasis versi JDK), apakah masih gagal pada JDK kurang dari 1,8, atau apakah maven-javadoc-plugin secara otomatis mendeteksi apakah itudoclint
option didukung oleh versi saat Jawa?Saya tidak berpikir mematikan DocLint adalah solusi yang bagus, setidaknya tidak untuk jangka panjang. Adalah baik bahwa Javadoc telah menjadi sedikit lebih ketat sehingga cara yang tepat untuk memperbaiki masalah build adalah untuk memperbaiki masalah yang mendasarinya . Ya, pada akhirnya Anda harus memperbaiki file kode sumber tersebut.
Berikut adalah hal-hal yang perlu diwaspadai yang sebelumnya bisa Anda hindari:
{@link }
S tidak valid (Hal yang sama berlaku untuk tag serupa seperti@see
)@author
Nilai tidak valid . Ini dulunya diterima:@author John <[email protected]>
tetapi tidak lagi karena tanda kurung yang tidak diloloskan.Anda hanya perlu memperbaiki file kode sumber Anda dan terus membangun Javadoc Anda sampai dapat membangun tanpa kegagalan. Ya rumit, tetapi secara pribadi saya suka ketika saya telah membawa proyek saya ke tingkat DocLint karena itu berarti saya bisa lebih percaya diri bahwa Javadoc yang saya hasilkan sebenarnya adalah apa yang saya inginkan.
Tentu saja ada masalah jika Anda menghasilkan Javadoc pada beberapa kode sumber yang belum Anda buat sendiri, misalnya karena berasal dari beberapa pembuat kode, misalnya wsimport . Aneh bahwa Oracle tidak menyiapkan alat sendiri untuk kepatuhan JDK8 sebelum benar-benar merilis JDK8. Tampaknya tidak akan diperbaiki hingga Java 9 . Hanya dalam kasus khusus ini saya sarankan untuk mematikan DocLint seperti yang didokumentasikan di tempat lain di halaman ini.
sumber
wsimport
untuk menjadi bagian dari Javadoc.Override
maven-javadoc-plugin
konfigurasi saja, tidak memperbaiki masalah denganmvn site
(misalnya digunakan selama tahap release). Inilah yang harus saya lakukan:sumber
maven-javadoc-plugin
melalui<reportPlugins>
bagian darimaven-site-plugin
ini tidak dianjurkan untuk versi terbaru dari Maven 3.Anda dapat mencoba mengatur
failOnError
properti (lihat dokumentasi plugin ) untukfalse
:Seperti yang Anda lihat dari dokumen, nilai defaultnya adalah
true
.sumber
Karena itu tergantung pada versi JRE Anda yang digunakan untuk menjalankan perintah maven Anda tidak ingin menonaktifkan
DocLint
per default di pom.xml AndaOleh karena itu, dari baris perintah Anda dapat menggunakan sakelar
-Dadditionalparam=-Xdoclint:none
.Contoh:
mvn clean install -Dadditionalparam=-Xdoclint:none
sumber
-Dadditionalparam=-Xdoclint:none
dan semua build Anda akan bekerja dengan Java 8.mvn org.apache.maven.plugins:maven-javadoc-plugin:3.1.0:jar -DadditionalJOption=-Xdoclint:none
- itu berhasil untuk sayaNama properti konfigurasi telah diubah dalam versi terbaru dari maven-javadoc-plugin yang 3.0.0.
Karenanya <additionalparam> tidak akan berfungsi. Jadi kita harus memodifikasinya seperti di bawah ini.
sumber
doclint
dokumentasi di sini: maven.apache.org/plugins/maven-javadoc-plugin/…pom.xml
dalam direktori src / build proyek. Dalam kasus saya, yang harus saya lakukan adalah mencarimaven-javadoc-plugin
dan kemudian pergi ke<configuration></configuration>
blok yang sudah ada dan menambahkan<doclint>none</doclint>
. Semudah semua ini diketahui, konteksnya di sini adalah saya mencoba untuk memperbaiki bug yang berbeda di OpenGrok dan belum pernah menggunakan Maven sebelumnya dan tidak ingin harus melihat kembali ke sub proyek lain hanya untuk mencari tahu cara menerapkan perbaikan cepat.Saya ingin menambahkan beberapa wawasan ke dalam jawaban lain
Dalam kasus saya
Tidak bekerja
Mari kita mulai dengan itu, dalam proyek saya, saya tidak benar-benar membutuhkan javadoc sama sekali. Hanya beberapa plugin yang diperlukan yang memiliki dependensi waktu build untuknya.
Jadi, cara paling sederhana untuk menyelesaikan masalah saya adalah:
sumber
Pada maven-javadoc-plugin 3.0.0 Anda seharusnya telah menggunakan tambahanJOption untuk mengatur opsi Javadoc tambahan, jadi jika Anda ingin Javadoc untuk menonaktifkan doclint, Anda harus menambahkan properti berikut.
Anda juga harus menyebutkan versi maven-javadoc-plugin 3.0.0 atau lebih tinggi.
sumber
Jadi, hemat diri Anda beberapa jam yang tidak saya lakukan dan coba ini jika tampaknya tidak berhasil:
Tag diubah untuk versi yang lebih baru.
sumber
-Xdoclint
itu sendiri tidak cukup, tetapi argumen tambahan diperlukan. Versi yang lebih baru darimaven-javadoc-plugin
menyediakanadditionalJOptions
untuk itu, yang lebih tua tidak. Solusinya adalah:<additionalJOption>"-Xdoclint:none" "--allow-script-in-comments"</additionalJOption>
Kutipan itu penting, kalau tidak plugin menambahkannya dan mengasumsikan hanya satu arg bukan dua, menghasilkanwrong args
kesalahan.javadoc: error - Illegal package name: ""-Xdoclint:none" "--allow-script-in-comments""
Kutipan luar ditambahkan oleh pernyataan logging dan tidak ada pada shell. Saya kira masalahnya adalah bahwa pada Windowsjavadoc
dijalankan olehcmd.exe
, yang mem-parsing satu string besar sebagai baris perintah dan membagiadditionalJOption
sebagaimana dimaksud. Di Linux, argumen dikirimkan secara individual ke proses secara langsung danadditionalJOption
diteruskan sebagai satu argumen, yang mengarah ke kesalahan.Process Monitor
,cmd.exe
tidak digunakan. Java kemungkinan besar hanya membangun satu baris perintah besar dan meneruskannyaCreateProcess
, sehingga bisa diuraikan oleh Windows sebagaimana dimaksud: Memisahkan argumen pada spasi sambil menghormati tanda kutip.Ditambahkan di bawah
Ke dalam pekerjaan Jenkins:
Konfigurasi> Membangun Lingkungan> Menyuntikkan variabel lingkungan ke proses pembuatan> Properti Konten
Memecahkan masalah saya dalam membangun kode melalui Jenkins Maven :-)
sumber
mvn release:perform
sintaks perlumvn release:perform -Darguments="-Dmaven.javadoc.skip=true"
.Saya tidak yakin apakah ini akan membantu, tetapi bahkan saya menghadapi masalah yang sama baru-baru ini dengan versi oozie-4.2.0 . Setelah membaca jawaban di atas saya baru saja menambahkan opsi pakar melalui baris perintah dan itu bekerja untuk saya. Jadi, bagikan saja di sini.
Saya menggunakan java 1.8.0_77 , belum mencoba dengan java 1.7
bin / mkdistro.sh -DskipTests -Dmaven.javadoc.opts = '- Xdoclint: -html'
sumber
Untuk mengabaikan hilang
@param
dan@return
tag, itu cukup untuk menonaktifkanmissing
kelompok doclint . Dengan cara ini, javadoc masih akan diperiksa untuk masalah level dan sintaksis yang lebih tinggi:Perhatikan bahwa ini untuk plugin versi 3.0 atau lebih baru.
sumber
Aku agak terlambat ke pesta, tapi aku terpaksa mencari solusinya juga, berakhir di sini, dan kemudian menemukannya.
Inilah yang bekerja untuk saya: -
Dan kemudian mulai membangun Maven Anda, membangun distribusi Linux dll. Hal yang menyenangkan tentang hal itu bahwa itu tidak memerlukan modifikasi file konfigurasi Maven - Saya tidak bisa melakukan itu karena tujuan saya adalah untuk membangun kembali banyak paket Centos rpm, jadi harus masuk sangat dalam.
sumber