Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add jar to doclet classpath using maven-javadoc-plugin

Tags:

java

maven

doclet

I wrote a doclet that collects some data and passes it to a reporter. I want this reporter to be exchangeable. I tried to add a reporter implementation to the doclet classpath using an additionalDependency and/or a pluginDependency. I can't load the reporter implementation with the Java 6 service loader and it also doesn't work to get the class using the doclets class loader or the threads context class loader.

How can I get the test.TestReporterImpl into the test-doclet classpath?

In the doclet:

apiReporterServiceLoader = ServiceLoader.load(TestReporter.class); // test.TestReporter

apiReporterServiceLoader.iterator().hasNext(); // false

Thread.currentThread().getContextClassLoader().loadClass("test.TestReporterImpl"); // ClassNotFoundException

getClass().getClassLoader().loadClass("test.TestReporterImpl"); // ClassNotFoundException

in the pom executing the doclet

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.10.3</version>
    <executions>
        <execution>
            <id>run-my-doclet</id>
            <goals>
                <goal>javadoc</goal>
            </goals>
            <phase>generate-resources</phase>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>test</groupId>
            <artifactId>test-doclet-test-reporter</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
    <configuration>
        <doclet>test.TestDoclet</doclet>
        <docletArtifact>
            <groupId>test</groupId>
            <artifactId>test-doclet</artifactId>
            <version>${project.version}</version>
        </docletArtifact>
        <additionalDependencies>
            <additionalDependency>
                <groupId>test</groupId>
                <artifactId>test-doclet-test-reporter</artifactId>
                <version>${project.version}</version>
            </additionalDependency>
        </additionalDependencies>
        <useStandardDocletOptions>false</useStandardDocletOptions>
    </configuration>
</plugin>

test-doclet-test-reporter/src/main/resources/META-INF/services/test.TestReporter

test.TestReporterImpl
like image 297
Sven Tschui Avatar asked Nov 10 '22 13:11

Sven Tschui


1 Answers

You'd have to specify the directory to be included in your class path by adding the following to your POM anywhere under build. This is true for your classes under the meta-inf folder under resource, in cases of bugs to pick up from the default implicit resource folder.

 <project>
     ...
     <build>
       ...
       <resources>
         <resource>
           <directory>[your folder containing the class or to be in the classpath here]</directory>
         </resource>
       </resources>
       ...
     </build>
     ...
    </project>
like image 135
Milind J Avatar answered Nov 14 '22 23:11

Milind J