2017-07-04 31 views
0

我們正在使用彈簧引導起動碼頭在我們的Maven POM文件,這意味着我們沒有做任何碼頭直接依賴關係,因此它的版本沒有控制。彈簧引導起動碼頭和碼頭模塊 - Maven的魔力

這一切工作不錯,但我們現在需要添加的碼頭的模塊,使用相同版本的碼頭約定的依賴onone。

這是所有偉大和花花公子,而是因爲我們不能使用彈簧引導起動碼頭作爲我們的根POM,我們該模塊的依賴性聲明中下再次宣佈Jetty的版本,像這樣:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-jetty</artifactId> 
    <version>1.4.3-RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>jetty-nosql</artifactId> 
    <version>9.3.14.v20161028</version> 
</dependency> 

這是沒有樂趣PLUS危險的,因爲如果我們升級其中之一,我們要記得後者升級到相同的版本。

我知道我們可以添加模塊的依賴下一個排除,但這種感覺就像一個黑客加上仍然沒有充分保護我們免受重大更改。

反正有從春天啓動提取碼頭版本重複使用該模塊的依賴?

謝謝!

回答

0

Maven創建這個版本屬性,它在effective POM依賴性。對於碼頭是jetty.version

所以你的依賴將成爲

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jetty</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-nosql</artifactId> 
     <version>${jetty.version}</version> 
    </dependency> 

這裏的完整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>TestDependency</groupId> 
    <artifactId>TestDependency</artifactId> 
    <version>1.0.0</version> 
    <packaging>jar</packaging> 

    <name>TestDependency</name> 
    <description>TestDependency</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.3.RELEASE</version> 
     <relativePath /> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jetty</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-nosql</artifactId> 
      <version>${jetty.version}</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 


</project> 

值得指出的是,這不是必需的與Spring Boot最新版本。我檢查了1.5.4.RELEASE。以下是足夠的。

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jetty</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-nosql</artifactId> 
    </dependency> 

完整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>TestDependency</groupId> 
    <artifactId>TestDependency</artifactId> 
    <version>1.0.0</version> 
    <packaging>jar</packaging> 

    <name>TestDependency</name> 
    <description>TestDependency</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.5.4.RELEASE</version> 
     <relativePath /> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jetty</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-nosql</artifactId> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 


</project> 

有效POM可以使用下面的命令來產生

mvn help:effective-pom 

或者,如果你使用Spring Tool Suite或者Eclipse的最新版本,那麼你可以直接檢查它在Maven POM Editor

底部的標籤內

enter image description here

編輯

沒有spring-boot父POM可以使用dependencyManagement

下面是完整的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>TestDependency</groupId> 
    <artifactId>TestDependency</artifactId> 
    <version>1.0.0</version> 
    <packaging>jar</packaging> 

    <name>TestDependency</name> 
    <description>TestDependency</description> 

    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-parent</artifactId> 
       <version>1.4.3.RELEASE</version> 
       <type>pom</type> 
       <scope>import</scope> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jetty</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-nosql</artifactId> 
      <version>${jetty.version}</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 


</project> 
+0

感謝您的回答,但是我們不能使用spring-boot-starter作爲我們的父母 – sternr

+0

爲什麼不呢?你使用另一個家長還是'dependencyManagement'? – 11thdimension

+0

添加了沒有父項的配置。 – 11thdimension