web-dev-qa-db-ja.com

Spring Boot-既に親ポンがある場合の親ポン

必須の親POMが既に存在するプロジェクトにスプリングブートの親POMを含めるための具体的な推奨アプローチはありますか?

組織の親から拡張する必要があるプロジェクトに推奨するものは何ですか(これは非常に一般的で、多くの/ほとんどのプロジェクトが、元のフィーダーリポジトリに応じてMavenセントラルに公開されます)。ビルドの大部分は、実行可能なJARの作成に関連しています(たとえば、埋め込みTomcat/Jettyの実行)。親から拡張せずにすべての依存関係を取得できるように物事を構造化する方法があります(構成と継承に似ています)。ただし、そのようなビルドを取得することはできません。

そのため、必要な親POM内にすべてのスプリングブート親pomを含めるか、プロジェクトPOMファイル内に単純にPOM依存関係を持たせることが望ましいでしょう。

別のオプション?

TIA、

スコット

152
Scott C.

「bom」のようにspring-boot-starter-parentを使用できます(cf Spring およびJerseyをサポートする他のプロジェクトこの機能は今)、scope = importを使用して依存関係管理セクションにのみ含めます。このようにすると、実際の親の設定を置き換えることなく、この機能を使用することで多くの利点が得られます(依存関係管理)。

その他の主な2つのことは

  1. オーバーライドする依存関係のバージョンをすばやく設定するためのプロパティのロードを定義する
  2. いくつかのプラグインをデフォルト設定で構成します(主にSpring Boot mavenプラグイン)。したがって、これらはあなたがあなた自身の親を使用する場合に手動でしなければならないことです。

Spring Boot documentation で提供されている例:

<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
156
Dave Syer

2018-01-04を1.5.9.RELEASEに更新します。

私はここに完全なコードと実行可能な例を持っています https://www.surasint.com/spring-boot-with-no-parent-example/

これは基本として必要です

   <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${springframework.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

しかし、それだけでは不十分です。また、spring-boot-maven-pluginの目標を明示的に定義する必要があります(Spring Bootを親として使用する場合、これを明示的に定義する必要はありません)

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

そうしないと、実行可能jarまたはwarとしてビルドできません。

まだ、JSPを使用している場合は、これが必要です。

<properties>    
  <failOnMissingWebXml>false</failOnMissingWebXml>
</properties>

そうしないと、次のエラーメッセージが表示されます。

    [ERROR] Failed to execute goal org.Apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project spring-boot-09: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executi
ng in update mode) -> [Help 1]

NO NO、「$ {}」の代わりに「@」を使用してSpring BootでMavenプロファイルとリソースフィルターを使用している場合、これはまだ十分ではありません(この例のように https://www.surasint.com/spring -boot-maven-resource-filter / )。次に、これを明示的に追加する必要があります

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>

そしてこれは

        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.7</version>
            <configuration>
                <delimiters>
                    <delimiter>@</delimiter>
                </delimiters>
                <useDefaultDelimiters>false</useDefaultDelimiters>
            </configuration>
        </plugin>

リンクの例を参照してください https://www.surasint.com/spring-boot-with-no-parent-example/

31