Maven không hoạt động trong Java 8 khi các thẻ Javadoc không đầy đủ


312

Vì tôi sử dụng Maven, tôi đã có thể xây dựng và cài đặt trong các dự án kho lưu trữ cục bộ có các thẻ Javadoc chưa hoàn chỉnh (ví dụ: một tham số bị thiếu).

Tuy nhiên, vì tôi đã di chuyển sang Java 8 (1.8.0-ea-b90), Maven hoàn toàn nghiêm ngặt về việc thiếu các thẻ tài liệu và cho tôi thấy rất nhiều lỗi Javadoc liên quan đến các vấn đề Javadoc khi tôi cố gắng xây dựng hoặc cài đặt một dự án mà Javadoc không "hoàn hảo". Một số dự án tôi đang cố gắng biên dịch và cài đặt trong kho lưu trữ cục bộ của tôi là các dự án của bên thứ ba mà tôi không có quyền kiểm soát. Vì vậy, cách giải quyết của việc sửa tất cả các Javadocs trong tất cả các dự án này dường như không khả thi trong kịch bản của tôi.

Đây là một phần nhỏ của đầu ra mà tôi thấy khi tôi thực hiện mvn clean package installtrong dự án của mình:

[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 được cấu hình như thế này trong POM của tôi:

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

Như tôi đã nói trước đây, mọi thứ đều hoạt động tốt nếu tôi quay lại Java 7. Có lẽ đây là một lỗi liên quan đến Maven đang chạy trong Java 8? Làm cách nào tôi có thể làm cho nó hoạt động (nghĩa là có thể xây dựng Javadoc của dự án và cài đặt mã của nó trong kho lưu trữ cục bộ của tôi) với Java 8? Tôi đã thử nghiệm với cả Maven 3.0.3 và 3.0.5 trong OSX.

CẬP NHẬT:

Nếu tôi thay đổi cấu hình plugin Javadoc bằng <failOnError>false</failOnError>(cảm ơn 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>

Sau đó, dự án được cài đặt trong kho lưu trữ cục bộ của tôi. Tuy nhiên, JAR Javadoc vẫn chưa được tạo.

Một phần của đầu ra mà tôi thấy trong bảng điều khiển có cấu hình mới này là:

[ERROR] MavenReportException: Lỗi khi tạo tệp lưu trữ: Mã thoát: 1 - /Users/....java:18: cảnh báo: no @param ... Dòng lệnh là: / Library / Java / Home / bin / javadoc @options @ gói

Tham khảo các tệp Javadoc được tạo trong thư mục '/ Users / sergioc / Documents / workspaces / heal / minitoolbox / target / apidocs'.

tại org.apache.maven.plugin.javadoc.AbaugeJavadocMojo.executeJavadocCommandLine (Tóm tắtJavadocMojo.java:5043) tại org.apache.maven.plugin.javadoc. .javadoc.JavadocJar.execute (JavadocJar.java:181) tại org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java: 110. : 209) tại org.apache.maven.lifecycle.iternal.MojoExecutor.execute (MojoExecutor.java:153) tại org.apache.maven.lifecycle.i INTERNal.MojoExecutor.execute (MojoExecutor.java. maven.lifecycle.iternal.LifecyclModuleBuilder.buildProject (LifecyclModuleBuilder.java:84) tại org.apache.maven.lifecycle.i INTERNal.LifecyclModuleBuilder.buildProject (LifecyclModuleBuilder.java:59) tại org.apache.maven.lifecycl.i INTERNal.LifecyclStarter.singleThreadedBuild (LifecyclStarter.java:183) tại org.apache.maven.lifecycl.i INTERNal tại org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:320) tại org.apache.maven.DefaultMaven.execute (DefaultMaven.java:156) tại org.apache.maven.cli.MavenCli.execute (MavenCli.execute : 537) tại org.apache.maven.cli.MavenCli.doMain (MavenCli.java:196) tại org.apache.maven.cli.MavenCli.main (MavenCli.java:141) tại sun.reflect.NativeMethodAcoror Phương thức gốc) tại sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) tại sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:gọi (Phương thức.java: 491) tại org.codehaus.plexus. classworlds.launcher.Launcher.launchEnhified (Launcher.java:290) tại org.codehaus.plexus. classworlds.launcher.Launcher.launch (Launcher.java tại org.codehaus.plexus. classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:409) tại org.codehaus.plexus. classworlds.launcher.Launcher.main (Launcher.java:352)

Bất kỳ cách giải quyết nào về cách xây dựng các nguồn, cài đặt dự án và tạo JAR Javadoc trong một bước khi nó hoạt động với Java 7?


Xin chào @ 75inchpianist, tôi đã cập nhật câu hỏi, thực tế chúng là lỗi (mặc dù đáng ngạc nhiên là dòng cuối cùng của lỗi đề cập đến một cảnh báo, như bạn có thể thấy trong đầu ra được tạo). Dự án không được cài đặt trong kho lưu trữ cục bộ của tôi, vì vậy nó không được coi là một cảnh báo đơn giản :(
Sergio

Đối với GoogleJuice: Tôi đã gặp lỗi "lỗi: sử dụng sai '>'" vì tôi có một mũi tên lớn trong nhận xét JavaDoc
Drew Stephens

1
Có lẽ nó sẽ hữu ích cho ai đó: Bạn có thể dễ dàng tìm thấy tất cả các thẻ chưa hoàn chỉnh này trong IntelliJ bằng cách chạy kiểm tra Ctrl + Alt + Shift + i "Tuyên bố có vấn đề về JavaDoc"
Sergey Ponomarev

1
Đây không phải là maven, đây là chương trình javadoc có phần chặt chẽ hơn trong Java 8.
Thorbjørn Ravn Andersen

Câu trả lời:


388

Giải pháp tốt nhất sẽ là sửa các lỗi javadoc. Nếu vì một lý do nào đó không thể (ví dụ: mã nguồn được tạo tự động) thì bạn có thể vô hiệu hóa kiểm tra này.

DocLint là một tính năng mới trong Java 8 , được tóm tắt là:

Cung cấp một phương tiện để phát hiện lỗi trong các nhận xét Javadoc sớm trong chu kỳ phát triển và theo cách dễ dàng liên kết trở lại mã nguồn.

Điều này được bật theo mặc định và sẽ chạy rất nhiều kiểm tra trước khi tạo Javadocs. Bạn cần tắt cái này cho Java 8 như được chỉ định trong luồng này . Bạn sẽ phải thêm phần này vào cấu hình maven của bạn:

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

Đối với maven-javadoc-plugin 3.0.0+: Thay thế

<additionalparam>-Xdoclint:none</additionalparam>

với

<doclint>none</doclint>

18
Có cách nào để làm cho điều này hoạt động với JDK 8 cũng như JDK 7 không? Nó thất bại trên JDK 7 vì nó javadockhông biết tùy chọn này.
Feuermurmel

8
Trong khi câu trả lời này được hỏi ở đây, tôi muốn khuyên khách truy cập trong tương lai nên kiểm tra câu trả lời của peterh trước: stackoverflow.com/a 432809831/1180785 (hầu hết mọi người nhấn vào vấn đề này sẽ chỉ có một số nơi để khắc phục, vì vậy tốt hơn để sửa chúng hơn là vô hiệu hóa séc!)
Dave

8
Đối với maven-javadoc-plugin, hãy sử dụng <doclint>none</doclint>. Xem maven.apache.org/plugins/maven-javadoc-plugin/ trên
coolersport

11
Cũng kể từ khi maven-javadoc-plugin 3.0.0, <additionalparam/>được thay thế bằng <additionalOptions/>. Xem các vấn đề.apache.org/jira/browse/MJAVADOC
fdelsert

1
Đúng rồi. Tôi muốn thông báo rằng trong quá trình di chuyển từ maven 2 sang maven 3, đừng quên rằng không nên đưa thẻ plugin này vào thẻ báo cáo mà trực tiếp đến pluginQuản lý (pom.xml)
dimeros 15/11/18

97

Cách tiếp cận dễ nhất để mọi thứ hoạt động với cả java 8 và java 7 là sử dụng một hồ sơ trong bản dựng:

<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
Giải pháp tốt nhất có lẽ là kết hợp giữa giải pháp của bạn và một Zapp được cung cấp dưới đây. Nếu bạn để nó theo cách này, lệnh mvn site: site vẫn sẽ bị sập. Bạn nên tạo một hồ sơ được kích hoạt bởi 1,8 jdk đặt thuộc tính toàn cầu.
Max Nad

64

Dưới đây là cách ngắn gọn nhất mà tôi biết để bỏ qua các cảnh báo doclint bất kể phiên bản java được sử dụng. Không cần phải sao chép cấu hình plugin trong nhiều cấu hình với sửa đổi nhỏ.

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

Đã thử nghiệm trên oracle / open jdk 6, 7, 8 và 11.


1
Và nơi đó nên được đặt cụ thể?
rõ ràng

1
@clearlight, cả hai buildprofileslà các khối cấp cao nhất trong maven pom.xml. maven.apache.org/pom.html#Build .
Oliver Gondža

Cảm ơn. Cuối cùng tôi đã phát hiện ra điều đó, nhưng thật tốt khi có liên quan đến câu trả lời này.
rõ ràng

38

Thêm vào phần thuộc tính toàn cầu trong tệp pom:

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

Giải pháp chung được cung cấp ở đây trong các câu trả lời khác (thêm thuộc tính đó trong phần bổ trợ) không hoạt động vì một số lý do. Chỉ bằng cách đặt nó trên toàn cầu, tôi mới có thể xây dựng jar javadoc thành công.


1
đây là giải pháp duy nhất hiệu quả với tôi Tôi cũng đọc câu trả lời ở đây: blog.joda.org/2014/02/turn-off-doclint-in-jdk-8-javadoc.html
acvcu

37

Giải pháp ngắn nhất sẽ hoạt động với mọi phiên bản Java:

<profiles>
    <profile>
        <id>disable-java8-doclint</id>
        <activation>
            <jdk>[1.8,)</jdk>
        </activation>
        <properties>
            <additionalparam>-Xdoclint:none</additionalparam>
        </properties>
    </profile>
</profiles>

Chỉ cần thêm nó vào POM của bạn và bạn sẽ ổn.

Về cơ bản, đây là câu trả lời của @ ankon cộng với câu trả lời của @ zapp .


Đối với người dùng maven-javadoc-plugin 3.0.0:

Thay thế

<additionalparam>-Xdoclint:none</additionalparam>

bởi

<doclint>none</doclint>


Đó là giải pháp tốt nhất cho tôi. Nó hoạt động cho bot java 7 và java 8. Nhưng cách nó hoạt động là một loại phép thuật :. Làm thế nào để tham số "
thêmParam

1
@pdem Tham số bổ sung được thêm vào Maven, không phải cho plugin Javadoc. Giải pháp này hoạt động cho dù bạn rõ ràng có sử dụng plugin hay không.
Fred Porciúncula

2
Kể từ maven-javadoc-plugin 3.0.0, bạn phải thêm <additionalJOption>-Xdoclint:none</additionalJOption>hoặc <doclint>none</doclint>sở hữu vào<properties>
Sergi

Có, Thêm hồ sơ liên quan đến JDK 8 và cài đặt <doclint> none </ doclint> giải quyết vấn đề. Nó tạo jar javadoc giống như nó đã tạo trong JDK 7. Cảm ơn.
Saurabhcdt

1
Bạn có thể làm rõ: với maven-javadoc-plugin 3.0.0 trở lên, nếu tôi chỉ định đơn giản <doclint>none</doclint>(không kích hoạt dựa trên phiên bản JDK), thì nó vẫn thất bại trên JDK dưới 1.8, hoặc maven-javadoc-plugin có tự động phát hiện hay không các doclinttùy chọn được hỗ trợ bởi phiên bản hiện tại của Java?
Garret Wilson

31

Tôi không nghĩ chỉ cần tắt DocLint là một giải pháp tốt, ít nhất là không lâu dài. Thật tốt khi Javadoc đã trở nên nghiêm ngặt hơn một chút vì vậy cách đúng đắn để khắc phục vấn đề xây dựng là khắc phục vấn đề tiềm ẩn . Có, cuối cùng bạn sẽ cần sửa các tệp mã nguồn đó.

Dưới đây là những điều cần chú ý mà trước đây bạn có thể thoát khỏi:

  • HTML không đúng định dạng (ví dụ: thẻ kết thúc bị thiếu, dấu ngoặc không thoát, v.v.)
  • {@link }S không hợp lệ (tương tự với các thẻ tương tự như @see)
  • Các @authorgiá trị không hợp lệ . Điều này đã từng được chấp nhận: @author John <john.doe@mine.com>nhưng không còn như vậy nữa vì các dấu ngoặc không thoát.
  • Các bảng HTML trong Javadoc hiện yêu cầu tóm tắt hoặc chú thích. Xem câu hỏi này để giải thích.

Bạn chỉ cần sửa các tệp mã nguồn của mình và tiếp tục xây dựng Javadoc cho đến khi nó có thể xây dựng mà không gặp sự cố. Cồng kềnh có, nhưng cá nhân tôi thích khi tôi đã đưa các dự án của mình lên cấp độ DocLint bởi vì điều đó có nghĩa là tôi có thể tin tưởng hơn rằng Javadoc tôi sản xuất thực sự là những gì tôi dự định.

Tất nhiên có vấn đề nếu bạn đang tạo Javadoc trên một số mã nguồn mà bạn không tự sản xuất, ví dụ như vì nó đến từ một số trình tạo mã, ví dụ như wsimport . Điều kỳ lạ là Oracle đã không chuẩn bị các công cụ của riêng họ để tuân thủ JDK8 trước khi thực sự phát hành JDK8. Có vẻ như nó sẽ không được sửa cho đến Java 9 . Chỉ trong trường hợp cụ thể này, tôi đề nghị tắt DocLint như tài liệu ở nơi khác trên trang này.


1
Hoàn toàn đồng ý ở đây, như đã nói, đối với mã được tạo, bạn có thể chỉ cần yêu cầu plugin không xử lý mã trong một gói nhất định bằng cách thêm phần ElimPackageNames trong phần cấu hình của plugin javadoc. xem maven.apache.org/plugins/maven-javadoc-plugin/examples/ khăn
Newtopian

@ Newtopian. Điểm tốt. Tuy nhiên, trong trường hợp của tôi, tôi thực sự cần mã được tạo wsimportđể trở thành một phần của Javadoc.
peterh

Điều đó nói dễ hơn nhiều so với thực hiện vì rất nhiều người trong chúng ta gặp phải những vấn đề này đang cố gắng xây dựng mã nguồn mở lạ lẫm có phụ thuộc Maven ở đâu đó và chúng tôi không biết nó hoạt động như thế nào, vì vậy không có cách nào dễ dàng để giải quyết các nguyên nhân cơ bản. Có quá nhiều cận thị về bối cảnh. Mọi người cần khái quát hóa phạm vi của các câu trả lời nhiều hơn và cung cấp chi tiết cụ thể hơn về cách thực hiện các bản sửa lỗi.
rõ ràng

30

Chỉ ghi đè maven-javadoc-plugincấu hình, không khắc phục sự cố với mvn site(được sử dụng, ví dụ trong giai đoạn phát hành). Đây là những gì tôi phải làm:

<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
Đây là một điểm quan trọng vì việc thiếu cài đặt này trong kích hoạt plugin trang web sẽ gây ra việc phát hành: thực hiện thất bại trong khi phát hành: chuẩn bị đã hoạt động tốt. Nó có thể là một vấn đề rất khó chịu để tìm và sửa chữa.
Peter N. Steinmetz

Lưu ý rằng cấu hình của maven-javadoc-pluginqua các <reportPlugins>phần của maven-site-pluginkhông được khuyến khích cho các phiên bản gần đây của Maven 3.
Martin Holler

@ MartinHöller Vậy làm thế nào để giải quyết lỗi khi phát hành: thực hiện giai đoạn liên quan đến mavene-javadoc-plugin: 3.0.1 theo cách thích hợp?
Vitalii Diravka

@VitaliiDiravka Phụ thuộc vào các lỗi ... Vui lòng đặt câu hỏi riêng cho việc này.
Martin Höller

22

Bạn có thể thử đặt thuộc failOnErrortính (xem tài liệu plugin ) thành 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>

Như bạn có thể thấy từ các tài liệu, giá trị mặc định là true.


Cảm ơn ý tưởng @Martin. Với thuộc tính đó ít nhất tôi có thể xây dựng và cài đặt lại dự án, tuy nhiên tôi vẫn thiếu java jar jar (tôi cần nó để triển khai vào trung tâm Maven). Tôi đã cập nhật câu hỏi của tôi với các chi tiết của thí nghiệm.
Sergio

Đây là câu trả lời đầy đủ nhất cho tôi. Tôi chỉ muốn thử nghiệm xây dựng trong quá trình phát triển liên tục khi javadocs vẫn chưa hoàn thành.
ZachSand

17

Vì nó phụ thuộc vào phiên bản JRE của bạn, được sử dụng để chạy lệnh maven mà bạn có thể không muốn tắt DocLinttheo mặc định trong pom.xml của mình

Do đó, từ dòng lệnh bạn có thể sử dụng chuyển đổi -Dadditionalparam=-Xdoclint:none.

Thí dụ: mvn clean install -Dadditionalparam=-Xdoclint:none


3
Điều này đặc biệt hữu ích vì bạn cũng có thể sử dụng nó Jenkins. Đặt 'Global MAVEN_OPTS' (trong 'Cấu hình hệ thống') -Dadditionalparam=-Xdoclint:nonevà tất cả các bản dựng của bạn sẽ hoạt động với Java 8.
Wilfred Hughes

mvn org.apache.maven.plugins:maven-javadoc-plugin:3.1.0:jar -DadditionalJOption=-Xdoclint:none- nó làm việc cho tôi
Roman Khomyshynets

10

Tên thuộc tính cấu hình đã được thay đổi trong phiên bản mới nhất của maven-javadoc-plugin là 3.0.0.

Do đó <Extraparam> sẽ không hoạt động. Vì vậy, chúng tôi phải sửa đổi nó như dưới đây.

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

Xem doclinttài liệu tại đây: maven.apache.org/plugins/maven-javadoc-plugin/ mẹo
Peter W

Đã giải quyết nó cho tôi xây dựng OpenGrok từ nguồn github vào tháng 2 năm 19. Nên đề cập đến bản vá của bạn đi vào pom.xmlthư mục src / build của dự án. Trong trường hợp của tôi, tất cả những gì tôi phải làm là tìm kiếm maven-javadoc-pluginvà sau đó đi đến <configuration></configuration>khối đã có mặt và thêm <doclint>none</doclint>. Dễ dàng như tất cả những điều này từng có một người biết, bối cảnh ở đây là tôi đang cố gắng sửa một lỗi khác trong OpenGrok và chưa bao giờ sử dụng Maven trước đây và không muốn phải tái phạm vào một dự án phụ khác chỉ để tìm ra ra làm thế nào để áp dụng sửa chữa nhanh chóng.
rõ ràng

4

Tôi muốn thêm một số cái nhìn sâu sắc vào câu trả lời khác

Trong trường hợp của tôi

-Xdoclint: không có

Không hoạt động.

Hãy bắt đầu với điều đó, trong dự án của tôi, tôi thực sự không cần javadoc. Chỉ một số plugin cần thiết có thời gian xây dựng phụ thuộc vào nó.

Vì vậy, cách đơn giản nhất để giải quyết vấn đề của tôi là:

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

4

Tính đến maven-javadoc-Plugin 3.0.0 bạn nên đã được sử dụng additionalJOption để thiết lập một tùy chọn Javadoc bổ sung, vì vậy nếu bạn muốn Javadoc để vô hiệu hóa doclint, bạn nên thêm các tài sản sau đây.

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

Bạn cũng nên đề cập đến phiên bản của maven-javadoc-plugin là 3.0.0 trở lên.

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

3

Vì vậy, hãy tiết kiệm cho mình một vài giờ mà tôi đã không làm và thử điều này nếu nó dường như không hoạt động:

 <additionalJOption>-Xdoclint:none</additionalJOption>

Thẻ được thay đổi cho các phiên bản mới hơn.



Đôi khi -Xdoclintchính nó là không đủ, nhưng cần thêm các đối số. Các phiên bản mới hơn maven-javadoc-plugincung cấp additionalJOptionscho điều đó, cũ hơn không. Một cách giải quyết là: <additionalJOption>"-Xdoclint:none" "--allow-script-in-comments"</additionalJOption>Báo giá rất quan trọng, nếu không thì plugin thêm chúng và chỉ giả sử một đối số thay vì hai, dẫn đến wrong argslỗi.
Thorsten Schöning

Cái trước chỉ hoạt động trên Windows, trên Linux: javadoc: error - Illegal package name: ""-Xdoclint:none" "--allow-script-in-comments""Các trích dẫn bên ngoài được thêm vào bởi câu lệnh ghi nhật ký và không có trên vỏ. Tôi đoán vấn đề là trên Windows javadocđược thực thi bởi cmd.exe, nó phân tích một chuỗi lớn dưới dạng dòng lệnh và phân tách additionalJOptionnhư dự định. Trên Linux, các đối số được truyền trực tiếp đến quá trình và additionalJOptionđược truyền dưới dạng một đối số, dẫn đến lỗi.
Thorsten Schöning

Theo Process Monitor, cmd.exekhông được sử dụng. Java rất có thể chỉ đơn giản là xây dựng một dòng lệnh lớn và chuyển nó tới CreateProcess, để nó được phân tích cú pháp bởi Windows như dự định: Chia tách lập luận tại các khoảng trắng trong khi tôn trọng các trích dẫn.
Thorsten Schöning

3

Đã thêm bên dưới

JAVA_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:none

Vào công việc của Jenkins:

Cấu hình> Môi trường xây dựng> Tiêm các biến môi trường vào quá trình xây dựng> Thuộc tính Nội dung

Đã giải quyết vấn đề xây dựng mã của tôi thông qua Jenkins Maven :-)


Điều này hoạt động với maven-javadoc-plugin 2.4 nhưng bắt đầu từ 2.5 (và đến hết 3.0.0), điều này gây ra lỗi: "Mã thoát: 1 - javadoc: error - cờ không hợp lệ: -Xdoclint: none". Vì vậy, giải pháp là giòn.
Akom

1
Khi sử dụng điều này với mvn release:performcú pháp cần phải được mvn release:perform -Darguments="-Dmaven.javadoc.skip=true".
PatS

2

Tôi không chắc điều này có giúp ích gì không, nhưng ngay cả tôi cũng gặp phải vấn đề tương tự chính xác gần đây với phiên bản oozie-4.2.0 . Sau khi đọc qua các câu trả lời ở trên, tôi vừa thêm tùy chọn maven thông qua dòng lệnh và nó hoạt động với tôi. Vì vậy, chỉ cần chia sẻ ở đây.

Tôi đang sử dụng java 1.8.0_77 , chưa thử với java 1.7

bin / mkdistro.sh -DskipTests -Dmaven.javadoc.opts = '- Xdoclint: -html'


1

Để bỏ qua thiếu @param@returnthẻ, nó đủ để vô hiệu hóa missing nhóm doclint . Theo cách này, javadoc vẫn sẽ được kiểm tra các vấn đề cú pháp và cấp độ cao hơn:

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

Lưu ý rằng đây là phiên bản plugin 3.0 hoặc mới hơn.


0

Tôi đến bữa tiệc hơi muộn, nhưng tôi cũng bị buộc phải tìm kiếm cách giải quyết, kết thúc ở đây, và sau đó tìm thấy nó.

Đây là những gì làm việc cho tôi: -

export JAVA_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:none

Và sau đó bắt đầu xây dựng Maven của bạn, bất kỳ bản phân phối Linux xây dựng, vv Đẹp điều về nó mà nó không đòi hỏi Maven cấu hình files sẽ chỉnh sửa - Tôi không thể làm điều đó như mục tiêu của tôi là để xây dựng lại một loạt các Centos gói rpm, vì vậy phải đi thật sâu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.