Maven, more accurately here the maven-compiler-plugin or the plexus-compiler, (just like many other build tools) *is* broken; and, being "by design", it's unfixable. http://blog.ltgt.net/ Le 20 juil. 2013 12:31, "Tommy Svensson" <[email protected]> a écrit :
> Hello Russ, > > No, the sources are only generated once. I've double checked that. That > was my first thought. > > It just occurred to me that I have a unit test with an annotated model in > my annotation processor project and it behaves correctly (I just did some > tests). There the annotation processor is not run if the processed > annotations have not been modified, which is entirely correct. If I change > something in the annotation and build again (without doing clean) it > regenerates and compiles fine without duplicate class exception. The > problem in my other code where I have the problem is, I just realized that > the annotation processor is run when it should not be! > > When I do "mvn install" and then directly a new "mvn install" nothing what > so ever have changed in the annotations being processed! Still the > annotation processor is triggered for some reason in this case! The > interesting question here is how does the annotation processor framework > determine if a processor needs to run or not ? It can't have a clue about > what the processor will be generating, so how does it determine this ? > Also, this invocation when it shouldn't only occurs when built with maven, > but I realize that does not necessarily mean that maven is at fault. Hmm. > I have some more troubleshooting to do here. > > /Tommy > > > 19 jul 2013 kl. 18:33 skrev Russell Gold <[email protected]>: > > > Hi Tommy, > > > > I am not seeing this problem, myself. > > > > When you get the duplicate class problem, do you find multiple copies of > the generated source in your target directory? Multiple copies of the same > class files? AFAIK that is the only way you should ever see a duplicate > class exception > > > > - Regards, > > Russ > > > > On Jul 19, 2013, at 11:40 AM, Tommy Svensson <[email protected]> wrote: > > > >> Hello Russ, > >> > >> No, that is not exactly my case. I just tried to build from the IDE to > confirm my suspicion that the problem only occurred in maven. I'm using > Intellij Idea 12 and it is nice enough to recognize that my project is a > maven project. When I tell it to "make" or "rebuild" it does build itself > not using maven, but it uses the same target paths as maven would. It tries > to avoid the problem you describe. > >> > >> My problem is that as long as I build with maven I have to do a "mvm > clean install" every time since an "mvn install" … "mvn install" will fail > on the second install with a duplicate class exception for the generated > code. As I said, I suspect that maven have already built the previously > generated classes before annotation procession is run by maven and when the > annotation processor produces new versions of the same classes they are > compiled again and produces exactly the same class file targets as already > produced before during the build. This causes the duplicate class > exception. That is at least my theory. > >> > >> /Tommy > >> > >> > >> 19 jul 2013 kl. 17:28 skrev Russell Gold <[email protected]>: > >> > >>> Hi Tommy, > >>> > >>> I've run into some problems along these lines, but in my case, it only > happens when I build first using Maven and then try to recompile in the > IDE. The problem appears to be that the two disagree on where the generated > classes go (there was a change in one of the JDK releases, I believe). > >>> > >>> I work around that by doing a clean compile in maven before starting > IDE work. > >>> > >>> Is that your problem? Or are you only seeing this by only doing > repeated Maven builds? I don't have that problem. > >>> > >>> - Russ > >>> > >>> On Jul 19, 2013, at 11:22 AM, Tommy Svensson <[email protected]> > wrote: > >>> > >>>> Hello, > >>>> > >>>> I have found a problem when using auto triggered annotation > processors (META-INF/services/javax.annotation.Processor) with maven > builds! The problem occurs when the code have been built once and the > annotation processors have been triggered and generated code. If I then > build again without doing a clean in between then I get a duplicate class > exception for each generated class. I suspect this is because maven have > already build the previous versions before annotation processing is > triggered and when the newly updated/generated sources are compiled it > conflicts the the previous built classes. > >>>> > >>>> This problem does not occur when I build in the IDE not using maven. > Then the annotation processing behaves as expected. I suspect that if the > processor weren't specified in > META-INF/services/javax.annotation.Processor, and was run manually with > apt-maven-plugin it would work better, but that is not an option. I wan't > my processor to be able to be used the standard Java way, and with maven, > without having 2 versions of it. I have found a way to identify in the > processor when there already are old sources available and don't regenerate > then, which will make it run in maven, but will then not update the > generated sources without first doing a clean when annotations are updated. > This is of course not a good solution. > >>>> > >>>> Is there any other known way to solve this problem with maven ? I'm > using version 3.1 of the maven-compiler-plugin. > >>>> > >>>> Any help is appreciated. > >>>> > >>>> Best Regards, > >>>> Tommy Svensson > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> --------------------------------------------------------------------- > >>>> To unsubscribe, e-mail: [email protected] > >>>> For additional commands, e-mail: [email protected] > >>>> > >>> > >>> ----------------- > >>> Come read my webnovel, Take a Lemon <http://www.takealemon.com>, > >>> and listen to the Misfile radio play < > http://www.gold-family.us/audio/misfile.html>! > >>> > >>> > >>> > >>> > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [email protected] > >> For additional commands, e-mail: [email protected] > >> > > > > ----------------- > > Come read my webnovel, Take a Lemon <http://www.takealemon.com>, > > and listen to the Misfile radio play < > http://www.gold-family.us/audio/misfile.html>! > > > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >
