[ https://jira.codehaus.org/browse/MCOMPILER-240?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=362373#comment-362373 ]
Dave Roberge commented on MCOMPILER-240: ---------------------------------------- +1 - we are using dagger on one of our projects (which uses annotation processors) and using version 3.2 causes this issue > Generated sources directory should not be added to compiler's source roots > -------------------------------------------------------------------------- > > Key: MCOMPILER-240 > URL: https://jira.codehaus.org/browse/MCOMPILER-240 > Project: Maven Compiler Plugin > Issue Type: Bug > Affects Versions: 3.2 > Environment: Apache Maven 3.2.5 > (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T18:29:23+01:00) > Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609) > Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode) > Java(TM) SE Runtime Environment (build 1.7.0_45-b18) > Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode) > Java(TM) SE Runtime Environment (build 1.8.0_25-b17) > Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode) > Reporter: Tibor Varga > Attachments: code-generation-test-case.tar.bz2, > Generated_sources_directory_added_to_source_roots_after_compilation.patch > > > I am using annotation processors with Maven and I keep getting errors when > compiling with generated sources already present from a previous run. > I have modified one of the test cases submitted for > [MCOMPILER-157|http://jira.codehaus.org/browse/MCOMPILER-157] to induce the > error by generating a source file _as source file_ rather than as a resource. > Untar the test case and run {{mvn clean test -q && mvn test -q}} to verify. > What I found is that {{AbstractCompilerMojo}} in version 3.2 of the compiler > plugin adds the generated sources directory to the compiler's source root > list, and that has two undesirable effects: > # Sources generated in the previous run will be stale the next time around > and cause recompilation. > # The compiler will consider the previously generated source files to be > initial inputs. > The first one is mostly harmless but the second one is deadly, as it breaks > the processing environment of the annotation processors. > From the {{javax.annotation.Filer}} documentation in JDK 8: > bq. "During each run of an annotation processing tool, a file with a given > pathname may be created only once. Any subsequent attempt to create the same > file during a run will throw a FilerException [...] The initial inputs to the > tool are considered to be created by the zeroth round; therefore, attempting > to create a source or class file corresponding to one of those inputs will > result in a FilerException." > Thus by adding the generated sources directory to the compiler's source > roots, the compiler plugin causes annotation processors to inadvertently > break their contract with the compiler. > I get the expected behavior when lines 511-540 in {{AbstractCompilerMojo}} > are moved after the compiler invocation, say to line 806. See the attached > patch. -- This message was sent by Atlassian JIRA (v6.1.6#6162)