2013-12-22 28 views
31

Ich mag meine Anwendungen in Maven durch Erstellen von Modulen wie konfigurieren;Maven-Modul mit Spring-Boot

<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> 

Die Module verwenden dann die 'Beispiel-App' als übergeordnetes Element.

Jetzt möchte ich 'Spring-Boot' für meine Webanwendung verwenden.

Gibt es eine Möglichkeit, Maven so zu konfigurieren, dass mein 'app-web' eine Spring-Boot-Anwendung ist?

Das Problem, mit dem ich konfrontiert bin, ist, dass Sie Spring-Boot als Eltern verwenden müssen.

Antwort

54

Sie müssen nicht die Spring-Boot-Starter-Eltern verwenden, es ist nur eine Möglichkeit, um schnell loszulegen. Alles, was es bietet, sind Abhängigkeitsverwaltung und Plugin-Verwaltung. Sie können beides selbst tun, und Sie können die Spring-Boot-Abhängigkeiten (oder äquivalent die Eltern) verwenden, um Abhängigkeiten zu verwalten, wenn Sie einen Zwischenschritt wollen. Um dies zu tun, verwenden Sie scope=import wie diese

<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

Danke funktioniert gut – heldt

+2

leichte Bearbeitung - Sie müssen ein -Element unter hinzufügen, sonst scheint es auch für mich arbeiten. – hoserdude

+0

Aktualisierte Antwort, danke. –

9

Eine weitere Alternative ist enthalten in der übergeordneten Pom, die Mutter Erklärung für das Frühjahr Boot, wie in diesem

Beispiel-App pom.xml post gezeigt:

<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> 

Danach werden in den Modulen poms (app-Web, App-impl, etc.), erklären Sie Beispiel-App als Eltern, aber jetzt können Sie die Starter-Abhängigkeiten enthalten, wie Sie normalerweise in einem normalen tun würde Projekt.

App-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> 

In Bezug auf die Versionsverwaltung, was ich in diesen Beispielen verwendet werden, sind nicht gerade die besten Praktiken, aber da ich dependencyManagement ausgelassen aus dem Umfang der Frage ist, und Verwendung der übergeordneten Eigenschaften

Auch, wenn ein Starter ist, die in jedem Modul verwendet wird, können Sie die Abhängigkeit in der Mutter pom deklarieren und dann alle Module wird es erben (zB Feder-boot-Starter-Test)