如何在maven-javadoc-plugin中正确设置classpath?

时间:2018-02-07 20:20:54

标签: java maven doclet

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

clazz.newInstance()

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

但是当我在maven中运行它时,它会引发异常:NoClassDefFoundError

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

我知道我可以在maven-javadoc-plugin中设置classpath。但我的项目有超过50个第三方罐子。如何轻松设置这些罐子?

这是我在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>

谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

如果在 <template> <div class="item"> <input class="item-input" type="text" v-model="inputData" @input="onChangeChild" :disabled="!activated" /> </div> </template> <script> export default { props: ['propsData', 'propsBoolean'], data() { return{ inputData: this.propsData[1], index: this.propsData[0], activated: this.propsBoolean } }, methods:{ onChangeChild(event){ event.preventDefault() this.$emit('onChange', this.index,this.inputData) } }, 的帮助下添加它们会怎样?

<additionalDependencies>

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