我知道这可能听起来很愚蠢,但我无法理解mvn spring-boot:run
和java -jar
之间的区别(使用mvn install生成的.jar文件)
我在/src/main/resources/META-INF/resources/WEB-INF/
中有一个带有jsp页面的spring boot应用程序。如果我使用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运行此war并解决了这个问题,现在它正常工作。
答案 0 :(得分:9)
简短回答:spring-boot:run
是作为Maven构建的一部分运行的java -jar
命令 onsteroïd,确保将所有必需参数传递给您的应用(例如资源) 。 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
生命周期目标,默认情况下,它将是Maven资源和编译器插件的resources:resources
,compiler:compile
,resources:testResources
,compiler:testCompile
目标。 target/classes
文件夹,其中可能包含您的应用所需的资源和库,您的Maven依赖项等。fork
和agent
参数按照:
我有一个带有jsp页面的spring boot应用程序 / SRC /主/资源/ META-INF /资源/ WEB-INF /。如果我使用mvn spring-boot:运行这些页面。但是如果我使用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
文件夹中复制的)
要使用java -jar
命令获得类似的结果,您必须在类路径中包含资源,例如javar -jar myapp.jar -cp $CLASSPATH;/path/to/my/project/target/classes/
答案 1 :(得分:0)
使用mvn package
运行jar文件时,是否尝试使用mvn install
而不是java -jar
创建jar文件? package
将根据您的POM文件创建jar / war,而install
会将生成的jar文件安装到本地存储库以获取其他依赖项(如果存在)。