在 Maven 中设置注释处理器生成的源目录
我正在尝试将使用注释处理器生成源的构建移动到 Maven。我尝试按如下方式配置 maven-compiler-plugin:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<fork>true</fork>
<compilerArgument>-s ${project.build.directory}/target/generated-sources/annotation-processing</compilerArgument>
</configuration>
</plugin>
</plugins>
但 javac 失败
[INFO] Compilation failure
Failure executing javac, but could not parse the error:
javac: invalid flag: -s /home/robert/workspaces/betbrain/sportsengine.common/sportsengine.bean.test/target/target/generated-sources/annotation-processing
Usage: javac <options> <source files>
use -help for a list of possible options
据我所知, -s 应该在源文件之前传递给 javac,但 maven 在之后传递它。
如何将 -s
标志正确传递给 maven-compiler-plugin?
更新:maven-annotation-plugin似乎不起作用。
当配置为
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<outputDirectory>${generated.sources.directory}</outputDirectory>
<processors>
<processor>xxx.annotation.EnforceJavaBeansConventionsProcessor</processor>
</processors>
</configuration>
</execution>
</executions>
</plugin>
执行失败时
[INFO] [processor:process {execution: process}]
error: Annotation processor 'xxx.annotation.EnforceJavaBeansConventionsProcessor' not found
1 error
I'm trying to move a build which generates sources using an annotation processor to Maven. I've tried configuring the maven-compiler-plugin as follows:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<fork>true</fork>
<compilerArgument>-s ${project.build.directory}/target/generated-sources/annotation-processing</compilerArgument>
</configuration>
</plugin>
</plugins>
But javac fails with
[INFO] Compilation failure
Failure executing javac, but could not parse the error:
javac: invalid flag: -s /home/robert/workspaces/betbrain/sportsengine.common/sportsengine.bean.test/target/target/generated-sources/annotation-processing
Usage: javac <options> <source files>
use -help for a list of possible options
As far as I can tell, -s should be passed before the source files to javac, but maven passes it after.
How can I pass the -s
flag properly to the maven-compiler-plugin?
Update: the maven-annotation-plugin does not seem to work.
When configured as
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<outputDirectory>${generated.sources.directory}</outputDirectory>
<processors>
<processor>xxx.annotation.EnforceJavaBeansConventionsProcessor</processor>
</processors>
</configuration>
</execution>
</executions>
</plugin>
Execution fails with
[INFO] [processor:process {execution: process}]
error: Annotation processor 'xxx.annotation.EnforceJavaBeansConventionsProcessor' not found
1 error
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
该插件使用硬编码的 Windows 类路径分隔符来构建类路径,因此它在我的 Linux 计算机上失败。
提交的补丁:
The plugin was using the harcoded Windows classpath separator to build the classpath, so it was failing on my Linux machine.
Submitted patches:
我可能遗漏了一些东西,但你不应该:
在
generate-sources
阶段在target/ generated-sources/annotation-processing
中生成源吗? apt-maven-plugin 或 maven-annotation-plugin 可以提供帮助。使用 maven-compiler-plugin 或 maven-build-helper-plugin?
编辑:
xxx.annotation.EnforceJavaBeansConventionsProcessor
位于哪里?您不需要将依赖项
添加到maven-annotation-plugin的配置中,如使用页面?PS:我不会使用 src/main/ generated 来作为输出目录,而是使用 target/ generated-sources 的子目录。
I may be missing something but shouldn't you:
Generate sources in
target/generated-sources/annotation-processing
during thegenerate-sources
phase? The apt-maven-plugin or the maven-annotation-plugin could help.Include generated sources when compiling sources into
target/classes
using<includes>
in the maven-compiler-plugin or the maven-build-helper-plugin?EDIT: Where is
xxx.annotation.EnforceJavaBeansConventionsProcessor
located? Don't you need to adddependencies
to the configuration of the maven-annotation-plugin as documented on the Usage page?PS: I wouldn't use
src/main/generated
as output directory but rather a subdirectory oftarget/generated-sources
.不完全是您问题的答案,但很有趣:
https://issues.apache。 org/jira/browse/MCOMPILER-75
恐怕在 Maven 中使用 JSR 269 会出现很多问题,至少使用默认的编译器插件是这样。
Not exactly an answer to your question, but of interest:
https://issues.apache.org/jira/browse/MCOMPILER-75
I'm afraid there are a number of issues using JSR 269 in Maven, at least with the default compiler plugin.
原因之一可能是 $JAVA_HOME 指向 jdk 1.5 版本而不是 1.6。 (在 Windows 上当然检查 %JAVA_HOME%)
One reason for this could be that $JAVA_HOME is pointing to jdk 1.5 version instead of 1.6. (on windows check %JAVA_HOME% of course)
我遇到了 GWTP SourceGenerateAPTProcessingannotations 的问题,
这是因为我没有为编译器插件设置版本,我的最终设置:
I had this issue with GWTP Source Generate APT Processing annotations
It was because I didn't set a version for the compiler plugin, my final setup:
我遇到了同样的问题...
你使用 java 5 吗?
现在,mvn install 应该可以工作了:-)
I got the same problem ...
Are you using java 5 ?
now, mvn install should work :-)
我一直在使用
maven-processor-plugin
,如下所示:生成的代码进入target/ generated-test-sources/test-annotations,生成的资源进入< em>target/test-classes(process 目标的默认值是 target/ generated-sources 和 target/classes,分别)。
我还需要使用
maven-build-helper-plugin
将 target/ generated-test-sources/test-annotations 添加到测试源路径,以便 test -compile阶段将编译生成的代码。I've been using the
maven-processor-plugin
as follows:The generated code goes into target/generated-test-sources/test-annotations, and generated resources into target/test-classes (the default for the process goal is target/generated-sources and target/classes, respectively).
I also need to use
maven-build-helper-plugin
to add target/generated-test-sources/test-annotations to the test source path so that test-compile phase will compile the generated code.