【问题标题】:How to copy Maven build artifact from a sub-module target to the parent target?如何将 Maven 构建工件从子模块目标复制到父目标?
【发布时间】:2021-05-02 07:55:18
【问题描述】:

有一个模块化的 Maven 项目,其中包含多个模块(本例中为 3 个),它们以某种方式相互依赖。
这是根项目pom(没什么特别的):

<project>
  <modelVersion>4.0.0</modelVersion>

  <description>Root project for modules build</description>
  <groupId>abc</groupId>
  <artifactId>xyz</artifactId>
  <version>0.0.1</version>
  <packaging>pom</packaging>

  <modules>
    <module>modules/first</module>
    <module>modules/second</module>
    <module>modules/third</module>
  </modules>
</project>

在构建根项目 (mvn package) 后,我们在“目标”文件夹中相应地获得了三个工件

%rootdir%/modules/first/target/artifact_1.jar
%rootdir%/modules/second/target/artifact_2.jar
%rootdir%/modules/third/target/artifact_3.jar

我想将artifact_3.jar 复制到%rootdir%/target/main_artifact.jar 中,以强调整个构建的目标是这个jar 文件。

我知道如何将文件复制到特定文件夹中,但这种“命令式”复制似乎是一种打破 Maven 抽象的非常规操作。

将工件main_artifact.jar 放入正确位置%rootdir%/target/ 的正确方法是什么?
假设必须有一个配置要添加到%rootdir%/pom.xml。如果你能分享一个标准的 Maven 方法来做到这一点,我将不胜感激。

【问题讨论】:

  • 为什么你的项目有中级?为什么不删除modules 目录?或者最好在 modules 目录中创建一个包含其他三个模块的 pom 文件......除此之外,为什么需要将该工件复制到不同的位置?
  • 太多问题让我们无处可去(到“这不是我们习惯的”的立场)。我有modules 目录,因为这个项目组织服务于与问题无关的项目维护的其他目的。假设我们已经删除了modules 并获得了相同的三个模块上一层。那时会发生什么变化?复制工件不是“需要的”——可以保持原样。唯一的目标是声明意图,正如我上面所说的“强调整个构建的目标”
  • 首先,如果您认为这些问题没有帮助?好的,你看着办。所以对此的简单回答是:工件的正确位置是相应模块的target 目录。复制是不可能的,也没有用。根目录绝对没有意义,因为根模块是包装pom 这意味着它不会产生任何东西...基于您拒绝回答问题...我无法再提供帮助...

标签: java maven multi-module artifact


【解决方案1】:

在 Maven 中,您不会将工件从一个目标复制到另一个目标。

您在各自的目标目录中构建它们,然后将它们安装到本地存储库和/或将它们部署到 Maven 存储库(如 Nexus 或 Artifactory)。

因此,没有 Maven 方法可以将工件从一个目标复制到另一个目标,因为您只是不这样做。

【讨论】:

    猜你喜欢
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多