从命令行运行SpringBoot war(战争布局)

时间:2018-06-01 20:24:00

标签: spring-boot spring-boot-maven-plugin

我有一个简单的Spring-Boot-Start-Web项目。

我使用“WAR”重新包装

重新包装我的罐子
                <execution>
                    <id>repackage</id>
                    <configuration>
                        <layout>WAR</layout>
                        <mainClass>com.test.SimpleServiceApplication</mainClass>
                    </configuration>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                    <phase>verify</phase>
                </execution>

https://docs.spring.io/spring-boot/docs/current/maven-plugin/usage.html

WAR定义为:可执行WAR 布局。提供的依赖项放在WEB-INF / lib中,以避免在servlet容器中部署时出现任何冲突。

我的印象是,如果我想使用主类(可执行文件)执行应用程序,那么WEB-INF \ lib-provided \中的lib将被boot-loader看到。但是对于servlet容器是不可见的,如果在适当的spring-boot运行时环境中部署为war。

基本上,我认为WAR既是 deploy -able,又是可执行文件

似乎情况并非如此

如果我使用命令行并尝试启动它:

java -jar demo-simple-service-api.jar
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
        at org.springframework.boot.loader.WarLauncher.main(WarLauncher.java:58)
Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
        at com.test.SimpleServiceApplication.main(SimpleServiceApplication.java:10)
        ... 8 more
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)
        ... 9 more

我可以在战争中看到lib。

有没有办法执行(不部署)战争?

如果启动应用程序时“boot \ loader”没有显示,为什么要包含这些库?

我通过使用包装选项JAR和WAR创建2个档案来解决它,但我对最初的结果感到惊讶。

0 个答案:

没有答案