META-INF/services/javax.annotation.processing.Processor copied before
compilation and causes error
--------------------------------------------------------------------------------------------------
Key: MCOMPILER-97
URL: http://jira.codehaus.org/browse/MCOMPILER-97
Project: Maven 2.x Compiler Plugin
Issue Type: Bug
Affects Versions: 2.0.2
Environment: Ubuntu 8.10, JDK 6.
Reporter: Jesse Glick
Attachments: maven-6647998-test.zip
It is tricky to compile a Maven module which defines a (269-compliant)
annotation processor. If you write the code for the processor in src/main/java
and register it in src/main/resources,
META-INF/services/javax.annotation.processing.Processor is copied to
target/classes first, and then javac is run. But javac is given target/classes
in -classpath, so it tries to load the processor, which of course has not been
compiled yet - a chicken-and-egg problem.
The most straightforward workaround is to specify
<compilerArgument>-proc:none</compilerArgument> in your POM. This will only
work, however, if the module does not use any annotation processors defined in
dependencies. If it does, there may be some other trick involving
-processorpath and Maven variable substitution to insert the dependency
classpath.
Switching the order of resources:resources and compiler:compile would help - at
least a clean build would work - though it could still cause problems in
incremental builds. Better would be for the compiler plugin to pass
-processorpath based on the dependency classpath (i.e. -classpath minus
target/classes) when using -source 1.6 or higher.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira