3

我目前在使用命令行执行 MUnit 测试时遇到问题。

我正面临“重复项目工件分配”的问题,使用 1.2 版的 mule-domain-maven-plugin已在此处使用 1.3 版修复。在运行我的 MUnit 时,删除这行代码会导致 mule-domain-config.xml 上出现 FileNotFoundException。

反编译代码后,我可以看到 1.2(适用于我的 MUnit)有 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);如何解决这个问题?

4

1 回答 1

3

区别与主神器和附属神器的区别相同。

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

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

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

在 Maven 插件中,所有这些考虑都归结为以下几点:

举个例子,我们可以考虑部署在 Centralorg.mule.tools.maven的工件。在工件 id 下mule-maven-plugin,有多个文件:

  • mule-maven-plugin-2.1.jar是主要的工件文件,
  • 由 POM 文件创建mule-maven-plugin-2.1.pom
  • whilemule-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 文件,没有附加的工件。

于 2016-11-24T15:33:23.257 回答