2017-07-04 30 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