maven:如何在 .jar 中包含注释生成的 .java 文件

问题描述 投票:0回答:2

我的类路径上有一些 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
中?

java maven gwt xtend
2个回答
3
投票

您可以将

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>
    ...

希望有帮助。

干杯,


0
投票

这是多个目录的完整示例:

<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>
© www.soinside.com 2019 - 2024. All rights reserved.