在我的构建过程中,我需要通过外部工具生成一些文件。对于我的最小可编译示例,我将“外部工具”简化为以下脚本:
mkdir -p target/generated-resources
echo "hello world" > target/generated-resources/myResource.txt
现在我想在构建期间执行我的外部工具,并且生成的资源应该包含在 war 文件中。我找不到任何关于应该如何完成的文档,所以我只是猜测我需要将生成的资源写入
target/generated-resources
.所以也许这是一个问题?我使用以下构建配置创建了一个 pom.xml 文件:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>./createResource.sh</executable>
</configuration>
</plugin>
</plugins>
</build>
如果我运行
mvn package
我的 createResource.sh 脚本成功执行并创建了 myResource.txt 文件。但是 myResource.txt 文件不包含在生成的 .jar 文件中。我注意到如果我添加它会起作用
<resources>
<resource>
<directory>target/generated-resources</directory>
</resource>
</resources>
到我的构建配置,但我担心如果其他插件可能会以不同的方式使用此目录,这可能会导致问题(是吗?我真的找不到关于
target
目录的约定的任何信息)。另外,我更喜欢使用通常的 maven 约定的解决方案(如果存在这种情况的约定)。
如何在使用 maven 构建期间正确生成要包含在 jar 文件中的资源?
最佳答案
Maven 的约定(或至少主要用途)是在 (target/generated-resources/[plugin/process]) 内部生成资源。
但是与生成的源和编译器插件不同,生成的资源不是由 jar 插件专门处理的,因此您必须将其添加为资源(使用新资源,如您所做的或 build-helper-plugin)。
如果你按照惯例把你生成的所有东西放在生成资源的子目录下,你就不用担心其他插件如何使用它。
关于maven - 如何使用 maven 生成要包含在 Jar 文件中的资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24201580/