小编典典

mvn spring-boot:运行vs Java -jar

spring-boot

我知道这听起来可能是个愚蠢的问题,但我无法理解mvn spring-boot:runjava -jar(通过mvn
install生成的.jar文件)之间的区别

我在中有一个带有jsp页面的spring boot应用程序/src/main/resources/META-INF/resources/WEB- INF/。如果我使用mvn spring-boot:run这些页面,将被投放。但是,如果我使用java -jar这些页面,则无法通过应用程序找到。

我正在处理的应用程序位于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进行了该战争,并且现在可以正常工作了,从而解决了该问题。


阅读 629

收藏
2020-05-30

共1个答案

小编典典

简短的答案:这spring-boot:run在steroïd 上作为Maven构建的一部分运行的java -jar命令,确保将所有必需的参数传递到您的应用程序(例如资源)。还将通过在运行应用之前执行生命周期目标来确保您的项目得到了编译。 __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:resourcescompiler:compileresources:testResourcescompiler:testCompileMaven的资源和编译器插件的目标。
  • 使用一堆参数启动您的应用程序,这些参数取决于您在项目中定义的Spring Boot Maven插件配置(您的pom.xml,父项和设置,命令行等)。其中包括:
    • 许多类路径元素:您的target/classes文件夹可能包含应用程序所需的资源和库,您的Maven依赖项等。
    • 无论到餐桌的JVM与否(是否要创建一个全新的JVM来运行你的应用程序或重新使用Maven构建的JVM),看到forkagent插件的参数

按照:

我在/ 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/resourcesresources:resources目标期间从文件夹复制的)

要在java -jar命令中得到类似的结果,必须在类路径中包含资源,例如javar -jar myapp.jar -cp $CLASSPATH;/path/to/my/project/target/classes/

2020-05-30