mvn spring-boot有什么区别:run和Application.main()

时间:2016-10-20 08:06:00

标签: spring-boot

我只是想知道我用以下内容启动一个spring boot应用程序有什么区别

mvn spring-boot:run

java -jar target/the-packaged-file.war (Or in IDE, right click and run java application)

1 个答案:

答案 0 :(得分:4)

很棒的问题。

我们打算在mvn spring-boot:run和从IDE运行您的应用程序之间没有区别。两者都使用项目的类路径启动主类。当您在应用程序上工作时强烈建议使用后者:如果您从IDE运行应用程序,您将获得所有不错的功能,例如调试和开发工具。当您需要在命令行上运行应用程序的标准方法时,将使用前者。 maven插件还可以在集成测试阶段之前启动您的应用程序(请参阅Maven / Gradle插件的start目标)。如果您使用构建来过滤某些资源,那么您的IDE应该知道,否则当您从IDE启动应用程序时,某些数据可能不会被过滤。

java -jar yourapp.jar正在最终的工件上运行。 Spring Boot负责构建应用程序的类路径。过滤的资源存储在jar中。但最终,它意味着做同样的事情。

现在您的问题中包含war。您不能期望常规war回调适用于作为主类运行的内容。话虽如此,Spring Boot会尽最大努力为您提供一致的工具。从正在运行的servlet容器启动的war不会从main方法初始化,而是从servlet初始化程序初始化。但是,您可以共享初始化代码以使其保持一致。该插件的运行目标将添加src/main/webapp,以便同时提供这些文件。

TL; DR,如果您要在所有环境中寻找一致的故事,请不要使用战争包装。