2013-12-22 47 views
31

我喜欢在maven中配置我的应用程序,使用spring-boot的Maven模块

<groupId>com.app</groupId> 
<artifactId>example-app</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>pom</packaging> 

<modules> 
    <module>app-api</module> 
    <module>app-impl</module> 
    <module>app-web</module> 
</modules> 

然后模块使用'example-app'作为父项。

现在我想为我的web应用程序使用'spring-boot'。

有没有办法配置maven,以便我的'app-web'是一个spring-boot应用程序?

我面临的问题是你必须使用spring-boot作为父项。

回答

54

您不必使用spring-boot-starter-parent,它只是快速入门的一种方式。它提供的只是依赖管理和插件管理。你可以自己做,也可以使用spring-boot-dependencies(或等价的父项)来管理依赖关系,如果你想要中途一步。要做到这一点,使用scope=import这样

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-dependencies</artifactId> 
      <type>pom</type> 
      <version>1.0.2.RELEASE</version> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
+0

非常感谢 – heldt

+2

轻微编辑 - 您需要在下面添加一个元素,否则它对我也有效。 – hoserdude

+0

更新回答,谢谢。 –

9

另一种替代方法,是在父POM,为弹簧引导父声明为包括如本post

示例应用内的pom.xml:

<project> 
    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.2.5.RELEASE</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    // rest of the example-app pom declarations 
</project> 

之后,在模块POMS(应用程序的Web,应用程序,实现了一套,等等),你声明例如,应用程序作为父母,但现在你可以包括启动依赖,你通常会在常规做项目。

应用程序的Web的pom.xml:

<project> 
    <parent> 
     <groupId>org.demo</groupId> 
     <artifactId>example-app</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <name>app-web</name> 
    <artifactId>app-web</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <dependencies> 
     <dependency> 
      <groupId>org.demo</groupId> 
      <artifactId>app-api</artifactId> 
      <version>1.0-SNAPSHOT</version> 
     </dependency> 
     <dependency> 
      <groupId>org.demo</groupId> 
      <artifactId>app-impl</artifactId> 
      <version>1.0-SNAPSHOT</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 
    // rest of the app-web pom declarations 
</project> 

关于版本管理,我在这些例子中使用不完全的最佳实践,但由于超出我跳过dependencyManagement问题的范围和父属性使用情况。

此外,如果存在被每个模块中使用的启动器,则可以声明依赖于父POM,然后所有的模块将继承它(例如弹簧引导起动测试