【发布时间】:2014-10-17 09:16:15
【问题描述】:
问题:我想从 Mojo 插件中的代码访问 com.sun.tools.javadoc.Main。
我对这个问题有两个部分。
第 1 部分:
创建mojo插件时,最好在@Mojo里面使用注解或者参数 例如,您可以在两者中设置“requiresDependencyResolution”。
/*
* @goal install
* @phase process-classes
* @configurator include-project-dependencies
* @requiresDependencyResolution compile+runtime
*/
@Mojo(name = "document", requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME)
public class CreatorMavenPlugin extends AbstractMojo
第 2 部分:(主要问题)
我想在我的插件中执行以下代码,我想挂钩到 Javadoc 生成。
com.sun.tools.javadoc.Main.execute(new String[]
{
"-private",
"-doclet",
"com.test.tools.APIDocGenDoclet",
javaFilePathAndName
});
return APIDocGenDoclet.getCurrentClassDocs();
问题在于 Eclipse 从它拥有的 JDK 中识别出 com.sun.tools.javadoc.Main。
Maven 运行时找不到类并报错......
Number of foreign imports: 1
import: Entry[import from realm ClassRealm[maven.api, parent: null]]
-----------------------------------------------------
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:125)
... 20 more
Caused by: java.lang.NoClassDefFoundError: com/sun/tools/javadoc/Main
我尝试直接添加工具以作为依赖项开始...
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.6.0</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
但这不起作用。 (同样的错误)
我已尝试将其添加为我的插件在其下运行的配置文件的依赖项...
<profile>
<id>auto-doc</id>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.6.0</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.test</groupId>
<artifactId>updater</artifactId>
<version>1.0.0-SNAPSHOT</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>document</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
但没有改变,同样的错误。
我觉得这与为 Mojo 插件定义的类路径设置有关,但我尝试了许多不同的组合,但我被难住了。
有人可以帮忙吗? 注意:我在 Windows 上使用 Maven 3.0.4 和 JDK 1.6.0_43 32 位。
【问题讨论】:
标签: java maven maven-3 maven-plugin