Spring Boot - батьківська пом, коли у вас вже є батьківська пом


184

Чи існує конкретний рекомендований підхід до включення джерела завантаження джерела завантаження у проекти, які вже мають необхідний батьківський POM?

Що ви рекомендуєте для проектів, які потребують від організаційних батьків (це надзвичайно часто і навіть щось багато / більшість проектів опубліковано в Maven central, залежно від репортажів, які вони надходять). Більшість матеріалів збирання пов'язані зі створенням виконуваних JAR (наприклад, запуск вбудованих Tomcat / Jetty). Існують способи структурувати речі так, щоб ви могли отримати всі залежності, не виходячи з батьківського (подібний до складу проти успадкування). Ти не можеш так скласти речі для побудови.

Отже, бажано включити весь батьківський джерело завантаження пружини до потрібного батьківського POM або просто мати залежність POM у файлі POM проекту.

Інші варіанти?

TIA,

Скотт

Відповіді:


179

Ви можете використовувати джерело-початковий джерело завантаження, як "bom" (пор. Spring та Jersey інші проекти, які підтримують цю функцію зараз), і включити її лише в розділ управління залежностями з областью застосування = import. Таким чином, ви отримаєте багато переваг його використання (тобто управління залежностями) без заміни налаштувань фактичного батька.

Дві основні інші речі, які вона робить

  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

3
Ні. Прочитайте посилання: "Ви все одно можете зберігати перевагу управління залежністю (але не управління плагінами)".
Дейв Сайер

1
@DaveSyer Будь ласка, уточніть: 1: Коли у мене є власний звичай, project-parentя можу додати spring-boot-starter-parentдо цього project-parent- це нормально? Чи мені теж потрібно spring-boot-dependenciesв такій ситуації? 2: Нормальний проект Spring-boot, який я запускаю, використовуючи spring-boot: run. Як запустити проект з різними батьками пом?
jsosnowski

1
Вищенаведений фрагмент коду достатній для отримання функцій управління залежністю. Якщо ви хочете плагіни (наприклад spring-boot:run), вам потрібно переплутати їх окремо. Ви можете скопіювати пасту з батьківського завантажувача, якщо хочете.
Дейв Сайер

3
Я знаю, що це стара нитка, але вона мені дуже допомогла, дякую. Я прочитав про цей механізм у джерелі maven.apache.org/guides/introduction/… . Це багато пояснює.
bazeusz

42

Оновлення 2018-01-04 з 1.5.9. РЕЛІЗ.

У мене є повний код і примірний приклад тут 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>

Інакше ви не можете побудувати як виконувану банку або війну.

Ще немає, якщо ви використовуєте 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]

НІ НІ, цього все одно недостатньо, якщо ви використовуєте фільтр профілю та ресурсу 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, але все-таки він дає мені "ніякого головного атрибута маніфесту в цілі". Я спробував запустити весняний завантаження: запустити, це теж не працює :(
sagar27

@ sagar27 Яку версію ви використовуєте 1.5.X чи 2.x? якщо це 2.x, може знадобитися більше речі.
Сурасін Танчарун

Дякую !! Ти врятував мені життя
Джей Атіват

0

Відповідно до відповіді Сурасіна Танчароана, ви також можете визначити плагін 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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.