我有一个简单的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个档案来解决它,但我对最初的结果感到惊讶。