在Maven POM文件中声明<packaging>的必要性是什么?</packaging>

时间:2014-11-11 10:20:49

标签: maven pom.xml

我做了一个Maven项目并宣布包装为战争。

<packaging>war</packaging>

但是这返回了一个错误,

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5:single (make-assembly) on project WaterDealer: Execution make-assembly of goal org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5:single failed: For artifact {ArtifactName:ArtifactName:0.0.1-SNAPSHOT:war}: An attached artifact must have a different ID than its corresponding main artifact.

但是当我删除包装声明时,一切都按预期进行。

有没有具体原因发生这种情况?为什么声明包装类型会返回错误An attached artifasct must have a different ID than its corresponding main artifact.?它们有什么关系?

我通过此链接Maven POM reference查看了POM引用,但未发现该信息非常有用。

2 个答案:

答案 0 :(得分:0)

错误来自装配插件,它与包装没有直接关系。

包装定义了maven生成的工件类型(通常:一个pom.xml一个工件 - 此规则有例外,e.x. sources jars或javadocs。)

默认为“jar”。所以如果你没有指定任何东西,maven会创建一个jar文件。

packaging的其他可用值应该有点自我解释?

错误可能只是结果的名称。因此打包jar会创建一个jar文件,“war”会创建一个war文件等等。如果你的程序集插件创建的war文件可能与通过pom.xml创建的war相冲突

答案 1 :(得分:0)

包装定义了一些完成的绑定。这意味着如果您决定使用packaging war,则意味着在程序包阶段运行maven-war-plugin。 This can be read in the appropriate documentation.

问题是为什么你在战争模块中使用maven-assembly-plugin,除了为什么要使用这样一个旧版本。看一下这个显示插件最新版本的网站:

http://maven.apache.org/plugins/