1

我有一个自定义的 java doclet,它会在某些类上调用 newInstance():

clazz.newInstance()

当我在 Eclipse 中作为 Junit 运行它时,它运行良好。

但是当我在 maven 中运行它时,它会抛出一个异常: NoClassDefFoundError

我检查了那个类,它不在我当前的项目中,它在一个 Maven 依赖项(第三方 jar)中。

我知道我可以在 maven-javadoc-plugin 中设置类路径。但我的项目有 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>

谢谢!

4

2 回答 2

1

What if adding them with the help of <additionalDependencies>?

        <configuration>
          ...
          <additionalDependencies>
            <additionalDependency>
              <groupId>log4j</groupId>
              <artifactId>log4j</artifactId>
              <version>${log4j.version}</version>
            </additionalDependency>
          </additionalDependencies>
          ...
        </configuration>

See: https://maven.apache.org/plugins/maven-javadoc-plugin/examples/additional-dependencies.html

于 2021-01-19T03:03:37.343 回答
0

我发现 maven-javadoc-plugin 确实将整个类路径传递给了我的 doclet。但是 doclet ClassLoader.getSystemClassLoader() 没有使用该类路径。

所以我必须手动将这些类路径添加到当前的类加载器中。

在 Eclipse 中,它会自动设置那些类路径。

于 2018-02-09T20:07:34.850 回答