我有一个多元素maven proyect。 在我的pom root中,我有一个父pom和带有spring依赖的DependencyManagement。
<?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-war中,我有这个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中有一个Spring旧版本(4.1.8),在我的根pom中我使用了4.3.3版本的工件spring-framework-bom。 在我的依赖列表中,proyect出现了parent_pom版本。我如何优先考虑我的pom root的依赖?
答案 0 :(得分:0)
您可以在artifactId-war pom中声明正确的spring依赖项。 Maven通过最短路径获胜者规则解决冲突。
如果您只想通过父pom进行整体控制,可以在父级中定义属性,但仍需要在artifactId-war pom中声明依赖项。
答案 1 :(得分:0)
你的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处理。