0

我正在创建一个非 java Maven 工件。在pom.xml我解决了一些依赖项,然后使用exec插件运行自定义脚本。有些文件是在目录中创建的,但 Maven 在将它们打包到 jar 时看不到它们。

当我运行mvn package两次时,第二次运行确实包含 jar 中的资源文件。

任何想法为什么会发生这种情况?该脚本在阶段期间运行,因此在阶段创建 jarcompile时已经创建了文件。package


这是我的pom.xml配置的相关(希望)部分:

<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.4.0</version>
        <executions>
            <execution>
                <id>build-plugin</id>
                <phase>compile</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>bash</executable>
                    <arguments>
                        <argument>build_plugin.sh</argument>
                        <argument>${workspace}</argument>
                        <argument>${plugin}</argument>
                    </arguments>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>

<resources>
    <resource>
        <directory>${project.basedir}/${outputPath}</directory>
        <includes>
            <include>**</include>
        </includes>
        <excludes>
            <exclude>target/**</exclude>
        </excludes>
    </resource>
</resources>

所有变量和路径都是有效的,在第二次运行时,我得到了一个包含预期内容的 jar。但不是在第一次。

4

1 回答 1

1

在 maven 默认生命周期中,资源的处理发生在编译之前,请参见https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

你需要做的是改变“exec-maven-plugin”的构建阶段,使用“generate-sources”而不是“compile”

<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.4.0</version>
        <executions>
            <execution>
                <id>build-plugin</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>bash</executable>
                    <arguments>
                        <argument>build_plugin.sh</argument>
                        <argument>${workspace}</argument>
                        <argument>${plugin}</argument>
                    </arguments>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>

<resources>
    <resource>
        <directory>${project.basedir}/${outputPath}</directory>
        <includes>
            <include>**</include>
        </includes>
        <excludes>
            <exclude>target/**</exclude>
        </excludes>
    </resource>
</resources>
于 2016-04-20T13:07:21.250 回答