2016-09-28 143 views
0

我有一个多项目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根的依赖关系?

回答

0

你可以在artifactId-war pom中声明正确的弹簧依赖。 Maven通过最短路径赢家规则解决冲突。

如果您只想通过父pom进行全局控制,您可以在父项中定义一个属性,但是您仍然必须在您的artifactId-war pom中声明一个依赖项。

+0

我已经有这个,不是吗? parent_pom有4.1.8版本,在root pom中我有de-artifact spring-framework-bom 4.3.3版本。为什么我的pom战争中没有4.3.3版本? – oscar

+1

请勿使用依赖关系管理。直接在指定版本的arifactId-war pom中声明它。 – Sefler

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处理。

+0

这是一个错误的例子,抱歉。 – oscar

+0

当你说这是一个错误的例子时,你是什么意思? –

+0

问题的代码。我的实际代码就像你说的那样。我编辑了这个问题。抱歉。 – oscar