gpt4 book ai didi

maven-compiler-plugin 指定 fork=true 时不做注解处理?

转载 作者:行者123 更新时间:2023-12-03 20:18:22 26 4
gpt4 key购买 nike

我正在使用 maven-compiler-plugin在 Maven 项目中对我的代码执行注释处理。它一直在工作,直到我添加了 <fork>true</fork>配置选项。

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>

my-processor-1.0.jar 文件包含一个 META-INF/services/javax.annotation.processing.Processor 文件,以便它可以被 javac 发现。运行时编译器。

当我使用此配置运行 mvn clean compile 时,我看到注释处理器运行并且生成的代码按预期放入 target\generated-sources\annotations 目录中。

但是如果我添加一个 <fork>true</fork>插件配置的选项,然后我观察到注释处理器没有运行,并且 target\generated-sources\annotations 目录中没有代码。

我用 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 ,则将调用注释处理器。当 <fork>true</fork>选项被指定,那么注释处理器将不会运行。

我还添加了 x.y.z:my_processor maven-compiler-plugin 之外的依赖依赖项,以确保加载了注释处理器依赖项。

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>

我以为我已经对此进行了测试,但我可能一直在寻找控制台输出(在进程 fork 时不会出现),而不是寻找生成代码的存在。

最佳答案

您需要使用 compilerArgs 选项通过 -processor Maven 在 fork 模式下调用 javac 时的选项。

关于maven-compiler-plugin 指定 fork=true 时不做注解处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26228563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com