春のブート-親ポンを既に持っている場合の親ポン


184

既に必要な親POMを持っているプロジェクトにスプリングブート親pomを含めるための特定の推奨されるアプローチはありますか?

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

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

別のオプション?

TIA、

スコット

回答:


179

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

それが行う他の2つの主なことは

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

Spring Bootドキュメントで提供されている例:

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

1
これはプラグインを取り込むと思います-シェードなど?
chrislovecnm、2015年

3
いいえ。「プラグイン管理ではなく、依存関係管理のメリットを維持できる」というリンクを読んでください。
Dave Syer、2015年

1
@DaveSyer明確にしてください:1:カスタムproject-parentを追加spring-boot-starter-parentしたら、これに追加できますproject-parent-大丈夫ですか?spring-boot-dependenciesこのような状況でも必要ですか?2:通常のspring-bootプロジェクトは、spring-boot:runを使用して実行します。異なる親pomでプロジェクトを実行する方法は?
jsosnowski

1
上記のコードスニペットは、依存関係管理機能を取得するのに十分です。プラグイン(などspring-boot:run)が必要な場合は、それらを個別に紛らわしくする必要があります。必要に応じて、Bootの親からコピーして貼り付けることができます。
Dave Syer、2015

3
私はそれが古いスレッドであることを知っていますが、それは私に大いに役立ちました、ありがとう。このメカニズムについてソースmaven.apache.org/guides/introduction/…で読んでしまいました。それはたくさん説明します。
bazeusz 2016年

42

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]

いいえいいえ、「$ {}」の代わりに「@」を使用して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/の例を参照してください


@Arvind警告、私の例は1.5.9です。このバージョンでは深刻なセキュリティ問題が修正されているため、1.5.11(昨日リリース)を使用する必要があります。
Surasin Tancharoen

あなたのブログで述べたように、私はmaven-resources-pluginを追加しようとしましたが、それでも「メインのマニフェスト属性がなく、ターゲットに」あります。私はspring-boot:runを実行してみましたが、これも機能しません:(
sagar27

@ sagar27 1.5.Xまたは2.xのどのバージョンを使用していますか?2.xの場合、さらに多くのものが必要になる可能性があります。
Surasin Tancharoen

ありがとうございました !!あなたは私の命を救った
Jey Atiwat

0

Surasin Tancharoenの回答に従って、maven surefireプラグインを定義することもできます

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>${maven-surefire-plugin.version}</version>
        </plugin>

おそらくフェイルファストプラグインを含める

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>${maven-failsafe-plugin.version}</version>
        <executions>
            <execution>
                <goals>
                    <goal>integration-test</goal>
                    <goal>verify</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.