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

时间:2016-11-24 14:28:51

标签: maven deployment mule munit

我目前面临使用命令行执行MUnit测试的问题。

我面临着重复项目工件分配问题"使用版本1.3的mule-domain-maven-plugin that was fixed here 1.2版。删除这行代码会在运行我的MUnit时在mule-domain-config.xml上导致FileNotFoundException。

反编译代码后,我可以看到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 个答案:

答案 0 :(得分:1)

差异与主要工件和附加工件之间的差异相同。

首先,简单地说,一个工件是一个包含指向它的Maven coordinates的对象(组ID /工件id /版本/分类器/类型),存储器在哪里解析它或它在哪里已解决,以及一个文件,这是要使用/下载/上传的实际具体文件。

除了POM项目,Maven项目会生成一个主要工件。这取决于它的包装;例如,打包为jar的项目将创建一个主JAR工件,其文件包含项目的所有类,打包为war的项目将创建Web应用程序。此外,项目本身与其POM文件相关联;这意味着一个项目,不仅有一个主要工件的文件,而且还引用了创建它的POM文件。仅适用于打包pom的项目,不会创建主要工件;这是因为这些项目是父项目或聚合器项目,包含要在多个项目之间共享的构建逻辑,但它们不会产生主要的可交付项目。

除此之外,项目还附加或辅助了工件。它们对应于在项目构建期间也生成的其他工件,并且与它们的classifier和/或类型(当然,它们的实际文件)不同。这些附加工件与主工件一起安装和部署。例如,打包jar的典型项目也会将其Javadoc和Sources生成为JAR文件,作为具有分类器javadocsources的附加工件。因此,打包pom的项目只能附加工件,因为它没有主要工件。最后,完全允许一个没有附加工件的项目;

,只有主要的(或pom项目的情况下根本没有)。

在Maven插件中,所有这些注意事项都归结为以下几点:

举个例子,我们可以考虑部署的工件under org.mule.tools.maven in Central。在工件标识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附加了各自的分类器。

作为第二个示例,请考虑工件标识mule-esb-maven-tools。部署的唯一文件(散列文件除外)为mule-esb-maven-tools-1.1.pom。这是完全正常的,因为它是一个POM项目,所以它没有主要工件(没有JAR或其他部署);那里只有项目的POM文件,没有附加工件。

相关问题