Maven funktioniert in Java 8 nicht, wenn Javadoc-Tags unvollständig sind


312

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 installin 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?


Hallo @ 75inchpianist, ich habe die Frage aktualisiert, tatsächlich handelt es sich um Fehler (obwohl überraschenderweise die letzte Zeile des Fehlers auf eine Warnung verweist, wie Sie in der generierten Ausgabe sehen können). Das Projekt ist nicht in meinem lokalen Repository installiert, daher wird es nicht als einfache Warnung angesehen :(
Sergio

Für GoogleJuice: Ich habe den Fehler "Fehler: schlechte Verwendung von '>'" erhalten, weil ich einen großen Pfeil im JavaDoc-Kommentar hatte
Drew Stephens

1
Vielleicht ist es für jemanden nützlich: Sie können all diese unvollständigen Tags in IntelliJ leicht finden, indem Sie Inspektion Strg + Alt + Umschalt + i "Deklaration hat JavaDoc-Probleme" ausführen
Sergey Ponomarev

1
Dies ist kein Maven, es ist das Javadoc-Programm, das in Java 8 viel strenger wurde.
Thorbjørn Ravn Andersen

Antworten:


387

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:

Bieten Sie eine Möglichkeit, Fehler in Javadoc-Kommentaren zu Beginn des Entwicklungszyklus zu erkennen und auf eine Weise, die leicht mit dem Quellcode verknüpft werden kann.

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:

<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.0+: Ersetzen

<additionalparam>-Xdoclint:none</additionalparam>

mit

<doclint>none</doclint>

18
Gibt es eine Möglichkeit, dies sowohl mit JDK 8 als auch mit JDK 7 zum Laufen zu bringen? Es schlägt unter JDK 7 fehl, weil javadoces diese Option nicht kennt.
Feuermurmel

8
Während dies die hier gestellte Frage beantwortet, möchte ich zukünftigen Besuchern raten, zuerst die Antwort von peterh zu überprüfen: stackoverflow.com/a/34809831/1180785 (die meisten Leute, die dieses Problem haben, haben nur eine Handvoll Stellen, die behoben werden müssen, daher ist es besser um sie zu reparieren, als die Prüfung zu deaktivieren!)
Dave

8
Verwenden Sie für das Maven-Javadoc-Plugin <doclint>none</doclint>. Siehe maven.apache.org/plugins/maven-javadoc-plugin/…
coolersport

11
Auch da maven-javadoc-plugin 3.0.0 <additionalparam/>durch ersetzt wird <additionalOptions/>. Siehe Issues.apache.org/jira/browse/MJAVADOC-475
fdelsert

1
Das ist richtig. Ich möchte mitteilen, dass während der Migration von Maven 2 zu Maven 3 nicht vergessen wird, dass dieses Plugin-Tag nicht in das Reporting-Tag aufgenommen werden sollte, sondern direkt in PluginManagement (pom.xml)
Dimeros

97

Der einfachste Ansatz, um die Arbeit mit Java 8 und Java 7 zum Laufen zu bringen, 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>

1
Die beste Lösung wäre wahrscheinlich ein Hybrid zwischen Ihrer Lösung und der von Zapp unten bereitgestellten. Wenn Sie dies so belassen, stürzt der Befehl mvn site: site weiterhin ab. Sie sollten ein Profil erstellen, das vom 1.8 jdk aktiviert wird und eine globale Eigenschaft festlegt.
Max Nad

64

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.

<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 Orakel / Open JDK 6, 7, 8 und 11.


1
Und wo soll das konkret platziert werden?
klares Licht

1
@clearlight, beide buildund profilessind Blöcke der obersten Ebene in Maven pom.xml. maven.apache.org/pom.html#Build .
Oliver Gondža

Vielen Dank. Ich habe das schließlich entdeckt, aber es ist gut, dass dies mit dieser Antwort verbunden ist.
klares Licht

38

Fügen Sie dem Abschnitt mit den globalen Eigenschaften in der POM-Datei Folgendes hinzu:

<project>
    ...
    <properties>
        <additionalparam>-Xdoclint:none</additionalparam>
    </properties>

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.


1
Dies ist die einzige Lösung, die für mich funktioniert hat. Ich habe die Antwort auch hier gelesen: blog.joda.org/2014/02/turning-off-doclint-in-jdk-8-javadoc.html
acvcu

37

Die kürzeste Lösung, die mit jeder Java-Version funktioniert:

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


Es ist die beste Lösung für mich. Es funktioniert für Bots Java 7 und Java 8. Aber die Art und Weise, wie es funktioniert, ist eine Art Magie :. Wie fügt dieser Parameter "AdditionalParam" dem Plugin Javadoc (und nicht den anderen) hinzu
pdem

1
@pdem Der zusätzliche Parameter wird zu Maven hinzugefügt, nicht zum Javadoc-Plugin. Diese Lösung funktioniert unabhängig davon, ob Sie das Plugin explizit verwenden oder nicht.
Fred Porciúncula

2
Seit maven-javadoc-plugin 3.0.0 müssen Sie Ihrem<additionalJOption>-Xdoclint:none</additionalJOption><doclint>none</doclint><properties>
Sergi

Ja, das Hinzufügen eines JDK 8-bezogenen Profils und das Festlegen von <doclint> none </ doclint> behebt das Problem. Es generiert Javadoc-JAR genauso wie in JDK 7. Danke.
Saurabhcdt

1
Können Sie das klarstellen: Wenn ich mit maven-javadoc-plugin 3.0.0 und höher einfach spezifiziere <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 Die doclintOption wird von der aktuellen Java-Version unterstützt.
Garret Wilson

31

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:

  • Fehlerhaftes HTML (z. B. ein fehlendes End-Tag, nicht maskierte Klammern usw.)
  • Ungültige {@link }s. (Gleiches gilt für ähnliche Tags wie @see)
  • Ungültige @authorWerte. Dies wurde früher akzeptiert, @author John <john.doe@mine.com>aber nicht mehr wegen der nicht maskierten Klammern.
  • HTML-Tabellen in Javadoc erfordern jetzt eine Zusammenfassung oder Beschriftung. Siehe diese Frage zur Erklärung.

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.


1
Stimmen Sie hier voll und ganz zu, dass Sie für generierten Code das Plugin einfach anweisen können, Code in einem bestimmten Paket nicht zu verarbeiten, indem Sie im Konfigurationsabschnitt des Javadoc-Plugins einen Abschnitt excludePackageNames hinzufügen. siehe maven.apache.org/plugins/maven-javadoc-plugin/examples/…
Newtopian

@ Newtopian. Guter Punkt. In meinem Fall brauchte ich jedoch den generierten Code von wsimport, um Teil des Javadoc zu werden.
Peterh

Das ist so viel einfacher gesagt als getan, da viele von uns, die auf diese Probleme stoßen, versuchen, ungewohnten OpenSource-Code zu erstellen, der irgendwo eine Maven-Abhängigkeit aufweist, und wir keine Ahnung haben, wie das alles funktioniert, und daher keine einfache Möglichkeit haben, die zugrunde liegenden Ursachen anzugehen. Der Kontext hat zu viel Kurzsichtigkeit. Die Benutzer müssen den Umfang der Antworten stärker verallgemeinern und genauere Informationen zur Durchführung der Korrekturen bereitstellen.
klares Licht

30

maven-javadoc-pluginNur das Überschreiben der Konfiguration behebt das Problem nicht mit mvn site(z. B. während der Release-Phase verwendet). 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>

3
Dies ist ein wichtiger Punkt, da das Fehlen dieser Einstellung bei der Aktivierung des Site-Plugins dazu führt, dass Release: Perform fehlschlägt, während Release: Prepare einwandfrei funktioniert hat. Es kann ein sehr ärgerliches Problem sein, es zu finden und zu beheben.
Peter N. Steinmetz

Beachten Sie , dass die Konfiguration der maven-javadoc-pluginüber den <reportPlugins>Abschnitt der maven-site-pluginwird nicht empfohlen , für aktuelle Versionen von Maven 3.
Martin Höller

@ MartinHöller Wie löse ich also Fehler bei der Veröffentlichung: Führen Sie die mit mavene-javadoc-plugin: 3.0.1 verbundene Phase ordnungsgemäß durch?
Vitalii Diravka

@VitaliiDiravka Kommt auf die Fehler an ... Bitte stellen Sie dazu eine separate Frage.
Martin Höller

22

Sie können versuchen, die failOnErrorEigenschaft (siehe Plugin-Dokumentation ) auf Folgendes festzulegenfalse :

<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, lautet der Standardwert true.


Danke für die Idee @Martin. Zumindest mit dieser Eigenschaft kann ich das Projekt erneut erstellen und installieren, aber mir fehlt immer noch das Java Doc Jar (ich brauche es, um es in Maven Central bereitzustellen). Ich habe meine Frage mit den Details des Experiments aktualisiert.
Sergio

Dies war die ausreichendste Antwort für mich. Ich wollte nur das Bauen während der laufenden Entwicklung testen, als die Javadocs noch unvollständig waren.
ZachSand

17

Da dies von der Version Ihrer JRE abhängt, die zum Ausführen des Befehls maven verwendet wird, möchten Sie diese wahrscheinlich nicht DocLintstandardmäßig in Ihrer pom.xml deaktivieren

Daher können Sie über die Befehlszeile den Schalter verwenden -Dadditionalparam=-Xdoclint:none.

Beispiel: mvn clean install -Dadditionalparam=-Xdoclint:none


3
Dies ist besonders nützlich, da Sie es auch Jenkins verwenden können. Setzen Sie 'Global MAVEN_OPTS' (unter 'Configure System') auf -Dadditionalparam=-Xdoclint:noneund alle Ihre Builds funktionieren mit Java 8.
Wilfred Hughes

mvn org.apache.maven.plugins:maven-javadoc-plugin:3.1.0:jar -DadditionalJOption=-Xdoclint:none- es hat bei mir funktioniert
Roman Khomyshynets

10

Der 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.

   <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>3.0.0</version>
      <configuration>
         <doclint>none</doclint>
      </configuration>
  </plugin>


Es wurde für mich behoben, OpenGrok im Februar 19 aus Github-Quellen zu erstellen. Sollte erwähnen, dass Ihr Patch in pom.xmldas Verzeichnis src / build des Projekts aufgenommen wird. In meinem Fall musste ich nur suchen maven-javadoc-pluginund 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.
klares Licht

4

Ich möchte einen Einblick in andere Antworten geben

In meinem Fall

-Xdoclint: keine

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:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>

danke, arbeite für mich mit Java 11
voldy

4

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.

<properties>
    ...
    <additionalJOption>-Xdoclint:none</additionalJOption>
    ...
<properties>

Sie sollten auch die Version des Maven-Javadoc-Plugins als 3.0.0 oder höher erwähnen.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>3.0.0</version>    
</plugin>

3

Sparen Sie sich also einige Stunden, die ich nicht getan habe, und versuchen Sie dies, wenn es nicht zu funktionieren scheint:

 <additionalJOption>-Xdoclint:none</additionalJOption>

Das Tag wird für neuere Versionen geändert.



Manchmal reicht -Xdoclintes nicht aus, aber zusätzliche Argumente sind erforderlich. Neuere Versionen des maven-javadoc-pluginsorgen additionalJOptionsdafü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 zu wrong argsFehlern führt.
Thorsten Schöning

Ersteres funktioniert nur unter Windows, stattdessen unter Linux: 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 Windows javadocausgeführt wird cmd.exe, das eine große Zeichenfolge als Befehlszeile analysiert und die additionalJOptionwie beabsichtigt aufteilt. Unter Linux werden die additionalJOptionArgumente einzeln direkt an den Prozess übergeben und als ein Argument übergeben, was zum Fehler führt.
Thorsten Schöning

Laut Process Monitor, cmd.exenicht verwendet wird. Java erstellt höchstwahrscheinlich einfach eine große Befehlszeile und übergibt diese an CreateProcess, sodass sie von Windows wie beabsichtigt analysiert wird: Aufteilen von Argumenten an Leerzeichen unter Berücksichtigung von Anführungszeichen.
Thorsten Schöning

3

Unten hinzugefügt

JAVA_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:none

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 :-)


Dies funktioniert für maven-javadoc-plugin 2.4, aber ab 2.5 (und bis 3.0.0) verursacht dies einen Fehler: "Exit-Code: 1 - javadoc: error - ungültiges Flag: -Xdoclint: none". Die Lösung ist also spröde.
Akom

1
Bei Verwendung mit mvn release:performder Syntax muss sein mvn release:perform -Darguments="-Dmaven.javadoc.skip=true".
PatS

2

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'


1

Um fehlende @paramund @returnTags zu ignorieren , reicht es aus, die missing doclint-Gruppe zu deaktivieren . Auf diese Weise wird das Javadoc weiterhin auf übergeordnete Probleme und Syntaxprobleme überprü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 Plugin Version 3.0 oder neuer ist.


0

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

export JAVA_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:none

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.