我有一个网络应用程序,它提供了我编写的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>
答案 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
应该有用。