【发布时间】:2013-06-10 02:15:12
【问题描述】:
我有一个网络应用程序,它提供了我编写的 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。但它只引入了 my-impl。
我在这里做错了什么?还是预计不会以这种方式工作?
更新:如果这有帮助,我会不断收到此警告:
[WARN] mine:my-impl:jar:1.1.0.0 的 POM 无效,可传递 依赖项(如果有)将不可用,启用调试日志记录 更多详情
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>
Web 应用程序:
<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>
【问题讨论】:
-
请显示 pom 文件。
-
@khmarbaise 请检查我的更新。
-
根据给定的警告,我会假设您的 pom 中有错误的版本?我希望您不要尝试在您的父条目中使用
${project.version}吗?您使用的是什么发布版本而不是 SNAPSHOT?最好是拥有导致警告的模块的真实 pom 文件。 -
@khmarbaise 使用名为
project.version的已定义属性有什么问题?我还能如何集中产品组件的版本? -
这不会像你那样在 Maven 中工作吗?我只是在谈论像这样使用占位符
<version>${product.version}</version>。你是如何调用你的 Maven 构建的?除此之外,如果这可能的话,您的构建如何以任何方式重现。如果您使用 maven-release-plugin 最佳选择,或者有时使用 versions-maven-plugin 来帮助处理父级等中的版本号。
标签: maven maven-2 dependencies packaging