Dépannage des problèmes de chargement de Spring Boot Jar
Avez-vous rencontré le problème de démarrage d'une nouvelle archive Spring Boot?
En général, l'innovation dans ce sens n'est pas la première, il n'y a pas de normes spéciales. Par conséquent, beaucoup de gens ratissent les problèmes et les résolvent sur les forums et les débordements de pile.
Si vous rencontrez également un problème, je vous aiderai à le résoudre. Dans ce cas, lisez la suite.
, BootJar . , .
. — JSP . JSP? , - , , .
( ):
/src/main/ java/ resources/ static/ some.html public/ webapp/ WEB-INF/jsp index.jsp
BootJar / BootWar, jsp BootJar . BootWar. , . , — , , , . BootRun , .
, : , .
, . BootJar. , … ! , 302 + 404 ( ). .
— , , , webjars. ???
. jsp BootJar, BootWar. … . , .
, . BootJar — . .
: Spring Boot , . — . ! .
. — BootJar (webjars), , , , , ! , .
— - static/, public/. , . jsp . , . , ( ), jsp . jsp ,
spring.resources.static-locations
.
, , , . , ( webapp/), , , — META-INF/resources, . BootJar. .
? -, -, , . — . , . , .
-? -, , , -, . , . , : — , , .
. . , , classpath.
, . ?
.
- spring- . , , , jsp .
- . : spring-, , — , , . , .
- — BootJar.
sourceSets {
jsp {
resources.source(sourceSets.main.resources);
resources.srcDirs += ['src/main/webapp'];
}
jmh {
.. ..
}
}
task jsp(type: Jar, description: 'JSP Packaging') {
archiveBaseName = 'jsp'
group = "build"
def art = sourceSets.jsp.output
from(art) {
exclude('META-INF')
into('META-INF/resources/')
}
from(art) {
include('META-INF/*')
into('/')
}
dependsOn(processJspResources)
}
processJspResources , . :
bootJar {
dependsOn(jsp)
bootInf.with {
from(jsp.archiveFile) {
include('**/*.jar')
}
into('lib/')
}
}
Je n'ai pas pu trouver comment l'ajouter d'une autre manière (directe) - il est impossible de connecter la configuration jspImplementation du projet lui-même, mais j'aimerais bien. Mais si nous le prenons toujours d'un autre module, nous le faisons toujours:
artifacts { jspImplementation jsp }
Voilà, maintenant nous avons une bibliothèque de ressources, que le tomkat doit charger selon tous les standards, et elle se charge. Exécutez-le comme BootJar.