【问题标题】:Build jar and run spring boot from cmd构建 jar 并从 cmd 运行 spring boot
【发布时间】:2020-06-30 05:18:35
【问题描述】:

我是 springboot 新手,正在使用 springboot 2 版本。

我想在命令提示符下使用 java -jar my-app-0.0.1-SNAPSHOT.jar 运行我的 Spring Boot 应用程序。

但是,当我使用 eclipse 构建应用程序时,它会直接调用 myService.getMyMethod() 而不会构建 jar。

我想先构建 jar 文件,然后从命令提示符处运行 java -jar my-app-0.0.1-SNAPSHOT.jar,这将调用 myService.getMyMethod()

我在 pom.xml 中已经有了 spring-boot-maven-plugin,运行 mvn package / mvn install 会启动应用程序但不会在目标中生成 jar 文件文件夹。 mvn clean package 也不起作用,MyApplication 正在使用实现 CommandLineRunner 并开始在构建时调用该方法,因此不会生成构建 jar 文件

我的主要课程:

@SpringBootApplication
public class MyApplication implements CommandLineRunner {

private static String URL = "ws://localhost:8080/spring-mvc-java/chat";

   @Autowired
   private MyService myService;

   public static void main(String[] args) {
       SpringApplication.run(MyApplication.class, args);
   }
   @Override
   public void run(String... args) throws Exception {
       myService.getMyMethod(URL);
   }
}

我的服务等级:

@Service
public class MyServiceImpl implements MyService {

     public void getMyMethod(String URL){
           WebSocketClient client = new StandardWebSocketClient();
           WebSocketStompClient stompClient = new WebSocketStompClient(client);
           stompClient.setMessageConverter(new MappingJackson2MessageConverter());
           StompSessionHandler sessionHandler = new MyStompSessionHandler();
           stompClient.connect(URL, sessionHandler);
           new Scanner(System.in).nextLine(); // Don't close immediately.
           }
}

【问题讨论】:

  • 您是否将spring-boot-maven-plugin 添加到您的pom.xml 以创建正确的jar?
  • 是的。更新了帖子
  • 如果 mvn package 没有生成 jar,而是启动了应用程序,您可能有一个测试阻止了进程。
  • @M.Deinum 请找到上面更新的代码
  • 您的服务正在阻塞,因此阻止了测试完成,因此 maven 无法生成 jar。

标签: java spring-boot pom.xml spring-websocket spring-boot-maven-plugin


【解决方案1】:
  1. pom.xml添加标签<packaging>jar</packaging>
  2. 您可以使用命令mvn packagemaven installbuildmaven project。它将在target 文件夹中创建.jar 文件。
  3. 从存在.jar 的位置运行命令 - java -jar jarName.jar

现在您可以访问您的system

【讨论】:

    【解决方案2】:

    要使用java -jar 运行jar,您应该使用spring-boot-maven-plugin

    <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>2.3.0.RELEASE</version>
                </plugin>
            </plugins>
        </build>
    

    此插件会将项目的所有依赖项“烘焙”到 JAR 中,并添加一些“技术”代码,允许使用 java -jar 运行此 JAR(确切的细节超出了这个问题的范围)

    如果您将它添加到构建中并运行mvn package / mvn install,它将在target 文件夹中创建一个大JAR,位于原始jar 旁边(将使用后缀.original 重命名)。

    您可以使用 WinRAR/WinZIP 打开它,并确保您的所有类都在那里,并且所有依赖项都在 BOOT-INF/lib 文件夹中。

    然后就可以用java -jar运行项目了

    【讨论】:

    • 我在 pom.xml 中有 spring-boot-maven-plugin 但没有生成 jar。更新了我的帖子。
    • run mvn clean package - 默认情况下,“重新打包”目标绑定到 maven 中的“打包”阶段 (docs.spring.io/spring-boot/docs/1.5.2.RELEASE/maven-plugin/…)
    • mvn clean package 也不起作用,我的主类正在使用实现 CommandLineRunner 并开始在构建时调用该方法
    • 尝试从start.spring.io 生成相同的项目并查看与您的 pom 的差异...
    【解决方案3】:

    按照这些步骤操作

    用于 eclipse/spring 工具套件

    • 右键单击项目名称以获取这些选项-->单击运行为maven build

    • 将目标添加为包并单击右下角的运行按钮

    • jar 文件将在您项目的 target 文件夹中生成。您可以找到它然后运行java -jar 命令

    【讨论】:

    • 用无法解决问题的答案劫持一个老问题不是前进的方向。测试仍然阻止通过 UI 运行 mvn package 无法解决此问题。
    • 它可以工作,因为当我们执行 mvn build 时,它会为项目生成 jar。我不明白你到底想说什么。
    • 他们有一个从命令行读取输入的测试。 mvn package 永远不会结束。他们已经知道他们需要 mvn package 重申这不会让它突然起作用(他们还在mvn package 永远不会完成的问题中提到完全相同的问题)。
    • 感谢您的评论,我得到了您的答复。
    猜你喜欢
    • 2017-02-11
    • 1970-01-01
    • 2018-01-06
    • 2018-09-03
    • 2016-09-29
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多