如何通过pom.xml将Maven“ --also-make”选项传递给命令行

时间:2018-12-16 17:59:57

标签: java maven pom.xml

我们假设有一个父项目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>

1 个答案:

答案 0 :(得分:2)

-当指定的项目也在聚合器(反应器)pom.xml的模块部分中列出时,可以使用Also-make选项。由于您的模块部分中没有必需的项目,因此您不能在当前设置中使用它。

您只需将其他项目添加到当前模块部分,即可解决您的问题。 (您不必担心所编写模块的顺序,Maven会按照您的正确顺序来构建它们。而且您不必使用Also-make)

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

parent pomaggregator pom是不同的概念。