为什么Maven目标“包”包含jar中的资源,但目标“jar:jar”不包含?

时间:2010-05-07 08:12:05

标签: java maven-2 jar maven-plugin

当我使用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)。

3 个答案:

答案 0 :(得分:10)

jar:jarMaven JAR plugin 目标用于“从当前项目中构建JAR ”并且只做一件事:它将target/classes的内容打包到target目录中的JAR中,这就是全部。因此,当您运行mvn jar:jar时,您的pom 中的插件配置,但jar:jar将不会做比我提到的更多的事情。如果target/classes为空或不存在,则不会在生成的JAR中打包任何类或资源。

package 阶段build lifecycle phase,当您调用mvn package时, package之前的所有阶段执行(process-resourcescompileprocess-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会自动绑定到包目标。所以“包”目标会做我想要的一切,包括将类路径附加到清单并设置主类。