查找多模块 Maven Reactor 项目的根目录

2024-04-24

有没有一种简单的方法可以找到多模块 Maven 项目的根,例如 Gradle 的rootDir?


背景:

我想使用 maven-dependency-plugin 将多模块项目的所有子模块中的工件复制到相对于整个项目的根目录的目录。

也就是说,我的布局看起来与此类似,名称已更改:

to-deploy/
my-project/
    module-a/
    module-b/
    more-modules-1/
        module-c/
        module-d/
    more-modules-2/
        module-e/
        module-f/
    ...

我希望将所有工件从各自模块的目标目录复制到my-project/../to-deploy所以我最终得到

to-deploy/
    module-a.jar
    module-b.jar
    module-c.jar
    module-d.jar
    module-e.jar
    module-f.jar
my-project/
    ...

我可以使用每个模块中的相对路径来完成此操作,如下所示:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy</id>
                    <phase>install</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>${project.groupId}</groupId>
                                <artifactId>${project.artifactId}</artifactId>
                                <version>${project.version}</version>
                                <type>jar</type>
                                <outputDirectory>../../to-deploy</outputDirectory>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>

但我不想在中指定相对路径<outputDirectory>元素。 我更喜欢类似的东西${reactor.root.directory}/../to-deploy,但我找不到这样的东西。

另外,我希望有某种方法可以继承此 maven-dependency-plugin 配置,这样我就不必为每个模块指定它。

我还尝试从根 pom 继承自定义属性:

<properties>
    <myproject.root>${basedir}</myproject.root>
</properties>

但是当我尝试使用时${myproject.root}在模块 POM 中,${basedir}将解析为模块的 basedir。

另外,我发现http://labs.consol.de/lang/de/blog/maven/project-root-path-in-a-maven-multi-module-project/ http://labs.consol.de/lang/de/blog/maven/project-root-path-in-a-maven-multi-module-project/建议每个开发人员以及大概的持续集成服务器应该在profiles.xml 文件中配置根目录,但我不认为这是一个解决方案。

那么有没有一种简单的方法可以找到多模块项目的根呢?


use ${session.executionRootDirectory}

作为记录,${session.executionRootDirectory}在 Maven 3.0.3 的 pom 文件中为我工作。该属性将是您正在运行的目录,因此运行父项目,每个模块都可以获取该根目录的路径。

我将使用此属性的插件配置放在父 pom 中,以便它被继承。我在配置文件中使用它,仅当我知道要在父项目上运行 Maven 时才选择该配置文件。这样,当我在子项目上运行 Maven 时,我就不太可能以不希望的方式使用此变量(因为这样该变量将不是父项目的路径)。

例如,

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-artifact</id>
            <phase>package</phase>
            <goals>
                <goal>copy</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>${project.groupId}</groupId>
                        <artifactId>${project.artifactId}</artifactId>
                        <version>${project.version}</version>
                        <type>${project.packaging}</type>
                    </artifactItem>
                </artifactItems>
                <outputDirectory>${session.executionRootDirectory}/target/</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找多模块 Maven Reactor 项目的根目录 的相关文章

  • Eclipse Faces 配置编辑器不工作

    Summary 编辑 faces config xml 时 Eclipse 中的 Faces 配置编辑器不会打开 这是一个 JavaServer Faces 项目 Details 日食3 7 2 Eclipse m2e 1 0 1 m2e
  • Excel VBA 模块在运行时未更新

    我有 2 个模块 主模块在运行时更新另一个模块 并在每次更新时运行该模块 问题是另一个模块在运行时似乎没有更新 它运行第一个模块 因为输出全部根据第一个输入 但运行完成后 我检查了其他模块 它已更新 但输出不符合更新的模块 我已经问过这个问
  • gofabric8> 无法解压缩 /Users/apple/.fabric8/bin/oc.zip zip:不是有效的 zip

    我正在尝试为微服务设置环境 我正在使用 Fabric8 来做到这一点 我在用着mvn fabric8 cluster start Dfabric8 cluster kind openshift命令 执行时出现以下错误 INFO gofabr
  • maven-compiler-plugin 无法编译 Eclipse 没有问题的文件[重复]

    这个问题在这里已经有答案了 Eclipse 编译以下代码没有任何问题 而当mvn尝试编译此代码 结果编译失败 try Distribution rep get id returns a java util Optional Distribu
  • 在 Angular 中使用多个模块有什么好处?

    我是 Angular Js 的熟悉者 最近我发现在一些项目中 在主模块中创建并组装了多个 Angular 模块 代码看起来像 angular module main main sub1 main sub2 main sub2 angular
  • 在 Java EE 应用程序开发中使用 Docker

    我将添加300点作为赏金 我最近开始仔细研究 Docker 以及如何使用它来更快地让团队的新成员启动并运行开发环境 以及将新版本的软件交付到生产环境 我有一些关于如何以及在什么阶段将 Java EE 应用程序添加到容器的问题 据我所知 有多
  • JPA 2.0 API Maven 工件

    我正在使用 JPA 2 0 我的持久性提供程序是 Hibernate 但是 我只想包含 javax 中的标准 API 但在中心 没有 2 0 工件 我目前正在使用 Hibernate JPA 2 0 工件 但我想使用更标准的东西 这可能吗
  • 将实现拆分到多个文件/模块,并尽可能保持所有内容的私密性

    考虑我的库中的以下代码 pub struct Foo impl Foo fn helper self pub fn do something foo Foo foo helper 我的图书馆的用户应该能够使用Foo and do somet
  • findbugs pmd checkstyle cobertura 的 Maven 声纳插件配置

    我需要一些帮助来为 Maven 项目设置代码质量插件 我有一个多模块项目 虽然我已经配置了pmd checkstyle findbugs and cobertura在我的构建过程中 我可以为每个插件生成 xml 报告 但我在项目中配置声纳插
  • 运行 Maven Surefire 测试插件 Java 11 时出错

    我正在使用 Maven Surefire 插件版本 2 22 1 在 Team City 中运行 Spring Boot 应用程序的一些测试 Spring Boot 版本是 2 1 2 我在配置中指定使用分叉的 Java 11 jvm 如下
  • 将项目子文件夹中的文件放入输出目录

    我想在 C 项目中创建一个文件夹来包含一些配置文件 但是 我不希望将这些文件复制到bin Release MyFolder 我宁愿将它们复制到bin Release直接地 我认为这可以通过拥有一个 虚拟 文件夹 例如解决方案文件夹 来实现
  • 如何从路径和文件名中删除非法字符?

    我需要一种强大且简单的方法来从简单字符串中删除非法路径和文件字符 我使用了下面的代码 但它似乎没有做任何事情 我错过了什么 using System using System IO namespace ConsoleApplication1
  • Maven - 在构建时包含不同的文件

    我有十个 WAR 文件 所有这些文件都有几乎相同的代码和标记 唯一的区别在于图像 CSS 和消息 我偶然发现了配置文件的概念 但我还没有完全理解它 我不确定这是否可以处理我需要它做的事情 基本上 我想要一个针对 10 个不同 WAR 具有不
  • 如何使用 p2-maven-plugin 将插件和功能打包到 OSGI 包中

    我已经创建了一个插件和功能项目 用于插件 我正在使用 tycho maven 来构建它 我能够成功构建它 现在我想打包成 osgi 包 plugin jar feature jar artifacts jar content jar 为此
  • 导入 python 模块时如何解决 KeyError?

    我试图从不同的目录级别导入模块 所以我使用了 import os import sys sys path insert 0 os path abspath os path join os path dirname file 但现在我收到这个
  • Intellij 12 - 无法重新导入模块

    所以今天我遇到了一个奇怪的问题 我在 IntelliJ 中的一个模块遇到了一些问题 所以我决定尝试将其清除并从新的结账中重建它 我从 项目 窗口中删除了该模块 然后从我的文件系统中删除 重新下载 我回到 Intellij 并尝试导入该模块
  • 使用 Documents4j 将 Doc 转换为 PDF

    我想尝试使用 Documents4j 将文档转换为 PDF 我按照此处的说明进行操作http documents4j com develop http documents4j com develop 当我打字时mvn package然后按回
  • 无法使用 Maven 编译简单的 Java 10 / Java 11 项目

    我有一个简单的 Maven 项目 src main java module info java pom xml pom xml
  • maven 的 was6 插件可以与 WAS 7 一起使用吗

    据我所知 WAS 7 没有特定的 Maven 插件 所以我想知道 was6 maven plugin 是否可以与较新版本的服务器一起使用 我问了 IBM 同样的问题 官方是的 实际上 Jar Hell 会给你带来一些问题 如果我是你 我会花
  • Hibernate版本的jars,maven,应该放在一起吗?

    我很难理解哪些 jar 版本应该与 hibernate 一起使用 我有一组可以一起工作的 hibernate 版本 Maven 东西 但我不知道为什么 我怎样才能知道哪些版本与其他版本一起工作 我也想升级我的休眠 但我不知道要放入什么版本号

随机推荐