2016-11-24 75 views
1

我目前正面临着使用命令行执行我的MUnit测试的问题。projectHelper.attachArtifact和project.getArtifact()之间的区别setFile

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

反编译代码后,我可以看到,1.2(与我MUnits作品),具有2行代码:

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

区别与主工件和附加工件之间的差异相同。首先,简单来说,工件是一个包含指向它的Maven coordinates的对象(组编号/工件编号/版本/分类器/类型),存储器在哪里解决或解决它,以及一个文件,它是使用/下载/上传的实际具体文件。

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

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

里面一个Maven插件,所有这些因素归结为以下几点:

举例说明,我们可以考虑部署文物under org.mule.tools.maven in Central。根据工件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文件,没有附加的工件。

+0

很好的回答。太感谢了 –