我在maven项目中使用maven-compiler-plugin
来对我的代码执行注释处理。它一直在工作,直到我添加了一个<fork>true</fork>
配置选项。指定fork = true时,maven-compiler-plugin不会执行注释处理?
的的pom.xml文件有以下几点:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<dependencies>
<!-- Add dependency on the annotation processor -->
<dependency>
<groupId>x.y.z</groupId>
<artifactId>my-processor</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
的我处理器-1.0.jar文件包含META-INF /服务/ javax.annotation.processing.Processor文件,以便在运行时由javac
编译器发现它。
当运行MVN清洁编译利用该配置,我看到注解处理器运行,并生成码被放入目标\产生来源\注解目录,如所预期。
但是,如果我添加<fork>true</fork>
选项插件配置,然后我观察到注解处理器不运行并且没有代码存在于目标\产生来源\注解目录。
我试过这个与maven-compiler-plugin
版本2.5.1,3.0和3.1(与3.x版本我不得不添加一个<forceJavaCompilerUser>true</forceJavaCompilerUser>
选项的配置,使注释处理器jar将被发现)。
我也试过明确指定注解处理器:
<configuration>
...
<annotationProcessors>
<annotationProcessor>x.y.z.MyProcessor</annotationProcessor>
</annotationProcessors>
...
</configuration>
再次,对于2.5.1版本,3.0和3.1,如果配置选项没有指定分叉注解处理器会被调用。当指定<fork>true</fork>
选项时,注释处理器将不会运行。
我还在maven-compiler-plugin
依赖关系之外添加了x.y.z:my_processor
依赖项,以确保注释处理器依赖项已加载。
当maven-compiler-plugin
配置为<fork>true</fork>
时,注释处理是否仍然有效?还是我错误地配置插件?
注意,我不想分裂汇编成单独执行(例如,一个执行编译没有注释处理,使用<fork>true</fork>
,和另一执行只做注释处理,使用<fork>false</fork>
,由于第二执行重新编译整个源再次,这在处理数千个源文件时很糟糕,除非有办法解决这个问题)。
我正在使用JDK 1.7.0_45。
编辑#1
其实解决的办法是移动处理器的依赖了插件的依赖,进入正常的依赖关系:
<dependencies>
<dependency>
<groupId>x.y.z</groupId>
<artifactId>my-processor</artifactId>
</dependency>
...
</dependencies>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<fork>true</fork>
</configuration>
</plugin>
</plugin>
我以为我已经测试了这一点,但我有可能一直在寻找控制台输出(当进程分叉时不会出现),而不是查找生成的代码的存在。
接受这个答案,如果它是正确的 – softarn 2014-12-22 12:46:26
我有同样的问题 - 我有一个JAR(artifact ** apt **)=我的注释处理器,我在插件中使用它(Mojo在artifact ** apt-plugin **中)它仅使用此注释处理器运行Javac工具。我在项目X中使用它。当** apt **的依赖项在项目依赖项中时,它是可以的。但是,当我在插件'depencies/dependency'中使用它时,它不起作用。 Maven模型说''plugin'中的'dependencies'是......“这个项目需要引入插件类加载器的其他依赖项。”但是,当我调试插件,它不提供我的依赖任何project.get ... – virgo47 2015-09-14 11:39:18