Seit ich Maven benutze, konnte ich lokale Repository-Projekte mit unvollständigen Javadoc-Tags erstellen und installieren (z. B. einen fehlenden Parameter).
Seit ich auf Java 8 (1.8.0-ea-b90) umgestiegen bin, ist Maven absolut über fehlende Dokumentations-Tags streng und zeigt mir viele Javadoc-Fehler im Zusammenhang mit Javadoc-Problemen, wenn ich versuche, ein Projekt zu erstellen oder zu installieren, bei dem Javadoc nicht installiert ist "perfekt". Einige der Projekte, die ich in meinem lokalen Repository kompilieren und installieren möchte, sind Projekte von Drittanbietern, über die ich keine Kontrolle habe. Daher scheint es in meinem Szenario nicht möglich zu sein, alle Javadocs in all diesen Projekten zu korrigieren.
Dies ist ein kleiner Teil der Ausgabe, die ich beim Ausführen von mvn clean package install
in meinem Projekt sehe:
[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] ^
Das Javadoc Maven-Plugin ist in meinem POM folgendermaßen konfiguriert:
<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>
Wie gesagt, alles funktioniert gut, wenn ich zurück zu Java 7 gehe. Vielleicht ist das ein Fehler, der mit Mavens Ausführung in Java 8 zusammenhängt? Wie kann ich es schaffen, dass es funktioniert? Javadoc des Projekts und installiere seinen Code in meinem lokalen Repository mit Java 8.x Ich habe mit Maven 3.0.3 und 3.0.5 unter OSX getestet.
UPDATE:
Wenn ich meine Javadoc-Plugin-Konfiguration mit <failOnError>false</failOnError>
ändere (danke 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>
Dann wird das Projekt in meinem lokalen Repository installiert. Die Javadoc-JAR wird jedoch immer noch nicht generiert.
Ein Teil der Ausgabe, die ich mit dieser neuen Konfiguration in der Konsole sehe, ist:
[ERROR] MavenReportException: Fehler beim Erstellen des Archivs: Beenden code: 1 - /Users/....Java:18: Warnung: nein @param ... Befehlszeile war:/Library/Java/Home/bin/javadoc @options @packages
Verweisen Sie auf die generierten Javadoc-Dateien in '/Users/sergioc/Documents/workspaces/heal/minitoolbox/target/apidocs' dir.
beim org.Apache.maven.plugin.javadoc.AbstractJavadocMojo.executeJavadocCommandLine (AbstractJavadocMojo.Java:5043) beim org.Apache.maven.plugin.javadoc.AbstractJavadocMojo.executeReport (AbstractJavadocMojo.Java:1990) beim org.Apache.maven.plugin.javadoc.JavadocJar.execute (JavadocJar.Java:181) beim org.Apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.Java:101) beim org.Apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.Java:209) beim org.Apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.Java:153) beim org.Apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.Java:145) beim org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.Java:84) beim org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.Java:59) beim org.Apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild (LifecycleStarter.Java:183) beim org.Apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.Java:161) at org.Apache.maven.DefaultMaven.doExecute (DefaultMaven.Java:320) um org.Apache.maven.DefaultMaven.execute (DefaultMaven.Java:156) um org.Apache.maven.cli.MavenCli.execute (MavenCli.Java:537) um org.Apache.maven.cli.MavenCli.doMain (MavenCli.Java:196) um org.Apache.maven.cli.MavenCli.main (MavenCli.Java:141) um Sun.reflect.NativeMethodAccessorImpl.invoke0 (native Methode) um Sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.Java:57) beim Sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.Java:43) at Java.lang.reflect.Method.invoke (Method.Java:491) um org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.Java:290) beim org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.Java:230) beim org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.Java:409) beim org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.Java:352)
Gibt es eine Problemumgehung zum Erstellen der Quellen, zum Installieren des Projekts und zum Generieren der Javadoc-JAR in einem Schritt, da Java 7 verwendet wurde?
Die beste Lösung wäre, die Javadoc-Fehler zu beheben. Wenn dies aus irgendeinem Grund nicht möglich ist (z. B. automatisch generierter Quellcode), können Sie diese Prüfung deaktivieren.
DocLint ist eine neue Funktion in Java 8 , die wie folgt zusammengefasst wird:
Stellen Sie ein Mittel bereit, um Fehler in Javadoc-Kommentaren früh in der .__ zu erkennen. Entwicklungszyklus und auf eine Weise, die leicht mit dem .__ verknüpft werden kann. Quellcode.
Dies ist standardmäßig aktiviert und führt vor dem Generieren von Javadocs eine ganze Reihe von Prüfungen durch. Sie müssen dies für Java 8 deaktivieren, wie in in diesem Thread angegeben. Sie müssen dies Ihrer Maven-Konfiguration hinzufügen:
<profiles>
<profile>
<id>Java8-doclint-disabled</id>
<activation>
<jdk>[1.8,)</jdk>
</activation>
<properties>
<javadoc.opts>-Xdoclint:none</javadoc.opts>
</properties>
</profile>
</profiles>
<build>
<plugins>
<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>
<configuration>
<additionalparam>${javadoc.opts}</additionalparam>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.3</version>
<configuration>
<reportPlugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<additionalparam>${javadoc.opts}</additionalparam>
</configuration>
</plugin>
</reportPlugins>
</configuration>
</plugin>
</plugins>
</build>
Für Maven-Javadoc-Plugin 3.0.x: Ersetzen
<additionalparam>-Xdoclint:none</additionalparam>
mit
<doclint>none</doclint>
Die einfachste Methode, um mit Java 8 und Java 7 zusammenzuarbeiten, ist die Verwendung eines Profils im Build:
<profiles>
<profile>
<id>doclint-Java8-disable</id>
<activation>
<jdk>[1.8,)</jdk>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Hier ist die prägnanteste Möglichkeit, Doclint-Warnungen unabhängig von der verwendeten Java-Version zu ignorieren. Es ist nicht erforderlich, die Plug-In-Konfiguration in mehreren Profilen mit geringfügigen Änderungen zu duplizieren.
<profiles>
<profile>
<id>doclint-Java8-disable</id>
<activation>
<jdk>[1.8,)</jdk>
</activation>
<properties>
<javadoc.opts>-Xdoclint:none</javadoc.opts>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<executions>
<execution>
<id>attach-javadocs</id> <!-- The actual id should be apparent from maven output -->
<configuration>
<additionalparam>${javadoc.opts}</additionalparam>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
</build>
Getestet auf Oracle/open jdk 6, 7 und 8.
Fügen Sie im Abschnitt für globale Eigenschaften in der POM-Datei Folgendes hinzu:
<project>
...
<properties>
<additionalparam>-Xdoclint:none</additionalparam>
</properties>
Die allgemeine Lösung, die hier in den anderen Antworten (das Hinzufügen dieser Eigenschaft in den Plug-In-Abschnitt) bereitgestellt wurde, funktionierte aus irgendeinem Grund nicht. Nur durch die globale Einstellung konnte ich das Javadoc-Gefäß erfolgreich bauen.
<profiles>
<profile>
<id>disable-Java8-doclint</id>
<activation>
<jdk>[1.8,)</jdk>
</activation>
<properties>
<additionalparam>-Xdoclint:none</additionalparam>
</properties>
</profile>
</profiles>
Fügen Sie das einfach zu Ihrem POM hinzu und Sie können loslegen.
Dies ist im Grunde die Antwort von @ ankon plus @ zapps Antwort .
Ersetzen
<additionalparam>-Xdoclint:none</additionalparam>
durch
<doclint>none</doclint>
Wenn Sie nur die maven-javadoc-plugin
-Konfiguration überschreiben, wird das Problem mit mvn site
nicht behoben (beispielsweise während der Freigabephase). Folgendes musste ich tun:
<profile>
<id>doclint-Java8-disable</id>
<activation>
<jdk>[1.8,)</jdk>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.3</version>
<configuration>
<reportPlugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
</plugin>
</reportPlugins>
</configuration>
</plugin>
</plugins>
</build>
</profile>
Ich denke nicht, DocLint auszuschalten ist eine gute Lösung, zumindest nicht langfristig. Es ist gut, dass Javadoc ein wenig strenger geworden ist. Der richtige Weg, um das Build-Problem zu beheben, ist das zugrunde liegende Problem zu beheben. Ja, Sie müssen diese Quellcodedateien letztendlich korrigieren.
Hier sind die Dinge, auf die Sie achten sollten:
{@link }
s (Gleiches gilt für ähnliche Tags wie @see
)@author
-Werte Dies wurde früher akzeptiert: @author John <[email protected]>
, aber aufgrund der nicht gekaperten Klammern nicht mehr.Sie müssen lediglich Ihre Quellcodedateien reparieren und Ihr Javadoc so lange weiterbauen, bis es fehlerfrei erstellt werden kann. Umständlich ja, aber ich persönlich mag es, wenn ich meine Projekte auf das DocLint-Niveau gebracht habe, weil ich damit mehr Vertrauen habe, dass der von mir produzierte Javadoc tatsächlich das ist, was ich beabsichtige.
Es gibt natürlich das Problem, wenn Sie Javadoc für einen Quellcode generieren, den Sie nicht selbst erstellt haben, beispielsweise weil er von einem Codegenerator stammt, z. wsimport . Seltsam, dass Oracle vor der Veröffentlichung von JDK8 keine eigenen Tools für die JDK8-Kompatibilität vorbereitet hat. Es scheint es wird nicht behoben bis Java 9 . Nur in diesem Fall schlage ich vor, DocLint wie auf dieser Seite beschrieben zu deaktivieren.
Sie könnten versuchen, die failOnError
-Eigenschaft (siehe plugin documentation ) auf false
zu setzen:
<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>
<configuration>
<failOnError>false</failOnError>
</configuration>
</execution>
</executions>
</plugin>
Wie Sie den Dokumenten entnehmen können, ist der Standardwert true
.
Da dies von der Version Ihrer JRE abhängt, mit der der Befehl maven ausgeführt wird, möchten Sie DocLint
möglicherweise nicht standardmäßig in Ihrer pom.xml deaktivieren
Daher können Sie von der Befehlszeile aus den Schalter -Dadditionalparam=-Xdoclint:none
verwenden.
Beispiel: mvn clean install -Dadditionalparam=-Xdoclint:none
Der Name der Konfigurationseigenschaft wurde in der neuesten Version von maven-javadoc-plugin (Version 3.0.0) geändert.
Daher funktioniert das <additionalparam> nicht. Also müssen wir es wie folgt ändern.
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<doclint>none</doclint>
</configuration>
</plugin>
Sparen Sie sich also einige Stunden, die ich nicht getan habe, und probieren Sie es aus, wenn es nicht funktioniert:
<additionalJOption>-Xdoclint:none</additionalJOption>
Das Tag wird für neuere Versionen geändert.
Ab maven-javadoc-plugin 3.0.0 sollten Sie additionalJOption verwenden, um eine zusätzliche Javadoc-Option festzulegen. Wenn Sie also möchten, dass Javadoc doclint deaktiviert, sollten Sie die folgende Eigenschaft hinzufügen.
<properties>
...
<additionalJOption>-Xdoclint:none</additionalJOption>
...
<properties>
Sie sollten auch die Version von maven-javadoc-plugin als 3.0.0 oder höher angeben.
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
</plugin>
Unten hinzugefügt
Java_TOOL_OPTIONS = -DadditionalJOption = -Xdoclint: keine
in Jenkins Job Konfiguration> Build-Umgebung> Umgebungsvariablen in den Build-Prozess einfügen> Eigenschaften
Mein Problem der Code-Erstellung durch Jenkins Maven wurde gelöst :-)
Ich bin mir nicht sicher, ob dies helfen wird, aber selbst mit der Version oozie-4.2.0 hatte ich vor kurzem dasselbe Problem. Nachdem ich die obigen Antworten gelesen hatte, habe ich gerade die Maven-Option über die Befehlszeile hinzugefügt, und es hat für mich funktioniert. Also einfach hier teilen.
Ich verwende Java 1.8.0_77 , habe es nicht mit Java 1.7 versucht
bin/mkdistro.sh -DskipTests -Dmaven.javadoc.opts = '- Xdoclint: -html'
Ich möchte einige Einblicke in andere Antworten geben
In meinem Fall
-Xdoclint: keine
Funktionierte nicht.
Beginnen wir damit, in meinem Projekt brauchte ich Javadoc überhaupt nicht. Nur einige notwendige Plugins hatten eine Abhängigkeit von der Buildzeit.
Der einfachste Weg, mein Problem zu lösen, war also:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
Um fehlende @param
- und @return
-Tags zu ignorieren, reicht es aus, die missing
doclint-Gruppe zu deaktivieren. Auf diese Weise wird der Javadoc immer noch auf höhere Ebenen und Syntaxprobleme geprüft:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<doclint>all,-missing</doclint>
</configuration>
</plugin>
Beachten Sie, dass dies für die Plugin-Version 3.0 oder neuer gilt.
Ich bin ein bisschen zu spät zur Party gekommen, musste aber auch nach einer Lösung suchen, bin hier gelandet und habe sie dann gefunden.
Folgendes funktioniert für mich:
export Java_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:none
Und dann starten Sie Ihren Maven-Build, einen beliebigen Linux-Distributions-Build usw. Das Schöne daran ist, dass keine Änderung der Maven-Konfigurationsdateien erforderlich ist - das konnte ich nicht Das zu tun, da mein Ziel darin bestand, eine Reihe von Centos rpm-Paketen neu zu erstellen, musste also wirklich tief gehen.