Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

146
Vistas
Complemento Spring Boot Maven - Sin directorio BOOT-INF

Entre la versión 1.3.8.RELEASE del plugin spring-boot-maven-plugin y la versión 1.4.0.RELEASE: ha habido un cambio en la estructura del paquete generado (si extrae el archivo jar de uber) 1.3.8.RELEASE com, Directorios lib, META-INF y org 1.4.0.RELEASE tiene directorios BOOT-INF, META-INF y org Básicamente desde 1.4.0.RELEASE en adelante - todas las clases y librerías están en el directorio BOOT-INF. Debido a esto, cuando intenta ejecutar un proyecto de Spring Boot en Amazon Lambda, dice que no se encontró un jar porque no puede leer la nueva estructura de jar de Spring Boot Uber

Mi pregunta es: ¿es posible en las versiones más nuevas del complemento Spring Boot Maven hacer que genere el uber jar con la misma estructura que en la versión 1.3.9.RELEASE?

Probé el complemento maven-shade, pero eso lleva a otros problemas

Cualquier ayuda es muy apreciada

gracias damien

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La solución fue agregar el diseño de MÓDULO para el complemento en el archivo pom.xml

 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <layout>MODULE</layout> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
about 4 years ago · Santiago Trujillo Denunciar

0

En mi caso, estoy usando spring boot 2.X y declaré el spring-boot-maven-plugin maven-dependency-plugin (que usé para desempaquetar y crear una aplicación ampliada en Docker) y debe ser antes del desempaquetado , tiene sentido, se estaba desempaquetando antes de que se ejecutara el complemento Spring Boot Maven. La próxima vez lo declararé primero en la cadena de complementos, perdí más de 1 hora en esto. Espero que ayude a alguien.

 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>${spring.boot.mainClass}</mainClass> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>unpack</id> <phase>package</phase> <goals> <goal>unpack</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>${project.groupId}</groupId> <artifactId>${project.artifactId}</artifactId> <version>${project.version}</version> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> </plugins> </build>
about 4 years ago · Santiago Trujillo Denunciar

0

La respuesta anterior con

 <layout>MODULE</layout>

ya no funciona, esto se debe a que el elemento de diseño está obsoleto en Spring Boot 2.x. Estoy usando Spring Boot 2.0.x, encontré este comentario útil en github:

El soporte para el diseño del módulo se eliminó en Spring Boot 2.0 y quedó obsoleto en 1.5. Desafortunadamente, se perdieron las actualizaciones de la documentación del complemento Maven, por lo que podemos usar este problema para solucionarlo. Debería usar una LayoutFactory personalizada en su lugar.

Pero como no quería implementar LayoutFactory, probé esta segunda solución a continuación que en realidad vuelve a empaquetar y crea un contenedor adicional con un nombre de clasificador:

Esto se debe al cambio en el diseño de archivos ejecutables en Spring Boot 1.4. Las clases de aplicación ahora se empaquetan en BOOT-INF/classes. Su módulo de cliente depende del frasco gordo y reempaquetado de su módulo web. Debido al nuevo diseño, eso significa que el módulo cliente ya no puede cargar las clases del módulo web. Si desea utilizar su módulo web como una dependencia, debe configurar el reempaquetado de Boot para aplicar un clasificador al fat jar. Por ejemplo:

 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>exec</classifier> </configuration> </execution> </executions> </plugin> </plugins> </build>

Si lo hace, permitirá que otros módulos dependan del jar original que no incrusta las dependencias del módulo y tiene las clases en la raíz del jar.

Un frasco original tiene la misma estructura que yo quería como

 com.my-package.foo.bar META-INF

y el segundo clasificador tiene la estructura más nueva con BOOT-INF/ etc.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda