Tuesday 15 February 2011

java - Mojo development : access to javadoc com.sun.tools.javadoc.Main class -



java - Mojo development : access to javadoc com.sun.tools.javadoc.Main class -

problem : want access com.sun.tools.javadoc.main code in mojo plugin.

i have 2 parts question.

part 1:

when creating mojo plugin, best utilize annotations or parameters within @mojo illustration can set 'requiresdependencyresolution' in both.

/* * @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

part 2: (main question)

i want execute next code in plugin, want hook javadoc generation.

com.sun.tools.javadoc.main.execute(new string[] { "-private", "-doclet", "com.test.tools.apidocgendoclet", javafilepathandname }); homecoming apidocgendoclet.getcurrentclassdocs();

the problem eclipse recognises com.sun.tools.javadoc.main jdk has.

maven when runs can't find class , gives error....

number of foreign imports: 1 import: entry[import realm classrealm[maven.api, parent: null]] ----------------------------------------------------- @ org.apache.maven.plugin.defaultbuildpluginmanager.executemojo(defaultbuildpluginmanager.java:125) ... 20 more caused by: java.lang.noclassdeffounderror: com/sun/tools/javadoc/main

i've tried adding tools straight start dependency...

<dependency> <groupid>com.sun</groupid> <artifactid>tools</artifactid> <version>1.6.0</version> <scope>system</scope> <systempath>${java.home}/../lib/tools.jar</systempath> </dependency>

but doesn't work. (same error)

i've tried adding dependency of profile plugin runs under...

<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>

but not change, same error.

i sense classpath setup defined mojo plugin, i've tried many different combinations, i'm stumped.

can help please? note: i'm using maven 3.0.4 & jdk 1.6.0_43 32 bit on windows.

part 1: if don't need backward compatibility ancient maven versions, go annotations. it's new , improve way of specifying mojo configuration, , ide give autocomplete , hovers.

part 2:

taking @ existing maven javadoc plugin does:

it seems uses toolchain api locate appropriate javadoc tool run. maven compiler plugin javac.

summarizing toolchain documentation:

add

@component private toolchainmanager toolchainmanager; @component private mavensession session;

to mojo. in code

toolchain tc = toolchainmanager.gettoolchainfrombuildcontext( "jdk", session ); string javadocexecutable = tc.findtool( "javadoc" );

and can execute it. read toolchain documentation in link more detailed information.

if using java 8 or later, utilize toolprovider.getsystemdocumentationtool().

java maven maven-3 maven-plugin

No comments:

Post a Comment