在构建期间,我需要通过外部工具生成一些文件。对于我最小的可编辑示例,我将“外部工具”缩减为以下脚本:
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文件中的资源?
答案 0 :(得分:2)
Maven的约定(或至少主要用途)是在内部生成资源(target / generated-resources / [plugin / process])。 但是与生成的源代码和编译器插件不同,生成的资源不是由jar插件专门处理的,因此您必须将其添加为资源(使用像您所做的新资源或build-helper-plugin)。
如果按照约定将生成的所有内容放在generated-resources的子目录下,则不必担心其他插件如何使用它。