我的类路径上有一些 java 7 注释处理器(用于 xtend)。通过一些注释,他们创建 java 文件。
这在 Elipse 和 Maven 构建中效果很好。
生成的文件最终会出现在
target/generated-sources/annotations
中,正如预期的那样。.class
文件也会按预期结束,因此成为最终 jar 文件的一部分。
由于我还需要在 GWT 的
.jar
文件中包含所有 java 源文件(应该只有一个包含源 和类的
.jar
文件),
我已指定 src/main/java
作为资源目录(以便 Maven 将文件复制到类目录,并且它们最终位于 jar 文件中)。
资源目录的技巧并不真正适用于我生成的文件,因为 Maven 将首先复制所有资源,然后开始编译(这反过来将通过注释处理器生成
.java
文件)。
如何告诉 Maven 复制时也将生成的
.java
文件包含在 .jar
中?
您可以将
maven-resources-plugin
绑定到 prepare-package
阶段,以实现在正确打包之前复制注释源:
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-annotations</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>target/generated-sources/annotations</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
希望有帮助。
干杯,
这是多个目录的完整示例:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.1</version>
<executions>
<execution>
<id>copy-annotations</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>target/generated-sources/annotations</directory>
</resource>
<resource>
<directory>target/generated-sources/protobuf</directory>
</resource>
</resources>
<outputDirectory>${project.build.outputDirectory}/generated-sources/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>