项目多项选择中的父项目管理和依赖项管理
问题描述:
我有一个多项目maven项目。 在我的pom根目录中,我有一个父类pom和依赖关系管理,具有弹簧依赖关系。项目多项选择中的父项目管理和依赖项管理
<?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>com.company.project</groupId>
<artifactId>artifactId</artifactId>
<version>${project-version}</version>
<packaging>pom</packaging>
<!-- Parent Pom -->
<parent>
<groupId>com.company.project</groupId>
<artifactId>parent_pom</artifactId>
<version>1.0.0</version>
</parent>
<modules>
<module>artifactId-war</module>
</modules>
<properties>
<project-version>1.0.0</project-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.3.3.RELEASE</spring.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>${spring.version}</version>
<type>pom</type> -->
<scope>import</scope>
</dependency>
....
在我的artifactId战,我有这样的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>
<groupId>com.company.project</groupId>
<artifactId>artifactId-war</artifactId>
<packaging>war</packaging>
<parent>
<groupId>com.company.project</groupId>
<artifactId>artifactId</artifactId>
<version>${project-version}</version>
</parent>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
...
我的问题是,在父POM有一个春天的旧版本(4.1.8),并在我的根我使用4.3.3版本的神器spring-framework-bom。 在我的依赖列表中,proyect显示parent_pom版本。我如何优先考虑我的pom根的依赖关系?
答
你可以在artifactId-war pom中声明正确的弹簧依赖。 Maven通过最短路径赢家规则解决冲突。
如果您只想通过父pom进行全局控制,您可以在父项中定义一个属性,但是您仍然必须在您的artifactId-war pom中声明一个依赖项。
答
你的artifactId-war的pom.xml有一个错误。 在<parent>
标记中,<groupId>
应该是com.company.project
而不是com.company.project.artifactId
。
有了这个,你不必在artifactId-war的pom.xml中特别提及spring jar版本(正如其他答案所建议的那样)。它将继承artifactId的pom.xml中的版本。
维护父pom的依赖版本始终是一种很好的做法,而不是在子pom级别维护版本。你的孩子pom应该只包含你想要的依赖关系的groupId和artifactId。它的版本将由父pom处理。
我已经有这个,不是吗? parent_pom有4.1.8版本,在root pom中我有de-artifact spring-framework-bom 4.3.3版本。为什么我的pom战争中没有4.3.3版本? – oscar
请勿使用依赖关系管理。直接在指定版本的arifactId-war pom中声明它。 – Sefler