我购买了'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依赖项添加版本属性,因为它应该从父项目继承该版本。但由于某种原因,它没有。
当我在该项目上运行mvn compile时,我得到一个错误,即缺少dependencies.dependency.version属性。
任何想法我做错了什么?如何解决我不需要在子项目中指定版本的问题?
谢谢!
<dependencyManagement>
周围的属性<dependencies>
。一旦我添加了该属性,我就不需要在子项目中提供版本号。
彼得答案显示了实现这一目标的另一种方法。
感谢一切!
幼狮
答案 0 :(得分:3)
您从父pom(s)的dependencyManagement部分继承了依赖项的版本,并有选择地将这些版本包含在子pom中。
在您的情况下,您不需要再次提及依赖项,因为它已包含在父项中。 (和JUnit一样)
BTW:我使用的是JUnit 4.10,我没有发现任何向后兼容性问题。