Javadoc 태그가 완전하지 않은 경우 Maven은 Java 8에서 작동하지 않습니다.
Maven을 사용했기 때문에 불완전한 Javadoc 태그(파라미터 누락 등)를 가진 로컬 저장소 프로젝트를 빌드하고 설치할 수 있었습니다.
그러나 Java 8 (1.8.0-ea-b90)로 이행했기 때문에 Maven은 문서 태그 누락에 대해 엄격하고 Javadoc이 완벽하지 않은 프로젝트를 빌드 또는 설치하려고 할 때 Javadoc 문제와 관련된 Javadoc 오류를 많이 보여줍니다.로컬 저장소에 컴파일하여 설치하려는 프로젝트 중 일부는 내가 제어할 수 없는 서드파티 프로젝트입니다.따라서 이 모든 프로젝트에서 모든 Javadocs를 수정하는 것은 제 시나리오에서는 실현 가능성이 없는 것 같습니다.
은, 실행시에 입니다.mvn clean package install
★★★★★★★★★★★★★★★★★★★:
[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] ^
Javadoc Maven 플러그인은 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>
아까도 말씀드렸듯이 자바7로 돌아가면 모든 것이 정상적으로 동작하고 있습니다.Java 8에서 실행되는 Maven과 관련된 버그일까요?Java 8을 사용하여 프로젝트의 Javadoc을 구축하고 로컬 저장소에 코드를 설치할 수 있도록 하려면 어떻게 해야 합니까?Maven 3.0.3과 3.0.5를 모두 OSX에서 테스트했습니다.
갱신:
을 「」로 .<failOnError>false</failOnError>
(이렇게 하다):
<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>
그러면 로컬 저장소에 프로젝트가 설치됩니다.그러나 Javadoc JAR은 아직 생성되지 않았습니다.
이 새로운 설정의 콘솔에 표시되는 출력의 일부를 다음에 나타냅니다.
[ERROR] MavenReportException:아카이브 작성 중 오류 발생: 종료 코드:1 - /Users/....java:18: 경고: no @param...명령줄: /Library/Java/Home/bin/javadoc @options @packages
'/Users/sergioc/Documents/workspaces/heal/minitoolbox/target/apidocs' dir에서 생성된 Javadoc 파일을 참조하십시오.
org.maven.maven에 있습니다.plugin.adoc.org.apache.maven에서 AbstractJavadocMojo.executeJavadocCommandLine(AbstractJavadocMojo.java:5043)을 참조하십시오.plugin.adoc.org.apache.maven의 AbstractJavadocMojo.executeReport(AbstractJavadocMojo.java:1990).plugin.adoc.org.apache.maven에서 JavadocJar.execute(JavadocJar.java:181)를 실행합니다.plugin.DefaultBuildPluginManager.org.apache.maven.라이프 사이클에서 executeMojo(DefaultBuildPluginManager.java:101)를 실행합니다.내부의.Mojo Executor.org.apache.maven.라이프 사이클에서 실행(MojoExecutor.java:209)합니다.내부의.Mojo Executor.org.apache.maven.라이프 사이클에서 실행(MojoExecutor.java:153)합니다.내부의.Mojo Executor.org.apache.maven.라이프 사이클에서 실행(MojoExecutor.java:145)합니다.내부의.Lifecycle Module Builder.org.apache.maven.life cycle에서 buildProject(LifecycleModuleBuilder.java:84)를 선택합니다.내부의.Lifecycle Module Builder.org.apache.maven.lifecycle에서 buildProject(LifecycleModuleBuilder.java:59)를 선택합니다.내부의.Lifecycle Starter.싱글org.apache.maven.라이프 사이클의 스레드 빌드(Life cycle Starter.java:183)내부의.라이프 사이클 스타터org.apache.maven에서 execute(Life cycle Starter.java:161)를 실행합니다.org.apache.maven의 DefaultMaven.doExecute(DefaultMaven.java:320).org.apache.maven.cli의 DefaultMaven.execute(DefaultMaven.java:156)입니다.org.apache.maven.cli에서 MavenCli.execute(MavenCli.java:537).org.apache.maven.cli에 있는 MavenCli.doMain(MavenCli.java:196)입니다.MavenCli.main(MavenCli.java:141)을 sun.reflect로 지정합니다.Native Method Accessor Impl.sun.reflect에서 0(네이티브 메서드)을 호출합니다.Native Method Accessor Impl.sun.reflect에서 (NativeMethodAccessorImpl.java:57)를 호출합니다.Method Accessor Impl을 위임하고 있습니다.java.lang.reflect에서 (DelegatingMethodAccessorImpl.java:43)를 호출합니다.method.invoke(Method.java:491) at org.codehouse.plexus.classworlds.launcher.org.codehouse.plexus.classworlds.launch Enhanced(Launcher.java:290).org.codehouse.plexus.classworlds.launcher(Launcher.java:230).org.codehouse.plexus.classworlds.launcher에 있는 Launcher.mainWithExitCode(Launcher.java:409)입니다.Launcher.main(Launcher.java:352)
Java 7에서 작업할 때 소스 빌드, 프로젝트 설치 및 Javadoc JAR 생성 방법에 대한 해결 방법이 있습니까?
가장 좋은 해결책은 javadoc 오류를 수정하는 것입니다.어떤 이유로 그것이 불가능한 경우(즉, 자동 생성된 소스 코드) 이 체크를 비활성화할 수 있습니다.
DocLint는 Java 8의 새로운 기능으로 요약하면 다음과 같습니다.
개발 주기 초기에 소스 코드에 쉽게 링크되는 방식으로 Javadoc 코멘트의 오류를 탐지할 수 있는 수단을 제공합니다.
기본적으로 활성화되어 있으며 Javadocs를 생성하기 전에 많은 검사가 실행됩니다.이 스레드에 지정된 대로 Java 8에서 이 기능을 해제해야 합니다.maven 설정에 다음 사항을 추가해야 합니다.
<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>
maven-javadoc-plugin 3.0.0+의 경우: 치환
<additionalparam>-Xdoclint:none</additionalparam>
와 함께
<doclint>none</doclint>
Java 8과 Java 7을 모두 사용하기 위한 가장 쉬운 방법은 빌드에서 프로파일을 사용하는 것입니다.
<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>
다음은 사용된 Java 버전에 관계없이 doclint 경고를 무시하는 가장 간결한 방법입니다.약간의 변경을 가하여 여러 프로파일로 플러그인 구성을 복제할 필요가 없습니다.
<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>
oracle/open jdk 6, 7, 8, 및 11에서 테스트 완료.
Java 버전에서 작동하는 가장 짧은 솔루션:
<profiles>
<profile>
<id>disable-java8-doclint</id>
<activation>
<jdk>[1.8,)</jdk>
</activation>
<properties>
<additionalparam>-Xdoclint:none</additionalparam>
</properties>
</profile>
</profiles>
POM에 추가만 하면 됩니다.
이것은 기본적으로 @ankon의 답변과 @zapp의 답변입니다.
maven-javadoc-plugin 3.0.0 사용자의 경우:
교체하다
<additionalparam>-Xdoclint:none</additionalparam>
타고
<doclint>none</doclint>
pom 파일의 글로벌 속성 섹션에 추가합니다.
<project>
...
<properties>
<additionalparam>-Xdoclint:none</additionalparam>
</properties>
다른 답변(플러그인 섹션에 해당 속성 추가)에 나와 있는 일반적인 솔루션은 어떤 이유로 작동하지 않았습니다.javadoc jar를 글로벌하게 설정해야만 성공적으로 빌드할 수 있습니다.
DocLint를 끄는 것은 적어도 장기적으로는 좋은 해결책이 아니라고 생각합니다.Javadoc이 좀 더 엄격해진 것은 좋은 일이기 때문에 빌드 문제를 해결하는 올바른 방법은 근본적인 문제를 해결하는 것입니다.네, 최종적으로 소스코드 파일을 수정해야 합니다.
다음은 이전에 피할 수 있었던 사항입니다.
- 잘못된 형식의 HTML(엔드 태그가 없거나 이스케이프가 없는 괄호 등)
- 하지 않은 ★★★
{@link }
(s.와 입니다.@see
) - 하지 않은 ★★★
@author
옛날에는 이런이 통용되었습니다.@author John <john.doe@mine.com>
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 츠키노 - 이제 Javadoc의 HTML 테이블에는 요약 또는 캡션이 필요합니다.자세한 것은, 이 질문을 참조해 주세요.
소스코드 파일을 수정하고 Javadoc이 오류 없이 빌드될 때까지 계속 빌드하기만 하면 됩니다.번거롭긴 하지만 개인적으로 프로젝트를 DocLint 수준으로 끌어올린 것이 마음에 듭니다.그것은 제가 만든 Javadoc이 실제로 의도한 것이라는 확신을 가질 수 있다는 것을 의미하기 때문입니다.
물론 직접 생성하지 않은 소스 코드에서 Javadoc을 생성하는 경우에는 문제가 있습니다. 예를 들어, 코드 생성기(wsimport 등)에서 생성되었기 때문입니다.Oracle이 JDK8을 실제로 출시하기 전에 JDK8 컴플라이언스를 위한 자체 툴을 준비하지 않은 것은 이상합니다.자바9까지는 수정이 안 될 것 같아요.이 경우에만 이 페이지의 다른 곳에서 설명한 바와 같이 DocLint를 해제할 것을 권장합니다.
「」의 덮어쓰기maven-javadoc-plugin
「」, 「」의 되지 않습니다.mvn site
(일본어판/영어:을 사용하다
<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>
도 한번 .failOnError
속성(플러그인 매뉴얼 참조)에 대해서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>
에서 알 수 있듯이 은 '비밀번호'입니다.true
.
maven을 디세블로 하지 .DocLint
.xml의 합니다.
할 수 .-Dadditionalparam=-Xdoclint:none
.
::mvn clean install -Dadditionalparam=-Xdoclint:none
최신 버전의 maven-javadoc-plugin 3.0.0에서 구성 속성 이름이 변경되었습니다.
따라서 <additionalparam>은 동작하지 않습니다.그래서 아래와 같이 수정해야 합니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<doclint>none</doclint>
</configuration>
</plugin>
다른 답변에 대한 통찰력을 추가하고 싶습니다.
저 같은 경우에는
- Xdoclint: 없음
효과가 없었다.
우선 제 프로젝트에서는 javadoc이 전혀 필요하지 않았습니다.필요한 일부 플러그인만 빌드 시간에 의존했습니다.
문제를 해결하는 가장 간단한 방법은 다음과 같습니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
maven-javadoc-plugin 3.0.0 현재 추가 기능을 사용하고 있어야 합니다.추가 Javadoc 옵션을 설정하는 JOption. 따라서 Javadoc에서 doclint를 사용하지 않도록 설정하려면 다음 속성을 추가해야 합니다.
<properties>
...
<additionalJOption>-Xdoclint:none</additionalJOption>
...
<properties>
maven-javadoc-plugin 버전도 3.0.0 이상으로 지정해야 합니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
</plugin>
그러니까, 내가 하지 않은 시간을 절약하고, 효과가 없는 것 같으면, 이것을 시험해 보세요.
<additionalJOption>-Xdoclint:none</additionalJOption>
태그는 새로운 버전의 경우 변경됩니다.
아래에 추가됨
JAVA_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:none
Jenkins의 일:
[ Configuration ]> [ Build Environment ]> [ Inject ]환경변수 빌드 프로세스에 삽입]> [ Properties Content ]
Jenkins Maven을 통해 코드 작성 문제를 해결:-)
이것이 도움이 될지는 모르겠지만, 저도 얼마 전에 ozie-4.2.0 버전에서 똑같은 문제에 직면했습니다.위의 답변을 읽고 명령줄을 통해 maven 옵션을 추가했는데 효과가 있었습니다.그래서, 그냥 여기서 공유해요.
java 1.8.0_77을 사용하고 있는데 java 1.7을 사용해 본 적이 없습니다.
bin/mkdistro.sh - DskipTests - Dmaven . javadoc . opts = ' - Xdoclint : - html '
누락된 것을 무시하려면@param
그리고.@return
태그, 이 태그로 인해missing
도클린트 그룹이렇게 하면 javadoc에 더 높은 수준과 구문 문제가 있는지 계속 확인할 수 있습니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<doclint>all,-missing</doclint>
</configuration>
</plugin>
이는 플러그인 버전 3.0 이상용입니다.
파티에 조금 늦었지만, 어쩔 수 없이 해결 방법을 찾다가 결국 여기에 와 버렸어요.
저는 다음과 같이 대응합니다.
export JAVA_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:none
다음으로 Maven 빌드, Linux 디스트리뷰션 빌드 등을 시작합니다.Maven 설정 파일을 변경할 필요가 없는 것은 좋은 점입니다.목표는 Centos rpm 패키지를 여러 개 재구축하는 것이었기 때문에 그렇게 할 수 없었습니다.그래서 매우 상세하게 조사해야 했습니다.
제 경우 부모 폼을 사용하고 있었습니다(시간을 다투어 실행했기 때문에 실제 원인인지 확실하지 않습니다), maven 2.x 및 java 1.6이 사용되었습니다.상기의 솔루션은 어떤 이유로 동작하지 않기 때문에, 다음의 프로파일을 추가하고, 실행하도록 관리했습니다.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>myapp</artifactId>
<packaging>war</packaging>
<name>myapp</name>
<version>0.0.1-SNAPSHOT</version>
<description>My App</description>
<parent>
<groupId>com.mycompany</groupId>
<artifactId>parent-artifact</artifactId>
<version>0.0.1</version>
</parent>
<profiles>
<profile>
<id>doclint-java6-disable</id>
<activation>
<jdk>[1.6,)</jdk>
</activation>
<properties>
<additionalparam>--allow-script-in-comments</additionalparam>
</properties>
</profile>
</profiles>
</project>
언급URL : https://stackoverflow.com/questions/15886209/maven-is-not-working-in-java-8-when-javadoc-tags-are-incomplete
'programing' 카테고리의 다른 글
Vue 인스턴스 메서드 내에 확산된 mapMutations에서 "this"를 사용할 수 있습니까? (0) | 2022.08.23 |
---|---|
루프 또는 조건 없이 1~1000 인쇄 (0) | 2022.08.23 |
C의 3진수(조건부) 연산자 (0) | 2022.08.23 |
Java: 하나의 파일에 여러 클래스 선언 (0) | 2022.08.23 |
scanf()를 사용하여 문자열 크기를 초과하면 안 됩니다. (0) | 2022.08.23 |