Maven 包仅包含第二个 运行 中的文件
Maven package only includes file in second run
我正在创建一个非 java Maven 工件。在 pom.xml
中,我解决了一些依赖关系,然后 运行 使用 exec
插件的自定义脚本。有些文件创建在目录中,但 Maven 在将它们打包到 jar 中时看不到它们。
当我 运行 mvn package
两次时,第二次 运行 确实包含了 jar 中的资源文件。
知道为什么会这样吗?该脚本在 compile
阶段是 运行,因此在 package
阶段创建 jar 时文件已经创建。
这是我的 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。但不是第一次。
在 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>
我正在创建一个非 java Maven 工件。在 pom.xml
中,我解决了一些依赖关系,然后 运行 使用 exec
插件的自定义脚本。有些文件创建在目录中,但 Maven 在将它们打包到 jar 中时看不到它们。
当我 运行 mvn package
两次时,第二次 运行 确实包含了 jar 中的资源文件。
知道为什么会这样吗?该脚本在 compile
阶段是 运行,因此在 package
阶段创建 jar 时文件已经创建。
这是我的 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。但不是第一次。
在 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>