如何在 maven-javadoc-plugin 中正确设置类路径?
how to set classpath properly in maven-javadoc-plugin?
我有一个自定义的 java doclet,它会在某些 classes:
上调用 newInstance()
clazz.newInstance()
当我在 Eclipse 中 运行 它作为 Junit 时,它运行良好。
但是当我在 maven 中 运行 它时,它抛出一个异常:NoClassDefFoundError
我检查过 class,它不在我当前的项目中,它在 maven 依赖项(第三方 jar)中。
我知道我可以在 maven-javadoc-plugin 中设置 classpath。但是我的项目有 50 多个第三方 jar。如何轻松设置这些罐子?
这是我在 maven pom 中的代码:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0-M1</version>
<configuration>
<doclet>my.company.common.doclet.MyDoclet</doclet>
<docletPath>${project.build.directory}/../../shared-java/target/classes;${project.build.directory}/classes</docletPath>
<sourcePath>${project.build.directory}/../../shared-java/src/java;${project.build.directory}/../src/java</sourcePath>
<encoding>UTF-8</encoding>
<show>public</show>
<subpackages>my.company.api</subpackages>
<useStandardDocletOptions>false</useStandardDocletOptions>
<docletArtifacts>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</docletArtifacts>
</configuration>
<executions>
<execution>
<id>attach-javadoc</id>
<phase>post-integration-test</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
谢谢!
我发现 maven-javadoc-plugin 确实将整个类路径传递到我的 doclet。
但是 doclet ClassLoader.getSystemClassLoader() 没有使用那个类路径。
所以我必须手动将这些类路径添加到当前的类加载器中。
在 Eclipse 中,它会自动设置那些类路径。
如果在 <additionalDependencies>
的帮助下添加它们会怎么样?
<configuration>
...
<additionalDependencies>
<additionalDependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</additionalDependency>
</additionalDependencies>
...
</configuration>
参见:https://maven.apache.org/plugins/maven-javadoc-plugin/examples/additional-dependencies.html
我有一个自定义的 java doclet,它会在某些 classes:
上调用 newInstance()clazz.newInstance()
当我在 Eclipse 中 运行 它作为 Junit 时,它运行良好。
但是当我在 maven 中 运行 它时,它抛出一个异常:NoClassDefFoundError
我检查过 class,它不在我当前的项目中,它在 maven 依赖项(第三方 jar)中。
我知道我可以在 maven-javadoc-plugin 中设置 classpath。但是我的项目有 50 多个第三方 jar。如何轻松设置这些罐子?
这是我在 maven pom 中的代码:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.0-M1</version>
<configuration>
<doclet>my.company.common.doclet.MyDoclet</doclet>
<docletPath>${project.build.directory}/../../shared-java/target/classes;${project.build.directory}/classes</docletPath>
<sourcePath>${project.build.directory}/../../shared-java/src/java;${project.build.directory}/../src/java</sourcePath>
<encoding>UTF-8</encoding>
<show>public</show>
<subpackages>my.company.api</subpackages>
<useStandardDocletOptions>false</useStandardDocletOptions>
<docletArtifacts>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</docletArtifacts>
</configuration>
<executions>
<execution>
<id>attach-javadoc</id>
<phase>post-integration-test</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
谢谢!
我发现 maven-javadoc-plugin 确实将整个类路径传递到我的 doclet。 但是 doclet ClassLoader.getSystemClassLoader() 没有使用那个类路径。
所以我必须手动将这些类路径添加到当前的类加载器中。
在 Eclipse 中,它会自动设置那些类路径。
如果在 <additionalDependencies>
的帮助下添加它们会怎么样?
<configuration>
...
<additionalDependencies>
<additionalDependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</additionalDependency>
</additionalDependencies>
...
</configuration>
参见:https://maven.apache.org/plugins/maven-javadoc-plugin/examples/additional-dependencies.html