Seit ich Maven verwende, kann ich in meinen lokalen Repository-Projekten unvollständige Javadoc-Tags (z. B. einen fehlenden Parameter) erstellen und installieren.
Seit ich auf Java 8 (1.8.0-ea-b90) migriert bin, ist Maven absolut streng in Bezug auf fehlende Dokumentations-Tags 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 vorhanden 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. Die Problemumgehung, nur alle Javadocs in all diesen Projekten zu reparieren, scheint in meinem Szenario nicht machbar zu sein.
Dies ist ein kleiner Teil der Ausgabe, die ich sehe, wenn ich sie mvn clean package install
in meinem Projekt ausführe :
[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 ich bereits sagte, funktioniert alles einwandfrei, wenn ich zu Java 7 zurückkehre. Ist dies möglicherweise ein Fehler im Zusammenhang mit Maven, das in Java 8 ausgeführt wird? Wie könnte ich es mit Java 8 zum Laufen bringen (dh in der Lage sein, das Javadoc des Projekts zu erstellen und seinen Code in meinem lokalen Repository zu installieren)? Ich habe sowohl mit Maven 3.0.3 als auch mit 3.0.5 in OSX getestet.
AKTUALISIEREN:
Wenn ich meine Javadoc-Plugin-Konfiguration mit ändere <failOnError>false</failOnError>
(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 Fragment der Ausgabe, die ich in der Konsole mit dieser neuen Konfiguration sehe, ist:
[ERROR] MavenReportException: Fehler beim Erstellen des Archivs: Code beenden: 1 - /Users/....java:18: Warnung: no @param ... Befehlszeile war: / Library / Java / Home / bin / javadoc @options @Pakete
Weitere Informationen finden Sie in den generierten Javadoc-Dateien im Verzeichnis '/ Users / sergioc / Documents / workspaces / heal / minitoolbox / target / apidocs'.
at org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeJavadocCommandLine (AbstractJavadocMojo.java:5043) at org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeReport (AbstractJavado) .javadoc.JavadocJar.execute (JavadocJar.java:181) unter org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:101) unter org.apache.maven.lifecycleec : 209) unter org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153) unter org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:145) unter org.apache. maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:84) unter org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:59) unter org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild (LifecycleStarter.java:183) unter org.apache.maven.lifecycle.internal.LifecycleStarter.ec. unter org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:320) unter org.apache.maven.DefaultMaven.execute (DefaultMaven.java:156) unter org.apache.maven.cli.MavenCli.execute (MavenCli.java) : 537) unter org.apache.maven.cli.MavenCli.doMain (MavenCli.java:196) unter org.apache.maven.cli.MavenCli.main (MavenCli.java:141) unter sun.reflect.NativeMethodAccessorImpl.invoke0 ( Native Method) unter sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) unter sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) unter java.lang.reflect.Method.Rufen Sie (Method.java:491) unter org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:290) unter org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:230) auf. unter org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:409) unter org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:352)
Gibt es eine Problemumgehung zum Erstellen der Quellen, Installieren des Projekts und Generieren der Javadoc-JAR in einem Schritt, während mit Java 7 gearbeitet wurde?
Antworten:
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:
Dies ist standardmäßig aktiviert und führt vor dem Generieren von Javadocs eine Reihe von Überprüfungen durch. Sie müssen dies für Java 8 deaktivieren, wie in diesem Thread angegeben . Sie müssen dies zu Ihrer Maven-Konfiguration hinzufügen:
Für maven-javadoc-plugin 3.0.0+: Ersetzen
mit
quelle
javadoc
es diese Option nicht kennt.<doclint>none</doclint>
. Siehe maven.apache.org/plugins/maven-javadoc-plugin/…<additionalparam/>
durch ersetzt wird<additionalOptions/>
. Siehe Issues.apache.org/jira/browse/MJAVADOC-475Der einfachste Ansatz, um die Arbeit mit Java 8 und Java 7 zum Laufen zu bringen, ist die Verwendung eines Profils im Build:
quelle
Hier ist die prägnanteste Methode, mit der ich Docclint-Warnungen unabhängig von der verwendeten Java-Version ignorieren kann. Es ist nicht erforderlich, die Plugin-Konfiguration in mehreren Profilen mit geringfügigen Änderungen zu duplizieren.
Getestet auf Orakel / Open JDK 6, 7, 8 und 11.
quelle
build
undprofiles
sind Blöcke der obersten Ebene in Mavenpom.xml
. maven.apache.org/pom.html#Build .Fügen Sie dem Abschnitt mit den globalen Eigenschaften in der POM-Datei Folgendes hinzu:
Die hier in den anderen Antworten angegebene allgemeine Lösung (Hinzufügen dieser Eigenschaft im Abschnitt "Plugins") funktionierte aus irgendeinem Grund nicht. Nur wenn ich es global einstelle, kann ich das Javadoc-Glas erfolgreich erstellen.
quelle
Die kürzeste Lösung, die mit jeder Java-Version funktioniert:
Fügen Sie das einfach Ihrem POM hinzu und Sie können loslegen.
Dies ist im Grunde die Antwort von @ ankon plus die Antwort von @ zapp .
Für Benutzer von maven-javadoc-plugin 3.0.0:
Ersetzen
<additionalparam>-Xdoclint:none</additionalparam>
durch
<doclint>none</doclint>
quelle
<additionalJOption>-Xdoclint:none</additionalJOption>
<doclint>none</doclint>
<properties>
<doclint>none</doclint>
(ohne aktivierungsbasierte JDK-Aktivierung), schlägt dies bei JDK unter 1.8 immer noch fehl oder erkennt das maven-javadoc-plugin automatisch, ob Diedoclint
Option wird von der aktuellen Java-Version unterstützt.Ich denke nicht, dass das Ausschalten von DocLint eine gute Lösung ist, zumindest nicht langfristig. Es ist gut, dass Javadoc etwas strenger geworden ist. Der richtige Weg, um das Build-Problem zu beheben, besteht darin, das zugrunde liegende Problem zu beheben . Ja, Sie müssen letztendlich diese Quellcodedateien reparieren.
Hier sind die Dinge, auf die Sie achten sollten, mit denen Sie zuvor durchkommen konnten:
{@link }
s. (Gleiches gilt für ähnliche Tags wie@see
)@author
Werte. Dies wurde früher akzeptiert,@author John <[email protected]>
aber nicht mehr wegen der nicht maskierten Klammern.Sie müssen lediglich Ihre Quellcodedateien reparieren und Ihr Javadoc so lange erstellen, bis es fehlerfrei erstellt werden kann. Umständlich ja, aber ich persönlich mag es, wenn ich meine Projekte auf DocLint-Niveau gebracht habe, weil ich dadurch sicherer sein kann, dass das von mir produzierte Javadoc tatsächlich das ist, was ich beabsichtige.
Es gibt natürlich das Problem, wenn Sie Javadoc auf einem Quellcode generieren, den Sie nicht selbst erstellt haben, beispielsweise weil er von einem Codegenerator stammt, z . B. wsimport . Seltsamerweise hat Oracle vor der Veröffentlichung von JDK8 keine eigenen Tools für die JDK8-Konformität vorbereitet. Es scheint, dass es nicht vor Java 9 behoben wird . Nur in diesem speziellen Fall empfehle ich, DocLint zu deaktivieren, wie an anderer Stelle auf dieser Seite dokumentiert.
quelle
wsimport
, um Teil des Javadoc zu werden.maven-javadoc-plugin
Nur das Überschreiben der Konfiguration behebt das Problem nicht mitmvn site
(z. B. während der Release-Phase verwendet). Folgendes musste ich tun:quelle
maven-javadoc-plugin
über den<reportPlugins>
Abschnitt dermaven-site-plugin
wird nicht empfohlen , für aktuelle Versionen von Maven 3.Sie können versuchen, die
failOnError
Eigenschaft (siehe Plugin-Dokumentation ) auf Folgendes festzulegenfalse
:Wie Sie den Dokumenten entnehmen können, lautet der Standardwert
true
.quelle
Da dies von der Version Ihrer JRE abhängt, die zum Ausführen des Befehls maven verwendet wird, möchten Sie diese wahrscheinlich nicht
DocLint
standardmäßig in Ihrer pom.xml deaktivierenDaher können Sie über die Befehlszeile den Schalter verwenden
-Dadditionalparam=-Xdoclint:none
.Beispiel:
mvn clean install -Dadditionalparam=-Xdoclint:none
quelle
-Dadditionalparam=-Xdoclint:none
und alle Ihre Builds funktionieren mit Java 8.mvn org.apache.maven.plugins:maven-javadoc-plugin:3.1.0:jar -DadditionalJOption=-Xdoclint:none
- es hat bei mir funktioniertDer Name der Konfigurationseigenschaft wurde in der neuesten Version des maven-javadoc-Plugins 3.0.0 geändert.
Daher funktioniert der <additionalparam> nicht. Also müssen wir es wie folgt ändern.
quelle
doclint
Dokumentation hier: maven.apache.org/plugins/maven-javadoc-plugin/…pom.xml
das Verzeichnis src / build des Projekts aufgenommen wird. In meinem Fall musste ich nur suchenmaven-javadoc-plugin
und dann zu dem<configuration></configuration>
bereits vorhandenen Block gehen und hinzufügen<doclint>none</doclint>
. So einfach das alles ist, wenn man es einmal weiß, der Kontext hier ist, dass ich versuche, einen anderen Fehler in OpenGrok zu beheben und Maven noch nie zuvor verwendet habe und nicht in ein anderes Unterprojekt zurückkehren möchte, nur um es herauszufinden Informationen zum Anwenden von Schnellkorrekturen.Ich möchte einen Einblick in andere Antworten geben
In meinem Fall
Hat nicht funktioniert.
Beginnen wir damit, in meinem Projekt brauchte ich überhaupt kein Javadoc. Nur einige notwendige Plugins hatten eine Build-Time-Abhängigkeit davon.
Der einfachste Weg, mein Problem zu lösen, war:
quelle
Ab dem Maven- Javadoc -Plugin 3.0.0 sollten Sie AdditionalJOption verwendet haben , um eine zusätzliche Javadoc-Option festzulegen. Wenn Sie also möchten, dass Javadoc Docclint deaktiviert, sollten Sie die folgende Eigenschaft hinzufügen.
Sie sollten auch die Version des Maven-Javadoc-Plugins als 3.0.0 oder höher erwähnen.
quelle
Sparen Sie sich also einige Stunden, die ich nicht getan habe, und versuchen Sie dies, wenn es nicht zu funktionieren scheint:
Das Tag wird für neuere Versionen geändert.
quelle
-Xdoclint
es nicht aus, aber zusätzliche Argumente sind erforderlich. Neuere Versionen desmaven-javadoc-plugin
sorgenadditionalJOptions
dafür, ältere nicht. Eine Problemumgehung ist:<additionalJOption>"-Xdoclint:none" "--allow-script-in-comments"</additionalJOption>
Anführungszeichen sind wichtig, andernfalls fügt das Plugin sie hinzu und nimmt nur ein Argument anstelle von zwei an, was zuwrong args
Fehlern führt.javadoc: error - Illegal package name: ""-Xdoclint:none" "--allow-script-in-comments""
Die äußeren Anführungszeichen werden durch die Protokollierungsanweisung hinzugefügt und sind in der Shell nicht vorhanden. Ich denke, das Problem ist, dass unter Windowsjavadoc
ausgeführt wirdcmd.exe
, das eine große Zeichenfolge als Befehlszeile analysiert und dieadditionalJOption
wie beabsichtigt aufteilt. Unter Linux werden dieadditionalJOption
Argumente einzeln direkt an den Prozess übergeben und als ein Argument übergeben, was zum Fehler führt.Process Monitor
,cmd.exe
nicht verwendet wird. Java erstellt höchstwahrscheinlich einfach eine große Befehlszeile und übergibt diese anCreateProcess
, sodass sie von Windows wie beabsichtigt analysiert wird: Aufteilen von Argumenten an Leerzeichen unter Berücksichtigung von Anführungszeichen.Unten hinzugefügt
In Jenkins Job:
Konfiguration> Build-Umgebung> Injizieren von Umgebungsvariablen in den Build-Prozess> Eigenschaften Inhalt
Mein Problem der Codeerstellung durch Jenkins Maven wurde gelöst :-)
quelle
mvn release:perform
der Syntax muss seinmvn release:perform -Darguments="-Dmaven.javadoc.skip=true"
.Ich bin mir nicht sicher, ob dies helfen wird, aber selbst ich hatte kürzlich mit der Version oozie-4.2.0 genau das gleiche Problem . Nachdem ich die obigen Antworten gelesen habe, habe ich gerade die Maven-Option über die Befehlszeile hinzugefügt und sie hat bei mir 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'
quelle
Um fehlende
@param
und@return
Tags zu ignorieren , reicht es aus, diemissing
doclint-Gruppe zu deaktivieren . Auf diese Weise wird das Javadoc weiterhin auf übergeordnete Probleme und Syntaxprobleme überprüft:Beachten Sie, dass dies für Plugin Version 3.0 oder neuer ist.
quelle
Ich bin ein bisschen zu spät zur Party, aber ich musste auch nach einer Problemumgehung suchen, bin hier gelandet und habe sie dann gefunden.
Folgendes funktioniert für mich: -
Und dann starten Sie Ihren Maven-Build, jeden Linux-Distributions-Build usw. Das Schöne daran, dass keine Änderung der Maven- Konfigurationsdateien erforderlich ist - das konnte ich nicht tun, da mein Ziel darin bestand, eine Reihe von Centos-RPM- Paketen neu zu erstellen , also musste ich geh wirklich tief.
quelle