2017-06-09 18 views
0

私はSpringブートでJavaのマイクロサービスでエクササイズをしようとしています。これは2つの独立したファイル(.war)のようにTomcatにそれらを配備するという目的で異なるプロジェクトで2つのWebサービスを開発しています。spring-boot-maven-pluginを依存関係なくコンパイルするには?

私は、指定されたフォルダに依存関係を設定して他のサービスと共有し、すべてのサービスで同じライブラリを増やさないようにする方法について読んでいます。

私がartifact spring-boot-maven-pluginを通してmavenでサービスをコンパイルすると、.warファイルは常に内部に依存関係があります。私が知りたいのは、誰かがmavenを に設定する方法を知っていれば、Springブートの.warファイルから依存関係を取り除くことです。

.warは内部の依存関係に従います。編集: マイケル・ポッターと実行のような提供を追加しました。それはうまく動作します。私のpom.xmlは以下です:

<?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>com.example</groupId> 
    <artifactId>demo</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <name>demo1</name> 
    <description>Demo project for Spring Boot</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.5.4.RELEASE</version> 
     <relativePath/> 
    </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-web</artifactId> 
       <scope>provided</scope> 
     </dependency> 

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

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
       <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
        <configuration> 
         <skip>true</skip> 
        </configuration> 
       </execution> 
      </executions> 
      </plugin> 
     </plugins> 
    </build> 


</project> 

答えて

0

Mavenのためにあなたがにはを提供して範囲を指定する必要があなたのWARファイルに依存関係を含みません。公式Mavenのドキュメントからの範囲の記載:

これは、コンパイルのような多くのですが、JDKまたは コンテナは、実行時に依存関係を提供することを期待を示しています。たとえば、 Java Enterprise Edition用のWebアプリケーションを構築する場合、 は、Webコンテナがこれらのクラスを提供するため、Servlet APIおよび関連するJava EE APIへの依存関係を スコープに設定します。この スコープは、コンパイルおよびテストのクラスパスでのみ使用でき、 は推移しません。

<dependency> 
    <groupId>com.h2database</groupId> 
    <artifactId>h2</artifactId> 
    <version>1.4.192</version> 
    <scope>provided</scope> 
</dependency> 

依存性は、ソースをコンパイルするためにダウンロードされますが、WARに詰めていません。

spring-boot-maven-pluginについてです。デフォルトでは、コンソールからコンソールを起動できるWARの再パッケージ化を行います。したがって、が提供されたスコープであっても、必要なすべての依存関係をアーカイブにパッケージ化します。ターゲットディレクトリには、{project-name} .warの2つのファイルが再パッケージ化されています。{project-name} .war.original - 提供されるべきではない依存関係があります。次へ春・ブートのmaven-pluginの設定を変更する必要があります再パッケージ無効にするには:

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <goals> 
       <goal>repackage</goal> 
      </goals> 
      <configuration> 
       <skip>true</skip> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

は、その後、あなたは、Tomcatを/ libにフォルダTomcatに必要な依存関係を配置し、再起動する必要があります。

+0

こんにちは。助けてくれてありがとう、それは春のブートでは動作しません。私は原因を知らない。 –

+0

質問を編集しましたが、pom.xmlを追加しましたが、それは私の解決策ではありません。 –

+0

spring-boot-starter-testのようなテストの依存関係のテストスコープは、そのスコープの依存関係がWARにパックされていないので、残しておく必要があります。 –

関連する問題