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
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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With