当我使用Maven目标“package”打包我的项目时,也会包含资源。它们最初位于“src / main / resources”目录中。 因为我想创建一个可执行jar并将类路径添加到清单中,所以我使用的是maven-jar-plugin。
我已将其配置为以下内容:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>at.program.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
为什么用“jar:jar”创建的jar文件也不包含我的资源。就我而言,它应该使用与“包”目标相同的目录(在我的情况下继承自Maven Super POM)。
答案 0 :(得分:10)
jar:jar
的Maven JAR plugin 目标用于“从当前项目中构建JAR ”并且只做一件事:它将target/classes
的内容打包到target
目录中的JAR中,这就是全部。因此,当您运行mvn jar:jar
时,您的pom 中的插件配置,但jar:jar
将不会做比我提到的更多的事情。如果target/classes
为空或不存在,则不会在生成的JAR中打包任何类或资源。
package
阶段是build lifecycle phase,当您调用mvn package
时, package
之前的所有阶段执行(process-resources
,compile
,process-test-resources
等)并触发插件目标bound to these phases。因此,对于<packaging>
类型jar
的项目,jar:jar
绑定到package
并将在package
阶段运行,但在此之前,将触发绑定到package
之前阶段的目标,包括将资源复制到target/classes
的目标。
答案 1 :(得分:0)
您可以尝试在jar插件配置中使用maven.jar.includes。
答案 2 :(得分:0)
正如我发现的那样,当项目打包设置为“jar”时,maven-jar-plugin会自动绑定到包目标。所以“包”目标会做我想要的一切,包括将类路径附加到清单并设置主类。