Spring Boot - zaten bir ebeveyn pom olduğunda ebeveyn pom


184

Spring-boot ebeveyn pomunun gerekli bir ebeveyn POM'sine sahip projelere dahil edilmesine yönelik belirli bir önerilen yaklaşım var mı?

Bir örgütsel ebeveynden genişletilmesi gereken projeler için ne önerirsiniz (bu son derece yaygındır ve hatta geldikleri besleyici depolarına bağlı olarak Maven merkezi'nde yayınlanan birçok / çoğu proje bile). Yapı malzemelerinin çoğu yürütülebilir JAR'lar oluşturmakla ilgilidir (örneğin gömülü Tomcat / Jetty'yi çalıştırmak). Bazı bağımlılıkları bir ebeveynden (kompozisyona ve mirasa benzer) genişletmeden alabilmeniz için bir şeyler yapılandırmanın yolları vardır. Yine de böyle bir yapı elde edemezsiniz.

Bu nedenle, yay önyükleme ana pompasının tümünü gerekli ana POM'nin içine dahil etmek veya sadece proje POM dosyası içinde bir POM bağımlılığına sahip olmak tercih edilir.

Diğer seçenekler?

TIA,

Scott

Yanıtlar:


179

Spring-boot-starter-parent'i "bom" (cf Spring ve Jersey şimdi bu özelliği destekleyen diğer projeler) gibi kullanabilir ve yalnızca scope = import ile bağımlılık yönetimi bölümüne dahil edebilirsiniz. gerçek ebeveyninizdeki ayarları değiştirmeden kullanmanın (yani bağımlılık yönetimi) faydaları.

Yaptığı diğer 2 ana şey

  1. geçersiz kılmak istediğiniz bağımlılık sürümlerini hızlı bir şekilde ayarlamak için bir özellik yükü tanımlayın
  2. bazı eklentileri varsayılan yapılandırmayla yapılandırın (temelde Spring Boot maven eklentisi). Kendi ebeveyninizi kullanırsanız bunlar manuel olarak yapmanız gerekenlerdir.

Spring Boot belgelerinde verilen örnek :

<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
Gölge vb bu eklentileri çeker tahmin ediyorum?
chrislovecnm

3
Hayır. Bağlantıyı okuyun: "bağımlılık yönetiminden faydalanmaya devam edebilirsiniz (ancak eklenti yönetiminden değil).
Dave Syer

1
@DaveSyer netleştirmek edin: 1: Benim özel olduğunda project-parentben eklemek olabilir spring-boot-starter-parentbuna project-parent- Tamam mı? spring-boot-dependenciesBöyle bir durumda da ihtiyacım var mı? 2: Normal önyükleme projesi Yay önyükleme: çalıştır kullanarak çalıştırıyorum. Farklı ebeveyn pom ile proje nasıl çalıştırılır?
jsosnowski

1
Yukarıdaki kod snippet'i bağımlılık yönetimi özelliklerini elde etmek için yeterlidir. Eklentiler (gibi spring-boot:run) istiyorsanız, bunları ayrı ayrı karıştırmanız gerekir. İsterseniz Boot üst öğesinden yapıştırma kopyalayabilirsiniz.
Dave Syer

3
Eski bir konu olduğunu biliyorum ama bana çok yardımcı oldu, teşekkürler. Bu mekanizma hakkında maven.apache.org/guides/introduction/… kaynağından okumaya son verdim . Çok açıklıyor.
bazeusz

42

2018-01-04'ü 1.5.9 ile güncelleyin.

Burada tam kod ve çalıştırılabilir örnek var https://www.surasint.com/spring-boot-with-no-parent-example/

Buna temel olarak ihtiyacınız var

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

Ancak bu yeterli değildir, ayrıca spring-boot-maven-plugin için hedefi açıkça tanımlamanız gerekir (Spring Boot'u üst öğe olarak kullanırsanız, bunu açıkça tanımlamanız gerekmez)

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

Aksi takdirde yürütülebilir kavanoz veya savaş olarak inşa edemezsiniz.

Henüz değil, JSP kullanıyorsanız, aşağıdakilere sahip olmanız gerekir:

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

Aksi takdirde, şu hata iletisini alırsınız:

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

HAYIR HAYIR, "$ {}" yerine "@" ile Spring Boot ile Maven Profili ve Kaynak Filtresi kullanıyorsanız bu hala yeterli değildir (bu örnek gibi https://www.surasint.com/spring-boot-maven -kaynak-filtre / ). Sonra bunu açıkça

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

Ve bu da

        <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/ bağlantısındaki örneğe bakın .


@Arvind bir uyarı, benim örneğim 1.5.9. Bu sürümde ciddi bir güvenlik sorunu düzeltildiğinden 1.5.11 (dün yayınlanacak) kullanmalısınız.
Surasin Tancharoen

blogunuzda belirtildiği gibi, maven-resources-plugin'i eklemeye çalıştım, ama yine de bana "ana manifest özelliği yok, hedefte" veriyor. Spring-boot çalıştırmayı denedim: koş, bu da çalışmıyor :(
sagar27

@ sagar27 1.5.X veya 2.x'i hangi sürümü kullanıyorsunuz? 2.x ise, daha fazla şeye ihtiyacı olabilir.
Surasin Tancharoen

Teşekkür ederim !! Hayatımı kurtardın
Jey Atiwat

0

Surasin Tancharoen'in cevabına göre, maven güzelliğinde eklentisini de tanımlamak isteyebilirsiniz

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

ve muhtemelen hızlı bir eklenti içerir

    <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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.