单个POM.XML文件中的多个包目标

时间:2014-11-18 16:41:45

标签: maven pom.xml

我希望在同一个POM.xml文件中有2个打包目标。 2个包装目标将衍生出2个不同的罐子

1 个答案:

答案 0 :(得分:0)

这并不是maven背后的精神,你只能构建一个工件。您可以通过在父pom(包装modules)下将两个单独的工件保留为pom来管理多个工件。

例如:

pom.xml在... / com / product / parent / child1(构建child1 jar)

<project xmlns="...">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.product</groupId>
        <artifactId>parent</artifactId>
    </parent>

    <groupId>com.product.parent</groupId>
    <artifactId>child1</artifactId>
    <packaging>jar</packaging>
    <name>Child1 jar</name>

    <properties>
        ...
    </properties>

    <build>
        <plugins>
            <plugin>
                etc...
            <plugin>
        <plugins>
    <build>
    <dependencies>
    ...
    </dependencies>
</project>

pom.xml在... / com / product / parent / child2(构建子jar)

<project xmlns="...">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.product</groupId>
        <artifactId>parent</artifactId>
    </parent>

    <groupId>com.product.parent</groupId>
    <artifactId>child2</artifactId>
    <packaging>jar</packaging>
    <name>Child2 jar</name>

    <properties>
        ...
    </properties>

    <build>
        <plugins>
            <plugin>
                etc...
            <plugin>
        <plugins>
    <build>
    <dependencies>
    ...
    </dependencies>
</project>

为了完整起见,这里有一个将你的罐子组成一个单独的耳部工件的例子。这也是您父位置下的模块。 pom.xml在... / com / product / parent / child-ear(构建child-ear ear组成child1和child2 jar):

<project xmlns="...">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.product</groupId>
        <artifactId>parent</artifactId>
    </parent>

    <groupId>com.product.parent</groupId>
    <artifactId>child-ear</artifactId>
    <packaging>ear</packaging>
    <name>Child EAR</name>

    <properties>
        ...
    </properties>

    <build>
        <plugins>
            <plugin>
                etc...
            <plugin>
        <plugins>
    <build>
    <dependencies>
        <dependency>    <!-- include the above jars in my child-ear -->
            <groupId>com.product.parent</groupId>
            <artifactId>child1</artifactId>
        </dependency>
        <dependency>
            <groupId>com.product.parent</groupId>
            <artifactId>child2</artifactId>
        </dependency>
    </dependencies>
</project>

父pom:pom.xml在... / com / product / parent中(在child1和child2 jar poms之上)

<project xmlns="...">
    <modelVersion>4.0.0</modelVersion>
    <parent>
    ...
    </parent>

    <groupId>com.product</groupId>
    <artifactId>parent</artifactId>
    <packaging>pom</packaging>
    <name>Parent Assembly</name>

    <modules>  <!-- child modules to be executed as part of this build -->
        <module>child1</module>
        <module>child2</module>
        <module>child-ear</module>
    </modules>

    <properties>
        ...
    </properties>

    <build>
        <plugins>
            <plugin>
                etc...
            <plugin>
        <plugins>
    <build>
</project>

有一些关于多个模块poms的讨论:

除此之外,你应该掌握maven如何处理事情(因为它非常局限于支持熟悉度:

如果您希望自己可以拥有一个拆开包装的装配pom,并将依赖关系重新打包到其他结构中(或者将罐子包装成战争或其他任何东西)。请参阅assembly:single mojo目标,了解如何使用此功能(因为它更加明显,可能超出了您的问题范围。