maven-compiler-plugin 3.6.0 不从注释编译生成的源
maven-compiler-plugin 3.6.0 doesn't compile generated sources from annotations
我们刚刚将我们的 JBoss 从 6.1.0 升级到 Wildfly 10.1,并对模块和工件版本等进行了各种关联升级。在一个模块中,这导致我们的 cobertura 编译失败并出现编译器错误。我找到 并升级到 maven-compiler-plugin 3.6.0(从 3.1)。这似乎解决了我的问题,但仅限于本地。我可以为 cobertura 编译模块,但结果导致了一个新问题。
此模块的一些注释生成的源被另一个模块使用,class 文件未找到。什么改变了? generated-sources 目录包含 java 文件,但 classes 未编译。
它曾考虑过将 build-helper 阶段更改为从 process-sources 生成源代码这一点有所帮助,但随后失败了。
3.1 和 3.6.0 之间有什么变化需要改变吗? (我不熟悉如何处理注释 - 我只是 Cobertura 支持人员。)
pom 文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<description>The JPA entities for the Element Manager</description>
<artifactId>em-model</artifactId>
<groupId>com.myprod.em</groupId>
<parent>
<artifactId>em</artifactId>
<groupId>com.myprod</groupId>
<version>3.5.0.0.0-SNAPSHOT</version>
</parent>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<phase>process-sources</phase>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources/annotations</source>
</sources>
</configuration>
<goals>
<goal>add-source</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<groupId>org.apache.maven.plugins</groupId>
<configuration>
<finalName>em-model</finalName>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgument>-proc:none</compilerArgument>
</configuration>
<executions>
<execution>
<id>run-annotation-processors-only</id>
<phase>generate-sources</phase>
<configuration>
<compilerArgument>-proc:only</compilerArgument>
</configuration>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.1-b08</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.ejb</groupId>
<artifactId>jboss-ejb-api_3.2_spec</artifactId>
<scope>provided</scope>
</dependency>
<!-- Since hibernate validator is used in unit tests,
these JBoss logging deps are needed -->
<dependency>
<groupId>org.jboss.slf4j</groupId>
<artifactId>slf4j-jboss-logmanager</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.logmanager</groupId>
<artifactId>jboss-logmanager</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.8.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.myco.csp</groupId>
<artifactId>nrp_jpa</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.myco.cim</groupId>
<artifactId>cs_cim_jpa</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>1.0.0.Final</version>
<scope>provided</scope>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
</dependency>
<dependency>
<groupId>com.myco.logging</groupId>
<artifactId>logging-client</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>apache-log4j</groupId>
<artifactId>log4j</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.myprod.prodCommon</groupId>
<artifactId>unit-test-utils</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
我通过从编译器插件中删除 -proc:none
编译器参数来解决这个问题。有了这个 none 生成的源代码就被编译了。使用 3.1 插件我必须拥有它,但使用 3.6.0 我不能。
我还尝试通过使 compilerArg
特定于 default-compile 阶段来实现答案 ,但这并没有编译生成的源代码。如果我不重用 default-compile id,构建工作并为我生成 class 文件,但它 运行 两个编译阶段,-proc:none
一秒钟,这似乎多余的。
编译器的最终 pom 部分如下所示:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>run-annotation-processors-only</id>
<phase>generate-sources</phase>
<configuration>
<compilerArgument>-proc:only</compilerArgument>
</configuration>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
我们刚刚将我们的 JBoss 从 6.1.0 升级到 Wildfly 10.1,并对模块和工件版本等进行了各种关联升级。在一个模块中,这导致我们的 cobertura 编译失败并出现编译器错误。我找到
此模块的一些注释生成的源被另一个模块使用,class 文件未找到。什么改变了? generated-sources 目录包含 java 文件,但 classes 未编译。
它曾考虑过将 build-helper 阶段更改为从 process-sources 生成源代码这一点有所帮助,但随后失败了。
3.1 和 3.6.0 之间有什么变化需要改变吗? (我不熟悉如何处理注释 - 我只是 Cobertura 支持人员。)
pom 文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<description>The JPA entities for the Element Manager</description>
<artifactId>em-model</artifactId>
<groupId>com.myprod.em</groupId>
<parent>
<artifactId>em</artifactId>
<groupId>com.myprod</groupId>
<version>3.5.0.0.0-SNAPSHOT</version>
</parent>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<phase>process-sources</phase>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources/annotations</source>
</sources>
</configuration>
<goals>
<goal>add-source</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<groupId>org.apache.maven.plugins</groupId>
<configuration>
<finalName>em-model</finalName>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgument>-proc:none</compilerArgument>
</configuration>
<executions>
<execution>
<id>run-annotation-processors-only</id>
<phase>generate-sources</phase>
<configuration>
<compilerArgument>-proc:only</compilerArgument>
</configuration>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.1-b08</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.ejb</groupId>
<artifactId>jboss-ejb-api_3.2_spec</artifactId>
<scope>provided</scope>
</dependency>
<!-- Since hibernate validator is used in unit tests,
these JBoss logging deps are needed -->
<dependency>
<groupId>org.jboss.slf4j</groupId>
<artifactId>slf4j-jboss-logmanager</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.logmanager</groupId>
<artifactId>jboss-logmanager</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.8.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.myco.csp</groupId>
<artifactId>nrp_jpa</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.myco.cim</groupId>
<artifactId>cs_cim_jpa</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>1.0.0.Final</version>
<scope>provided</scope>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
</dependency>
<dependency>
<groupId>com.myco.logging</groupId>
<artifactId>logging-client</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>apache-log4j</groupId>
<artifactId>log4j</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.myprod.prodCommon</groupId>
<artifactId>unit-test-utils</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
我通过从编译器插件中删除 -proc:none
编译器参数来解决这个问题。有了这个 none 生成的源代码就被编译了。使用 3.1 插件我必须拥有它,但使用 3.6.0 我不能。
我还尝试通过使 compilerArg
特定于 default-compile 阶段来实现答案 ,但这并没有编译生成的源代码。如果我不重用 default-compile id,构建工作并为我生成 class 文件,但它 运行 两个编译阶段,-proc:none
一秒钟,这似乎多余的。
编译器的最终 pom 部分如下所示:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>run-annotation-processors-only</id>
<phase>generate-sources</phase>
<configuration>
<compilerArgument>-proc:only</compilerArgument>
</configuration>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>