Je sais que cela peut sembler une question stupide, mais je n'arrive pas à comprendre la différence entre mvn spring-boot:run
et Java -jar
(fichier .jar généré avec l'installation de mvn)
J'ai une application Spring Boot avec des pages jsp dans /src/main/resources/META-INF/resources/WEB-INF/
. Si j'utilise mvn spring-boot:run
ces pages sont diffusées. Mais si j'utilise Java -jar
ces pages ne sont pas trouvées par application.
L'application sur laquelle je travaille est à https://github.com/ArslanAnjum/angularSpringApi
MISE À JOUR: Cela fonctionne avec Spring Boot 1.4.2.RELEASE alors que j'ai l'intention d'utiliser la dernière version, c'est-à-dire 1.5.8.RELEASE.
MISE À JOUR: Eh bien, j'ai résolu le problème en mettant jsps dans src/main/webapp/WEB-INF/views/et en changeant le type d'emballage en war, puis en exécutant cette guerre en utilisant Java -jar target/myapp .war et son bon fonctionnement maintenant.
Réponse courte: spring-boot:run
Est une commande Java -jar
sur steroïd exécutée dans le cadre de votre build Maven, garantissant que tous les paramètres requis sont transmis à votre application (comme les ressources). spring-boot:run
S'assurera également que votre projet est compilé en exécutant les objectifs de cycle de vie de test-compile
Avant d'exécuter votre application.
Longue réponse:
Lorsque vous exécutez Java -jar
, Vous lancez une nouvelle instance JVM avec tous les paramètres que vous avez transmis à cette JVM. Par exemple, en utilisant l'exemple Spring doc
Java -Xdebug -Xrunjdwp:server=y, \
transport=dt_socket, address=8000, suspend=
-jar target/myproject-0.0.1-SNAPSHOT.jar
Vous allez lancer une toute nouvelle JVM avec les paramètres donnés. Vous devez vous assurer d'inclure tout ce dont vous avez besoin, comme les éléments de chemin de classe, les paramètres d'application, les options JVM, etc. sur la ligne de commande.
Lorsque vous exécutez mvn spring-boot:run
, Vous lancez une build Maven qui:
test-compile
, Par défaut, ce seront les objectifs resources:resources
, compiler:compile
, resources:testResources
, compiler:testCompile
Des ressources et du compilateur Maven brancher.target/classes
Qui peut contenir des ressources et des bibliothèques requises par votre application, vos dépendances Maven, etc.fork
et agent
du pluginSelon:
J'ai une application Spring Boot avec des pages jsp dans/src/main/resources/META-INF/resources/WEB-INF /. Si j'utilise mvn spring-boot: exécutez ces pages sont servies. Mais si j'utilise Java -jar ces pages ne sont pas trouvées par application.
C'est parce que la commande mvn spring:boot
S'assurera que votre dossier target/classes
Est présent dans le chemin de classe lorsque votre application est en cours d'exécution. Après la compilation, ce dossier contiendra entre autres target/classes/META-INF/resources/WEB-INF
. Votre application pourra alors trouver META-INF/resources/WEB-INF
Et les charger à la demande. Lorsque vous avez exécuté la commande Java -jar
, Ce dossier n'était probablement pas sur le chemin de classe, votre application n'a alors pas pu trouver vos ressources. (ces ressources ont été copiées à partir du dossier src/main/resources
pendant l'objectif resources:resources
)
Pour obtenir un résultat similaire avec votre commande Java -jar
, Vous devez inclure vos ressources sur le chemin de classe telles que javar -jar myapp.jar -cp $CLASSPATH;/path/to/my/project/target/classes/
Avez-vous essayé de créer un fichier jar à l'aide de mvn package
au lieu de mvn install
lorsque vous exécutez un fichier jar à l'aide de Java -jar
? package
créera un fichier jar/war selon votre fichier POM tandis que install
installera le fichier jar généré dans le référentiel local pour d'autres dépendances si elles sont présentes.