我知道这听起来可能是个愚蠢的问题,但我无法理解mvn spring-boot:run和java -jar(通过mvn install生成的.jar文件)之间的区别
mvn spring-boot:run
java -jar
我在中有一个带有jsp页面的spring boot应用程序/src/main/resources/META-INF/resources/WEB- INF/。如果我使用mvn spring-boot:run这些页面,将被投放。但是,如果我使用java -jar这些页面,则无法通过应用程序找到。
/src/main/resources/META-INF/resources/WEB- INF/
我正在处理的应用程序位于https://github.com/ArslanAnjum/angularSpringApi
更新:它与Spring Boot 1.4.2.RELEASE一起使用,而我打算使用最新版本,即1.5.8.RELEASE。
更新:好吧,我通过将jsps放入src / main / webapp / WEB-INF / views /并将包装类型更改为war,然后使用java -jar target / myapp.war进行了该战争,并且现在可以正常工作了,从而解决了该问题。
简短的答案:这spring-boot:run是 在steroïd 上作为Maven构建的一部分运行的java -jar命令,确保将所有必需的参数传递到您的应用程序(例如资源)。还将通过在运行应用之前执行生命周期目标来确保您的项目得到了编译。 __spring- boot:run``test-compile
spring-boot:run
spring- boot:run``test-compile
长答案:
运行时java -jar,将使用传递给此JVM的所有参数启动新的JVM实例。例如,使用Spring doc示例
java -Xdebug -Xrunjdwp:server=y, \ transport=dt_socket, address=8000, suspend= -jar target/myproject-0.0.1-SNAPSHOT.jar
您将使用给定的参数启动一个全新的JVM。您需要确保在命令行上包括所需的所有内容,例如类路径元素,应用程序参数,JVM选项等。
运行时mvn spring-boot:run,您将启动一个Maven构建,它将:
test-compile
resources:resources
compiler:compile
resources:testResources
compiler:testCompile
target/classes
fork
agent
按照:
我在/ src / main / resources / META-INF / resources / WEB-INF /中有一个带有jsp页面的spring boot应用程序。如果我使用mvn spring-boot:run,将提供这些页面。但是,如果我使用java -jar,则应用程序找不到这些页面。
这是因为该mvn spring:boot命令将确保您target/classes的应用程序运行时,您的文件夹位于类路径中。编译后,此文件夹将包含target/classes/META- INF/resources/WEB-INF其他内容。然后,您的应用程序将能够META-INF/resources/WEB- INF在被询问时找到并加载它们。当您运行java -jar命令时,该文件夹可能不在类路径中,因此您的应用程序无法找到您的资源。(这些资源是src/main/resources在resources:resources目标期间从文件夹复制的)
mvn spring:boot
target/classes/META- INF/resources/WEB-INF
META-INF/resources/WEB- INF
src/main/resources
要在java -jar命令中得到类似的结果,必须在类路径中包含资源,例如javar -jar myapp.jar -cp $CLASSPATH;/path/to/my/project/target/classes/
javar -jar myapp.jar -cp $CLASSPATH;/path/to/my/project/target/classes/