Details
-
Bug
-
Status: Reopened
-
Major
-
Resolution: Unresolved
-
2.0.2
-
None
-
None
-
Ubuntu 8.10, JDK 6.
Description
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.
Attachments
Attachments
Issue Links
- is depended upon by
-
MCOMPILER-98 -sourcepath not passed to javac
- Closed
- is related to
-
MCOMPILER-134 add support for jdk 6 javac -processorpath parameter
- Closed