gpt4 book ai didi

java - 子模块的maven版本依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-02 00:16:45 24 4
gpt4 key购买 nike

我购买了“Apache Maven 3 Cookbook”,我正在尝试学习如何向我的 Maven 项目添加依赖项。

我的主要项目pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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>net.srirangan.packt.maven</groupId>
<artifactId>TestModularApp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

<name>TestModularApp</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.2</version>
</dependency>
</dependencies>
<modules>
<module>ChildProject</module>
<module>MyWebApp</module>
</modules>
</project>

正如您在这里看到的,该项目中的打包设置为“pom”,因为这是父项目..(这就是我所知道的:))

然后我使用以下 pom.xml 创建了一个子项目:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>net.srirangan.packt.maven</groupId>
<artifactId>TestModularApp</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.xpogames.childproject</groupId>
<artifactId>ChildProject</artifactId>
<version>1.0-SNAPSHOT</version>
<name>ChildProject</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</project>

正如您在这里看到的,我没有向 mysql-connect-java 依赖项添加版本属性,因为它应该从父项目继承版本。但由于某种原因,事实并非如此。

当我在该项目上运行 mvncompile 时,我收到一条错误,提示 dependency.dependency.version 属性丢失。

你知道我做错了什么吗?如何解决我不需要在子项目中指定版本的问题?

谢谢!

更新

观看 Peter Lawrey 的回答并观看他提供的网址上的示例后我注意到我的主 XML 缺少属性 <dependencyManagement>周围<dependencies> 。添加该属性后,我不需要在子项目中提供版本号。

彼得的回答展示了实现这一目标的另一种方法。

谢谢你所做的一切!

幼狮

最佳答案

您从dependencyManagement中的依赖项继承版本。父 pom 的部分,并有选择地将它们包含在子 pom 中。

在您的情况下,您不需要再次提及依赖项,因为它已经从父项中包含了。 (对于 JUnit 来说也是如此)

顺便说一句:我使用 JUnit 4.10,我没有发现任何向后兼容性问题。

关于java - 子模块的maven版本依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11773997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com