通过-cp而不是-jar运行spring boot application jar

时间:2018-07-26 15:19:30

标签: java spring-boot

我可以通过以下方式运行我的Spring Boot应用程序JAR:

java -Xms256M -Xmx1024M -Dspring.profiles.active=local -Dport=9999 -jar "\Path\To\sampleV1.0.jar"

但是,当我尝试运行-cp时(原因是,我不想提及jar名称,因为它会根据新版本不断变化,并且-jar不支持通配符)像这样的选项:

java -Xms256M -Xmx1024M -Dspring.profiles.active=local -Dport=9999 -cp "\Path\to\jar\*" package.structure.name.MainClass

然后我得到了错误:

> Exception in thread "main" java.lang.NoClassDefFoundError:
> org/springframework/boot/SpringApplication
>         at com.citi.isg.lmc.MainClass.main(MainClass.java:20)
> Caused by: java.lang.ClassNotFoundException:
> org.springframework.boot.SpringApplication
>         at java.net.URLClassLoader.findClass(Unknown Source)
>         at java.lang.ClassLoader.loadClass(Unknown Source)
>         at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
>         at java.lang.ClassLoader.loadClass(Unknown Source)
>         ... 1 more

课程代码是:

@SpringBootApplication
@EnableEurekaServer
public class MainClass{


    public static void main(String[] args) {  
        System.setProperty("spring.config.name", "any_word_for_example");
        SpringApplication.run(MainClass.class, args);
    }
}

请告诉我是否做错了事。

1 个答案:

答案 0 :(得分:1)

  

为什么您的命令不起作用?

我看到它是一个Spring Boot应用程序,Spring Boot应用程序的主类不是您的主类。参见here

  

如何在不指定jar名称的情况下启动?

解压缩jar并检查META-INF中的MANIFEST文件,用此处提到的主类替换命令行中的主类(例如主类可以为org.springframework.boot.loader.JarLauncher)。

无论如何,我从未尝试过这样做,而且我认为这样做是不正确的。更改脚本以获取正确的名称是一种更好的方法,或者您可以每次使用固定的最终名称生成jar。