传递模块的Maven战争包装

时间:2013-06-13 15:44:33

标签: maven maven-2 dependencies packaging

我有一个网络应用程序,它提供了我编写的API的实现。所以,我有一套三个工件:my-webapp(war),my-api(jar)和my-impl(jar)。 pom是直截了当的:my-impl将my-api列为依赖项,my-webapp将my-impl列为依赖项。当我运行mvn install时,我希望my-impl在打包到WEB-INF / lib期间插入my-api。但它只是在拉动我的冲动。

我在这里做错了什么?或者不期望以这种方式工作?

更新:如果这有帮助,我会不断收到此警告:

  

[警告]我的POM:my-impl:jar:1.1.0.0无效,传递   依赖项(如果有)将不可用,启用调试日志记录   更多细节

POM如下:

打包程序:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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>mine</groupId>
    <artifactId>my-webapp-packager</artifactId>
    <version>${product.version}</version>
    <packaging>pom</packaging>
    <name>Webapp Packager</name>
    <description>Webapp Packager</description>
    <modules>
        <module>my-webapp</module>
        <module>my-api</module>
        <module>my-impl</module>
    </modules>
</project>

的webapp:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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>
        <groupId>mine</groupId>
        <artifactId>my-webapp-packager</artifactId>
        <version>${product.version}</version>
    </parent>
    <artifactId>my-webapp</artifactId>
    <packaging>war</packaging>
    <name>Webapp</name>
    <description>Webapp</description>
    <dependencies>
        <dependency>
            <groupId>mine</groupId>
            <artifactId>my-impl</artifactId>
            <version>${product.version}</version>
        </dependency>
    </dependencies>
</project>

API:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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>
        <groupId>mine</groupId>
        <artifactId>my-webapp-packager</artifactId>
        <version>${product.version}</version>
    </parent>
    <artifactId>my-api</artifactId>
    <packaging>jar</packaging>
    <name>API</name>
    <description>API</description>
</project>

实现:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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>
        <groupId>mine</groupId>
        <artifactId>my-webapp-packager</artifactId>
        <version>${product.version}</version>
    </parent>
    <artifactId>my-impl</artifactId>
    <packaging>jar</packaging>
    <name>Impl</name>
    <description>Impl</description>
    <dependencies>
        <dependency>
            <groupId>mine</groupId>
            <artifactId>my-api</artifactId>
            <version>${product.version}</version>
        </dependency>
    </dependencies>
</project>

1 个答案:

答案 0 :(得分:1)

正如您现在所拥有的那样,您的“打包器”POM既是聚合器(因为它有模块)又是父节点(因为所有模块都在其<parent>元素中引用它)。因此,“打包器”POM 必须具有显式版本,您不能使用$ {project.version}占位符。

<project xmlns="http://maven.apache.org/POM/4.0.0"     
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         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>mine</groupId>
    <artifactId>my-webapp-packager</artifactId>
    <version>0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>Webapp Packager</name>
    <description>Webapp Packager</description>
    <modules>
        <module>my-webapp</module>
        <module>my-api</module>
        <module>my-impl</module>
    </modules>
</project>

在子模块中,<parent>元素将如下所示:

<parent>
    <groupId>mine</groupId>
    <artifactId>my-webapp-packager</artifactId>
    <version>0.1-SNAPSHOT</version>
</parent>

然后,mvn clean install应该有用。

相关问题