【问题标题】:How to pass maven "--also-make" option via pom.xml to command line如何通过 pom.xml 将 maven “--also-make” 选项传递给命令行
【发布时间】:2019-05-17 05:11:38
【问题描述】:

假设有一个父项目 A,它的 pom.xml 中有模块 B 和 C。

Project A
    |-pom.xml
    |----------->ModuleB
    |               |->pom.xml
    |----------->ModuleC
    |               |->pom.xml

<modules>
    <module>B</module>
    <module>C</module>
</modules>

模块 C 本身具有一些仅属于该子模块的依赖项。这个依赖应该在模块 C 之前构建,所以我想在为 C 调用“mvn install”时调用“-am”(--also-make)选项。

Maven 正在远程执行,我只有 pom 文件。构建作业在远程 Jenkins 上运行,它使用项目 A 父 pom 中的当前配置文件,必须使用此配置文件。

我虽然可以在模块 C 的 pom 中完成,例如在 maven-compiler-plugin 的配置中?

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>${jdk.source}</source>
            <target>${jdk.target}</target>
            **<arguments>-am</arguments>** <!--smth like this maybe?-->
        </configuration>
    </plugin>

我还考虑创建另一个 pom.xml 以仅以正确的顺序包含子模块 C 及其依赖项,并在父 pom 中代替当前子模块 C 使用,但想先尝试 -am 选项。此外,我现在不太明白该把这个新 pom 放在哪里,因为我们已经处于父级 A 级了。

可能整个项目结构应该重构,但这是我现在所拥有的。

更新:下面是不太简化的当前项目结构。

Project A (maven parent for B, C, D)
    |-pom.xml
    |----------->ModuleB
    |               |->pom.xml
    |----------->folder
        |----------->folder
            |----------->ModuleC
            |               |->pom.xml
    |----------->ModuleD
    |               |->pom.xml

<modules>
    <module>B</module>
    <!-- <module>D</module> | initially was here, now needs to be only C's dependency -->
    <module>C</module>
</modules>

【问题讨论】:

    标签: java maven pom.xml


    【解决方案1】:
    当指定的项目也列在 aggregator(reactor) pom.xml 的模块部分中时,可以使用

    --also-make 选项。由于您的模块部分中没有所需的项目,因此您无法在当前设置中使用它。

    您可以将额外的项目添加到您当前的模块部分,这将解决您的问题。 (您不必担心您编写的模块的顺序,Maven 会为您按照正确的顺序构建它们。而且您不必使用also-make)

    您也可以使用您在问题中建议的解决方案。它不必是 C 的父级,它可以只是 C 及其依赖项的聚合器。(我认为这不是必需的。您可以将它们全部添加到当前模块部分)

    另外parent pomaggregator pom 是不同的概念。

    【讨论】:

    • 感谢您的回复。我很抱歉过度简化了项目结构。请参阅问题下方的更新。如果您正在谈论将依赖项添加到父项目 A pom,这就是它的工作方式。但是当前的挑战(这不取决于我)是使 D 仅成为模块 C 的依赖项并将其从项目 A 模块中排除(尽管它当然仍会影响整个项目的构建)。据我了解,模块仅在当前模块之下。考虑将依赖项 D 移动到下面的文件夹并为 D & C 制作一个通用聚合器
    • 无论如何,想知道在物理移动模块 D 之前还有哪些其他选择,以便创建一个通用聚合器
    • @nonrandom_passer 您不必将其移动到另一个文件夹。您可以在模块部分中提供相对路径。 (例如 ../../B
    • @nonrandom_passer 这也适用于父 pom 位置。父 pom 不必是当前 pom 上方的一个文件夹。您可以像 ../parent/pom.xml 一样使用它。检查这个例子maven.apache.org/guides/introduction/…
    • @nonrandom_passer 这是一个有效的解决方案。但最后,这与将 D 作为模块直接添加到 A 中没有什么不同。 (如果你不能那样做,这很好。)
    猜你喜欢
    • 2016-11-05
    • 2020-07-02
    • 2015-10-13
    • 2011-11-24
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    相关资源
    最近更新 更多