projectHelper.attachArtifact和project.getArtifact().setFile的区别

3
我目前在使用命令行执行MUnit测试时遇到了问题。我遇到了“重复项目工件分配”的问题,使用1.2版本的mule-domain-maven-plugin 已经在这里修复,升级到1.3版本即可解决。如果删除此代码行,则运行我的MUnit时会出现FileNotFoundException在mule-domain-config.xml中。通过反编译代码,我可以看到1.2版本(适用于我的MUnits)有两行代码:
this.projectHelper.attachArtifact(this.project, "zip", domain);
this.project.getArtifact().setFile(domain);

我看到1.3版本只有这一行代码:
this.projectHelper.attachArtifact(this.project, "zip", domain);

有人知道 this.projectHelper.attachArtifact(this.project, "zip", domain);this.project.getArtifact().setFile(domain); 之间的区别,并且如何解决这个问题吗?

1个回答

3
区别就在于主要构件和附属构件之间的区别。
首先,一个构件简单地说,是一个包含指向它的Maven坐标(组ID/构件ID/版本/分类器/类型)、解析它或者被解析的仓库以及一个文件的对象。该文件是实际要使用/下载/上传的具体文件。
除了POM项目外,Maven项目会生成一个单独的主要构件。它取决于其打包方式;例如,一个打包方式为jar的项目将创建一个包含项目所有类的主JAR构件文件,而一个打包方式为war的项目将创建Web应用程序。此外,项目本身与其POM文件绑定;这意味着一个项目,不仅有一个用于其主要构件的文件,还有对创建它的POM文件的引用。只有打包方式为pom的项目不会创建主要构件;这是因为这种项目是父级或聚合项目,包含可在多个项目之间共享的构建逻辑,但它们不会产生主要交付成果物。
除此之外,项目还有附属或次要的构件。它们对应于在项目构建过程中生成的其他构件,与主构件通过分类器和/或类型以及实际文件不同。这些附属构件与主构件一起安装和部署。例如,一个典型的打包jar项目也会生成其Javadoc和Sources作为带有分类器javadocsources的附属构件的JAR文件。因此,打包pom项目只能有附属构件,因为它没有主构件。最后,完全可以有一个没有附属构件的项目;只有主构件(或在pom项目的情况下根本没有)会被部署。
在Maven插件内部,所有这些考虑因素都归结为以下内容:
一个项目的主要构件可以通过 project.getArtifact() 获取,它是一个 Artifactproject.getArtifact().setFile(...) 可以设置项目的主要构件的实际文件。对于打包类型为 jar 的项目,这将是在磁盘上生成的 JAR 文件。具体示例:Maven JAR 插件所做的事情就是这个MavenProjectHelper 组件用于将构件附加到项目上。projectHelper.attachArtifact(project, "zip", file); 将一个类型为 ZIP 的构件附加到给定的项目上,没有分类器,并且其文件为给定的文件。还有一种重载方法可以附加带有分类器的构件。具体示例:当 Maven Assembly 插件被配置为附加其生成的构件时project.setFile(file) 设置创建它的 Maven 项目的 POM 文件。

举个例子,我们可以考虑在中央仓库(Central) org.mule.tools.maven部署的工件。在工件ID mule-maven-plugin 下,有多个文件:

  • mule-maven-plugin-2.1.jar 是主要的工件文件,
  • 它是由 POM 文件 mule-maven-plugin-2.1.pom 创建的,
  • mule-maven-plugin-2.1-javadoc.jarmule-maven-plugin-2.1-sources.jar 则与它们各自的分类器相关联。
作为第二个例子,考虑构件ID mule-esb-maven-tools。除了哈希文件外,唯一部署的文件是mule-esb-maven-tools-1.1.pom。这很正常,因为它是一个POM项目,所以它没有主要构件(没有JAR或其他已部署的构件);只有该项目的POM文件,没有附加的构件。

非常好的答案。非常感谢。 - Pat B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接