Spring Boot-Родительский pom, когда у вас уже есть родительский pom


существует ли конкретный рекомендуемый подход к включению родительского pom spring-boot в проекты, которые уже имеют необходимый Родительский POM?

Что вы рекомендуете для проектов, которые должны распространяться от организационного родителя (это чрезвычайно распространено и даже что-то много/большинство проектов, опубликованных в Maven central, в зависимости от фидерных репозиториев, из которых они происходят). Большая часть материалов сборки связана с созданием исполняемых банок (например, запуск встроенного Tomcat/Jetty). Есть способы структурировать вещи так, чтобы вы могли получить все зависимости без расширения от родителя (аналогично композиции против наследования). Вы не можете получить материал сборки таким образом, хотя.

поэтому предпочтительно включить все родительские POM spring-boot внутри требуемого родительского POM или просто иметь зависимость POM в файле POM проекта.

другие варианты?

ТИА,

Скотт

2 128

2 ответа:

вы можете использовать spring-boot-starter-parent как "bom" (c. f.Весна и Джерси другие проекты, которые поддерживают эту функцию в настоящее время), и включить его только в разделе управления зависимостями с областью=импорт.Таким образом, вы получаете много преимуществ от его использования (т. е. управление зависимостями) без замены настроек в вашем фактическом родителе.

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>1.1.5.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
   </dependencies>
</dependencyManagement>

обновление 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>

в противном случае вы не можете построить как исполняемый jar или война.

еще нет, если вы используете 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 и фильтр ресурсов с Spring Boot с " @ "Вместо" $ {} " (как в этом примере 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/.