如何使用maven生成要包含在Jar文件中的资源?

时间:2014-06-13 09:06:34

标签: maven

在构建期间,我需要通过外部工具生成一些文件。对于我最小的可编辑示例,我将“外部工具”缩减为以下脚本:

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文件中的资源?

1 个答案:

答案 0 :(得分:2)

Maven的约定(或至少主要用途)是在内部生成资源(target / generated-resources / [plugin / process])。 但是与生成的源代码和编译器插件不同,生成的资源不是由jar插件专门处理的,因此您必须将其添加为资源(使用像您所做的新资源或build-helper-plugin)。

如果按照约定将生成的所有内容放在generated-resources的子目录下,则不必担心其他插件如何使用它。