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

标签 maven deployment mule munit

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

我在使用 1.2 版的 mule-domain-maven-plugin 时面临“重复项目 Artifact 分配”的问题 that was fixed here与版本 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); 之间的区别吗? 以及如何解决这个问题?

最佳答案

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

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

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

除此之外,项目还有附加的或次要的 Artifact 。它们对应于在项目构建期间也会生成的附加 Artifact ,并且与主要 Artifact 的不同之处在于它们的 classifier。和/或类型,当然还有他们的实际文件。这些额外的 Artifact 与主要 Artifact 一起安装和部署。以打包的典型项目为例jar还将生成其 Javadoc 和 Sources 作为 JAR 文件作为具有分类器 javadoc 的附加 Artifact 和 sources .接下来就是一个打包的工程pom只能有附属的神器,因为它没有主神器。最后,完全允许有一个没有附加 Artifact 的项目;只会部署主要的(如果是 pom 项目,则根本不会部署)。

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

举个例子,我们可以考虑部署的 Artifact under org.mule.tools.maven in Central .在神器id下 mule-maven-plugin ,有多个文件:

  • mule-maven-plugin-2.1.jar是主要的 Artifact 文件,
  • 由 POM 文件创建mule-maven-plugin-2.1.pom ,
  • 同时 mule-maven-plugin-2.1-javadoc.jarmule-maven-plugin-2.1-sources.jar附有各自的分类器。

作为第二个例子,考虑 Artifact ID mule-esb-maven-tools .部署的唯一文件(哈希文件除外)是 mule-esb-maven-tools-1.1.pom .这是完全正常的,因为它是一个 POM 项目,所以它没有主要 Artifact (没有部署 JAR 或其他);只有项目的 POM 文件,没有附加的 Artifact 。

关于maven - projectHelper.attachArtifact 和 project.getArtifact().setFile 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40788902/

相关文章:

java - 如何将 thymeleaf 变量分配给标签值

git - 配置 IntelliJ IDEA 以始终忽略由 Maven Release Plugin 在 target/checkout 创建的 Git Roots

java - Play Framework : add Maven local repository

docker - Kubernetes - 在一个 pod 中创建两个容器

mule - 使 WebMQ 同步

http - 具有回滚异常策略的 Mule ESB 简单 http 请求

java - Jenkins/Maven : Could not resolve default JAVA_HOME path, 构建失败

java - 初始堆大小无效。无法创建Java虚拟机

Java部署服务器程序

java - MULE ESB 简单 SOAP 服务创建必填字段