我做了一个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引用,但未发现该信息非常有用。
答案 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,除了为什么要使用这样一个旧版本。看一下这个显示插件最新版本的网站: