【问题标题】:Using several pom files to build a project使用几个pom文件构建一个项目
【发布时间】:2017-02-19 23:04:41
【问题描述】:

我有两个不同的复杂构建任务,必须由 maven 依次完成。例如创建战争文件、库和...
据我所知,我必须将这些任务拆分为单独的 maven pom 文件。通过这种方法,每个 pom 文件都有特定的职责,我可以使它们尽可能简单,最重要的是,由于一些技术问题,我必须这样做。
我将这两个文件之间的共享依赖项放在父 pom 文件中以减少重复。
在这种情况下 create-jar.xml 和 create-war.xml 是任务,而 parent.xml 包含共享依赖项。
parent.xml

<?xml version="1.0" encoding="UTF-8"?>
    <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="http://maven.apache.org/POM/4.0.0"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

        <groupId>main</groupId>
        <artifactId>main</artifactId>
        <version>1.0</version>
        <packaging>pom</packaging>

        <dependencies>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.13</version>
            </dependency>
        </dependencies>

    </project>


create-jar.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>main</artifactId>
        <groupId>main</groupId>
        <version>1.0</version>
        <relativePath>parent.xml</relativePath>
    </parent>
    <groupId>create</groupId>
    <artifactId>create</artifactId>
    <version>1.2-SNAPSHOT</version>
    <packaging>jar</packaging>
</project>


create-war.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>main</artifactId>
        <groupId>main</groupId>
        <version>1.0</version>
        <relativePath>parent.xml</relativePath>
    </parent>
    <groupId>create-war</groupId>
    <artifactId>create-war</artifactId>
    <version>1.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

我需要的是通过一个命令调用两个 pom 文件的 mvn install。订单对我来说非常重要,因为 create-jar 必须在 create-war 之前运行。
有两种方法。
首先继承,通过使用create-jar.xml 作为create-war.xml 的直接父级,因此通过运行create-war,调用create-jar。
另一个解决方案是 composition,方法是从 create-war.xml 运行 create-jar.xml。我不确定我该怎么做。但我认为 maven-invoker 或 maven-antRun 插件会有所帮助。 我很乐意帮助我。

【问题讨论】:

  • 我理解的是你需要一个多模块构建
  • 请说明您的 WAR 是否应包含 JAR。如果您的场景确实是“构建一个 JAR,然后构建一个包含该 JAR 的 WAR”——您很可能不是第一个遇到这种情况的人。
  • 我会尝试将此添加到您的 create-war.xml &lt;modules&gt; &lt;module&gt;main&lt;/module&gt; &lt;module&gt;create&lt;/module&gt; &lt;/modules&gt;

标签: java maven pom.xml parent-pom


【解决方案1】:

检查此sample project
基本上你需要一个父 pom 来调用你的 2 个子 pom。
上面的例子有点长,但他们会用外行的术语解释每一步。

【讨论】:

    猜你喜欢
    • 2014-04-22
    • 2011-05-09
    • 1970-01-01
    • 2013-03-02
    • 2012-06-15
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多