2017-02-17 5 views
3

したがって、私は春のブートWebアプリケーションを構築し、戦争としてパッケージ化し、Tomcatアプリケーションサーバーにデプロイします。有効なバネプロファイルに基づいて提供されるMaven依存関係を作成する

私は、Tomcatのための私のpom.xmlに以下の依存関係を持っている:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
    <scope>provided</scope> 
</dependency> 

この依存性の範囲は、Tomcatのインスタンスにデプロイすることができるようにするために提供される必要があります。しかし、私がSpringブートCLIまたはIntelliJのデフォルトのスプリングブート実行コンフィギュレーション経由で戦争を実行したいときは、埋め込みのTomcatを実行するために<scope>provided</scope>を削除する必要があります。

私の質問は、アクティブなスプリングプロファイルやその他の方法に基づいて条件付きで依存関係を設定する方法はありますか?

+0

私は、私も内に含まれる組み込みのTomcatで、Tomcatに私の戦争を展開できた(約3ヶ月前)しようとした最後の時間それ。それは正常に働いた。戦争はそれよりもやや大きかった!そのアプローチが最新バージョンのSpring-Bootでもまだ機能しているかどうか不明です。 –

+2

Do not ... No Really do not ...提供されているままにしておき、Intellij内からアプリケーションを実行するには、maven spring bootタスクを使用します。また、戦争を実行しているときには、バネのパッケージが別のディレクトリにある依存関係を持っていて、それでもまだSpringブートによってスキャンされているので、問題はありません。 –

+0

@ M.Deinumあなたは答えとして投稿するべきです - それは私のために働く –

答えて

2

バネプロファイルを使用して依存関係を制御することはできません。しかし、あなたはMavenプロファイルで春のプロファイルを制御することができ、それはあなたの問題を解決することができます。

アプリケーションでいくつかのMavenプロファイルを宣言し、それぞれに異なる依存関係のセットを提供できます。 次に、特定のスプリングプロファイルを使用するようにMavenプロファイルを設定できます。 あなたの特定のケースで見on maven profilesと、このような構成の一例in this thread

1

を取り、あなただけ行うことができます:依存関係で 組み込みTomcatで春ブートを実行する:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
</dependency> 

とプロファイルで特定のプロファイルのために

を構築するために、後

Tomcatの下
<profile> 
    <id>tomcat</id> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 
</profile> 

を展開します

0

これは、瓶や戦争のパッケージの両方で動作するソリューションです。

のpom.xml

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

    <modelVersion>4.0.0</modelVersion> 
    <artifactId>...</artifactId> 
    <groupId>...</groupId> 
    <version>0-SNAPSHOT</version> 
    <packaging>${packaging.type}</packaging> 
    ... 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
     <start-class>...</start-class> 
     <packaging.type>jar</packaging.type> 
    ... 
    </properties> 
    <dependencies> 
     <dependency> 
      <!-- Brings in Embedded Tomcat dependencies --> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
... 
    </dependencies> 

    <profiles> 
     <profile> 
      <id>tomcat-war</id> 
      <properties> 
       <packaging.type>war</packaging.type> 
      </properties> 
      <dependencies> 
       <dependency> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-tomcat</artifactId> 
        <scope>provided</scope> 
       </dependency> 
      </dependencies> 
    ... 
    </profiles> 

    <build> 
      <finalName>${project.artifactId}</finalName> 
      <plugins> 
       <plugin> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-maven-plugin</artifactId> 
        <executions> 
         <execution> 
          <goals> 
           <goal>repackage</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
    ... 

jarファイルとしてビルドアーティファクト:

mvn clean package 

ビルド成果物として、戦争:

mvn clean package -Ptomcat-war 

メインクラスは、それは、のpom.xml<start-class>に行く:

package ... 

public class Application extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 
     return builder.sources(Application.class); 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
} 
関連する問題