Maven nie działa w Javie 8, gdy Tagi Javadoc są niekompletne

Odkąd używam Mavena, jestem w stanie zbudować i zainstalować w moim lokalnym repozytorium projekty, które mają niekompletne Tagi Javadoc (na przykład brakujący parametr).

Jednak od czasu migracji do Java 8 (1.8.0-ea-b90) Maven jest absolutnie surowy w kwestii brakujących tagów dokumentacji i pokazuje mi wiele błędów Javadoc związanych z problemami Javadoc, gdy próbuję zbudować lub zainstalować projekt, w którym Javadoc nie jest "idealny". Niektóre z projektów, które próbuję skompilować i zainstalować w moim lokalnym repozytorium to projekty stron trzecich, nad którymi nie mam kontroli. Więc obejście naprawiania wszystkich Javadoc we wszystkich tych projektach nie wydaje się być wykonalne w moim scenariuszu.

Jest to mała część wyjścia, którą widzę podczas wykonywania mvn clean package install w moim projekcie:

[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] ^

Wtyczka Javadoc Maven jest skonfigurowana tak w moim POM:

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

Jak już mówiłem, wszystko działa dobrze, jeśli wrócę do Java 7. Może jest to błąd związany z uruchomieniem Mavena w Javie 8? Jak Mogę sprawić, by to działało (tzn. móc zbudować Javadoc projektu i zainstalować jego kod w moim lokalnym repozytorium) z Java 8? Testowałem zarówno z Maven 3.0.3 i 3.0.5 w OSX.

UPDATE:

Jeśli zmienię konfigurację wtyczki Javadoc za pomocą <failOnError>false</failOnError> (dzięki 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>

Następnie projekt jest instalowany w moim lokalnym repozytorium. Jednak Javadoc jar nadal nie jest generowany.

Fragment wyjścia jaki widzę w konsoli z tym nowa konfiguracja to:

[błąd] MavenReportException: błąd podczas tworzenia archiwum: Exit kod: 1 - / Users/....java: 18: warning: no @ param ... Wiersz poleceń było: / Library / Java / Home / bin / javadoc @options @packages

Odnoszą się do wygenerowanych plików Javadoc w "/Users/sergioc/Documents/workspaces/heal/minitoolbox/target / apidocs" reż.

At org.Apacz.maven.plugin.javadoc.AbstractJavadocMojo.executeJavadocCommandLine (AbstractJavadocMojo.wyswietlen: 5043) na org.Apacz.maven.plugin.javadoc.AbstractJavadocMojo.executeReport (AbstractJavadocMojo.rok wydania: 1990) na org.Apacz.maven.plugin.javadoc.JavadocJar.execute (Dżawadocjar.Java:181) na org.Apacz.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.Java:101) na org.Apacz.maven.cykl życia.wewnętrzne.MojoExecutor.execute (MojoExecutor.Java:209) na org.Apacz.maven.cykl życia.wewnętrzne.MojoExecutor.execute (MojoExecutor.Java:153) na org.Apacz.maven.cykl życia.wewnętrzne.MojoExecutor.execute (MojoExecutor.Java:145) na org.Apacz.maven.cykl życia.wewnętrzne.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.Java:84) na org.Apacz.maven.cykl życia.wewnętrzne.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.Java:59) na org.Apacz.maven.cykl życia.wewnętrzne.LifecycleStarter.singleThreadedBuild (LifecycleStarter.Java:183) na org.Apacz.maven.cykl życia.wewnętrzne.LifecycleStarter.execute (LifecycleStarter.Java:161) w org.Apacz.maven.DefaultMaven.doExecute (DefaultMaven.java: 320) W org.Apacz.maven.DefaultMaven.execute (DefaultMaven.java: 156) w org.Apacz.maven.cli.MavenCli.execute (MavenCli.java:537) w org.Apacz.maven.cli.MavenCli.domena (MavenCli.java:196) w org.Apacz.maven.cli.MavenCli.main (MavenCli.java:141) w słońce.zastanów się.NativeMethodAccessorImpl.invoke0 (metoda natywna) w słońce.zastanów się.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.Java:57) na słońce.zastanów się./ Align = "center" bgcolor = "# e0ffe0 " / cesarz chin / / align = center / invoke(ang.)java:43) na Javie.lang.zastanów się.Metoda.invoke (metodajava:491) w org.codehaus.splot.świat klas.wyrzutnia.Wyrzutnia.launchEnhanced(Launch.Java:290) na org.codehaus.splot.świat klas.wyrzutnia.Wyrzutnia.launch(Launcher.Java:230) na org.codehaus.splot.świat klas.wyrzutnia.Wyrzutnia.mainWithExitCode (Launcher.Java:409) na org.codehaus.splot.świat klas.wyrzutnia.Wyrzutnia.main (Launch.java:352)

Jakieś obejście, jak zbudować źródła, zainstalować projekt i wygenerować Javadoc JAR w jednym kroku, jak pracował z Java 7?

Author: dur, 2013-04-08

17 answers

Najlepszym rozwiązaniem byłoby naprawienie błędów javadoc. Jeśli z jakiegoś powodu nie jest to możliwe (np.: automatycznie wygenerowany kod źródłowy), możesz wyłączyć to sprawdzanie.

DocLint to nowa funkcja w Javie 8 , która jest podsumowana jako:

Zapewnij sposób wykrywania błędów w komentarzach Javadoc na początku cyklu rozwojowego oraz w sposób, który jest łatwo powiązany z kod źródłowy.

Ta opcja jest domyślnie włączona i będzie uruchamiać wiele sprawdzeń przed wygenerowaniem Javadocs. Musisz to wyłączyć dla Java 8, jak określono w tym wątku . Musisz dodać to do konfiguracji Mavena:

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

Dla maven-javadoc-plugin 3.0.x: Replace

<additionalparam>-Xdoclint:none</additionalparam>

Z

<doclint>none</doclint>
 331
Author: Subhas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-05 19:25:57

Najprostszym podejściem do pracy z Javą 8 i Javą 7 jest użycie profilu w kompilacji:

<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>
 93
Author: ankon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-15 13:21:06

Oto najbardziej zwięzły sposób, jaki znam, aby ignorować Ostrzeżenia doclint niezależnie od używanej wersji Javy. Nie ma potrzeby powielania konfiguracji wtyczki w wielu profilach z niewielkimi modyfikacjami.

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

Testowane na oracle / open jdk 6, 7 i 8.

 55
Author: Oliver Gondža,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-07 07:36:02

Dodaj do sekcji Właściwości globalne w pliku pom:

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

Wspólne rozwiązanie podane tutaj w innych odpowiedziach (dodanie tej właściwości w sekcji wtyczek) nie działało z jakiegoś powodu. Tylko ustawiając go globalnie mogłem zbudować Javadoc jar pomyślnie.

 36
Author: zapp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-16 09:44:13

Najkrótsze rozwiązanie, które będzie działać z dowolną wersją Javy:

<profiles>
    <profile>
        <id>disable-java8-doclint</id>
        <activation>
            <jdk>[1.8,)</jdk>
        </activation>
        <properties>
            <additionalparam>-Xdoclint:none</additionalparam>
        </properties>
    </profile>
</profiles>
Po prostu dodaj to do swojego pomponu i możesz zaczynać.

To w zasadzie odpowiedź@ankon plus odpowiedź@zapp .


Dla użytkowników maven-javadoc-plugin 3.0.0:

Zastąp

<additionalparam>-Xdoclint:none</additionalparam>

By

<doclint>none</doclint>

 32
Author: Thiago Porciúncula,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-26 11:42:54

Nadpisywanie tylko konfiguracji maven-javadoc-plugin, nie rozwiązuje problemu z mvn site (używanym np. na etapie wydania). Oto co musiałem zrobić:

<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>
 30
Author: Jakub Skoczen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-10 07:15:30

Nie sądzę, żeby samo wyłączenie Doclinta było dobrym rozwiązaniem, przynajmniej nie na dłuższą metę. Dobrze, że Javadoc stał się nieco bardziej rygorystyczny, więc właściwym sposobem na naprawienie problemu z kompilacją jest naprawienie podstawowego problemu . Tak, ostatecznie będziesz musiał naprawić te pliki kodu źródłowego.

Oto rzeczy, na które warto zwrócić uwagę, które wcześniej można było ujść na sucho:

  • nieprawidłowo Ukształtowany HTML (na przykład brak znacznika końca, nawiasy nieprzezroczyste itp.)
  • Invalid {@link } s. (to samo dotyczy podobnych tagów, takich jak @see)
  • nieprawidłowe @author wartości. To kiedyś było akceptowane: @author John <[email protected]> ale już tak nie jest z powodu nawiasów nieusuwalnych.
  • tabele HTML w Javadoc wymagają teraz podsumowania lub podpisu. Zobacz to pytanie dla wyjaśnienia.

Będziesz musiał po prostu naprawić swoje pliki z kodem źródłowym i budować Javadoc, dopóki nie będzie mógł zbudować bez awarii. Uciążliwe tak, ale osobiście lubię, gdy wprowadzam swoje projekty do Poziom DocLint, ponieważ oznacza to, że mogę być bardziej pewny, że Javadoc, który produkuję, jest tym, co zamierzam.

Jest oczywiście problem, jeśli generujesz Javadoc na jakimś kodzie źródłowym, którego sam nie stworzyłeś, na przykład dlatego, że pochodzi on z jakiegoś generatora kodu, np. wsimport. Dziwne, że Oracle nie przygotowało własnych narzędzi do zgodności z jdk8 przed wydaniem JDK8. Wygląda na to, że zostanie naprawione dopiero w Javie 9 . Tylko w tym konkretnym przypadku I sugerujemy wyłączenie DocLint zgodnie z dokumentacją w innym miejscu na tej stronie.

 26
Author: peterh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:29

Możesz spróbować ustawić właściwość failOnError (zobacz dokumentacja wtyczki) na false:

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

Jak widać z dokumentów, domyślną wartością jest true.

 18
Author: Martin Ellis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-22 20:07:53

Ponieważ zależy to od wersji twojego JRE, która jest używana do uruchomienia polecenia maven, prawdopodobnie nie chcesz wyłączać DocLint domyślnie w Twoim pom.xml

Stąd z linii poleceń można użyć przełącznika -Dadditionalparam=-Xdoclint:none.

Przykład: mvn clean install -Dadditionalparam=-Xdoclint:none

 17
Author: My-Name-Is,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-03 15:36:39

Nazwa właściwości konfiguracyjnej została zmieniona w najnowszej wersji wtyczki Maven-javadoc czyli 3.0.0.

Stąd nie będzie działać. Więc musimy zmodyfikować go jak poniżej.

   <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>3.0.0</version>
      <configuration>
         <doclint>none</doclint>
      </configuration>
  </plugin>
 7
Author: Balachandar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-20 21:50:01

Począwszy od maven-javadoc-plugin 3.0.0 powinieneś używać additionalJOption Aby ustawić dodatkową opcję Javadoc, więc jeśli chcesz, aby Javadoc wyłączał doclint, powinieneś dodać następującą właściwość.

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

Należy również wspomnieć o wersji maven-javadoc-plugin jako 3.0.0 lub wyższej.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>3.0.0</version>    
</plugin>
 2
Author: amanzoor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-31 14:54:46

Nie jestem pewien, czy to pomoże, ale nawet ja spotkałem się z dokładnie tym samym problemem bardzo niedawno z oozie-4.2.0 Wersja. Po przeczytaniu powyższych odpowiedzi dodałem właśnie opcję maven za pomocą wiersza poleceń i zadziałało dla mnie. Więc dzielę się tutaj.

Używam Javy 1.8.0_77, nie próbowałem z Javą 1.7

Bin/mkdistro.sh -Dskiptests - Dmaven.javadoc.opts='-xdoclint: - html '

 1
Author: Raghu Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-03 02:58:50

Dodano poniżej

JAVA_TOOL_OPTIONS=-DadditionalJOption= - Xdoclint:none

Into Jenkins job konfiguracja > środowisko kompilacji > wprowadzanie zmiennych środowiskowych do procesu kompilacji > zawartość Właściwości

Rozwiązałem mój problem budowania kodu przez Jenkins Maven : -)

 1
Author: snj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-15 00:46:15

Więc zaoszczędź sobie kilka godzin, których nie zrobiłem i spróbuj tego, jeśli wydaje się, że nie działa:

 <additionalJOption>-Xdoclint:none</additionalJOption>

Znacznik jest zmieniany dla nowszych wersji.

 1
Author: rawrintheclouds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-07 14:26:18

Chciałbym dodać trochę wglądu w inne odpowiedzi

W moim przypadku

- Xdoclint: none

Nie zadziałało.

Zacznijmy od tego, że w moim projekcie wcale nie potrzebowałem javadoc. Tylko niektóre niezbędne wtyczki miały zależność od czasu kompilacji.

Więc najprostszym sposobem rozwiązania mojego problemu było:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>
 0
Author: mpasko256,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-15 14:05:33

Jestem trochę spóźniona na imprezę, ale też musiałam szukać obejścia, wylądowałam tutaj, a potem je znalazłam.

Oto, co działa dla mnie:-

export JAVA_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:none

A następnie uruchom Maven build, dowolną dystrybucję Linuksa itp. Fajne jest to, że nie wymaga modyfikacji plików Maven Config - nie mogłem tego zrobić, ponieważ moim celem było odbudowanie kilku pakietówCentos rpm, więc musiałem pójść naprawdę głęboko.

 0
Author: Mariusz Borsa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-10 05:07:35

Aby zignorować brakujące tagi @param i @return wystarczy wyłączyć missing grupa doclint . W ten sposób javadoc będzie nadal sprawdzany pod kątem problemów z wyższym poziomem i składnią:

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

Zauważ, że jest to dla wtyczki w wersji 3.0 lub nowszej.

 0
Author: gjoranv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-16 14:30:29