当前位置: 首页 > 知识库问答 >
问题:

mvn spring-boot:run vs java-jar

荆煌
2023-03-14

我知道这个问题听起来很傻,但我无法理解mvn spring-boot:runjava-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 Boot1.4.2.发行版一起工作,而我打算使用最新的版本,即1.5.8.发行版。

更新:我解决了这个问题,将JSP放在src/main/webapp/web-inf/views/中,并将打包类型更改为war,然后使用java-jar target/myapp.war运行这个war,它现在运行良好。

共有1个答案

苍元章
2023-03-14

简短回答:spring-boot:run是Steroïd上的java-jar命令,作为Maven构建的一部分运行,确保将所有必需的参数传递给应用程序(如资源)。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

当您运行mvn spring-boot:run时,您将启动一个Maven构建,该构建将:

  • 运行test-compile生命周期目标,默认情况下,它将是Maven资源和编译器插件的Resources:ResourcesCompiler:compileResources:testresourcesCompiler:testcompile目标。
  • 使用一组参数启动应用程序,这些参数取决于您在项目中定义的Spring Boot Maven插件配置(您的pom.xml、父级和设置、命令行等)。除其他外,这包括:
    • 大量类路径元素目标/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命令时,这个文件夹可能不在类路径上,您的应用程序就无法找到您的资源。(这些资源是在resources:resources目标期间从src/main/resources文件夹复制的)

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

 类似资料:
  • 我正在intelliJ上用livereload测试spring-boot-devtools。我有一个简单的spring boot应用程序,效果很好。 当我从maven命令“mvn-spring-boot:run”启动应用程序时,除了livereload服务器不启动之外,所有工作正常。控制台上没有显示消息,chrome扩展显示错误,无法连接到livereload服务器。 如果我使用(右鼠标按钮/Ru

  • mvn清洁安装-成功构建。 java-jar-app成功运行。 mvn spring启动:运行-引发错误: 检测到类路径上的log4j-over-slf4j.jar和绑定slf4j-log4j12.jar,抢占StackOverflow Error。有关更多详细信息,请参阅http://www.slf4j.org/codes.html#log4jDelegationLoop。 什么是mvn spr

  • 问题内容: 我有一个主类,期望使用-D选项传递某些属性。我可以通过将其作为VM选项发送来在IDE中访问它。 我使用Maven并在尝试以下操作时将此应用程序打包到jar文件中: 要么 没有获取环境系统属性。 关于发生了什么的任何指示? 问题答案: 在。之前传递参数。如果在jar文件之后传递它们,它们将被解释为命令行参数并传递给in 。喜欢,

  • 问题内容: 我的目标是在Maven存储库中安装jar文件。这篇文章解释了如何使用MVN进行安装。 但是但是由于我将Maven嵌入Eclipse中,所以我不知道在哪里运行以下命令: 简而言之:如何确定Eclipse嵌入式Maven的Maven安装目录? 问题答案: 在Eclipse中,您可以执行以下操作: 运行->运行配置-> Maven构建(双击) 您的目标是install:install-fil

  • 问题内容: 我正在https://developers.google.com/appengine/docs/java/webtoolsplatform#dynamic_web_project上的“在服务器上运行项目”的步骤中,遇到一个问题: 初始化VM代理库失败,初始化失败:仪器打开zip文件或JAR清单丢失时出错:C:\ Program 另一个人在这里报告了类似的问题:打开zip文件或缺少JAR

  • 问题内容: 我正在尝试对JAR文件进行代码签名,并且正在使用JDK 1.7u1。我们获得了GoDaddy代码签名证书,我按照此处的说明(方法1)进行操作: http //help.godaddy.com/article/4780 JAR可以正常运行,但是每当我尝试运行命令时: 在使用JDK 1.7u1签名的JAR上,我都会得到以下输出: 我还在JDK 1.6u26和1.6u14上使用与上述相同的J

  • 问题内容: 到目前为止,我们有一个项目结构,其中包含名为的单个源文件夹,其中包含三个模块的源代码。我想做的是: 1)编译源代码。这可以通过sourceSets定义轻松完成: 2)将编译结果放入三个jar中。我通过三个“ jar”类型的任务来做到这一点: 我现在通过三个单独的任务来执行此操作: util.jar } client.jar } server.jar } 问题是应该包含and 中不包含的

  • 问题内容: 有没有一种工具可以列出包含JAR中引用的(第三方)类的第三方“软件包”?假设它将从JAR文件定义中识别出什么是“ home”包,并且它将打印出JAR中引用的最高3级的第三方类的标准名称的列表。 目的是我需要找到该JAR文件的Maven依赖项并将其部署为Maven工件。 问题答案: JarAnalyzer: jar文件的依赖项管理实用程序。它的主要目的是遍历目录,解析该目录中的每个jar