Spring Boot-pom padre cuando ya tienes un pom padre


¿Hay un enfoque específico recomendado para la inclusión del pom padre de spring-boot en proyectos que ya tienen un POM padre requerido?

Qué recomienda para proyectos que necesitan extenderse desde un padre organizacional (esto es extremadamente común e incluso algo que muchos/la mayoría de los proyectos publican en Maven central dependiendo de los repositorios de alimentación de los que provienen). La mayoría de las cosas de compilación están relacionadas con la creación de JARs ejecutables (por ejemplo, ejecutando Tomcat/Jetty incrustado). Hay formas de estructurar las cosas para que pueda obtener todas las dependencias sin extenderse desde un padre (similar a composición vs.herencia). No se puede conseguir un material de construcción de esa manera, sin embargo.

Así que es preferible incluir todo el pom padre de spring-boot dentro del POM padre requerido o simplemente tener una dependencia POM dentro del archivo POM del proyecto.

Otras opciones?

TIA,

Scott

Author: Scott C., 2014-01-23

2 answers

Puede usar spring-boot-starter-parent como un "bom" (c. f. Spring y Jersey otros proyectos que soportan esta característica ahora), e incluirlo solo en la sección de administración de dependencias con scope=import.De esa manera, obtienes muchos de los beneficios de usarlo (es decir, administración de dependencias) sin reemplazar la configuración en tu padre real.

Las otras 2 cosas principales que hace son

  1. definir una carga de propiedades para configurar rápidamente las versiones de dependencias que desea sobrescribir
  2. configure algunos complementos con la configuración predeterminada (principalmente el complemento Spring Boot maven). Así que esas son las cosas que tendrá que hacer manualmente si utiliza su propio padre.

Ejemplo proporcionado en la documentación de arranque de resorte :

<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>
 142
Author: Dave Syer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-07 15:08:24

Actualización 2018-01-04 con 1.5.9.LANZAR.

Tengo el código completo y el ejemplo ejecutable aquí https://www.surasint.com/spring-boot-with-no-parent-example /

Necesitas esto como un básico

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

Pero eso no es suficiente, también necesita definir explícitamente el objetivo para spring-boot-maven-plugin (Si usa Spring Boot como padre, no tiene que definir esto explícitamente)

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

De lo contrario no se puede construir como ejecutable jar o war.

Todavía no, si eres usando JSP, necesitas tener esto:

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

De lo contrario, obtendrá este mensaje de error:

    [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, esto todavía no es suficiente si está utilizando el Perfil Maven y el Filtro de recursos con Spring Boot con " @ "en lugar de" {{} " (como este ejemplo https://www.surasint.com/spring-boot-maven-resource-filter / ). Entonces necesita agregar esto explícitamente en

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

Y esto en

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

Ver el ejemplo en el enlace https://www.surasint.com/spring-boot-with-no-parent-example/.

 14
Author: Surasin Tancharoen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-04 20:47:28