Java 将Spring Boot fat jar拆分为两个jar(app/libs)

Java 将Spring Boot fat jar拆分为两个jar(app/libs),java,spring,spring-boot,jar,Java,Spring,Spring Boot,Jar,为了优化Docker层,我尝试将我们的30M Spring Boot胖jar拆分为2M app.jar和28M libs.jar 我可以使用分解模式,但我更喜欢使用2个jar,因为它简化了一些事情,例如部署、脚本等。特别是胖jar更容易和直观地使用java-jar,而不是更麻烦的java org.springframework.boot.loader….Launcher 我的问题是,当我将lib分离出来时,我无法让启动器找到它们。无论是在jar模式还是爆炸模式下(使用两个dir),我都会得到 j

为了优化Docker层,我尝试将我们的30M Spring Boot胖jar拆分为2M app.jar和28M libs.jar

我可以使用分解模式,但我更喜欢使用2个jar,因为它简化了一些事情,例如部署、脚本等。特别是胖jar更容易和直观地使用
java-jar
,而不是更麻烦的
java org.springframework.boot.loader….Launcher

我的问题是,当我将lib分离出来时,我无法让启动器找到它们。无论是在jar模式还是爆炸模式下(使用两个dir),我都会得到

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: com/odoro/common/api/ServiceType
    at com.odoro.sync.service.Application.main(Application.java:14)
    ... 6 more
Caused by: java.lang.ClassNotFoundException: com.odoro.common.api.ServiceType
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at org.springframework.boot.loader.LaunchedURLClassLoader.doLoadClass(LaunchedURLClassLoader.java:178)
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:142)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more
在以下所有情况下,我都会这样做:

# java -jar app.jar -cp ../lib.jar

# java -cp .:../lib org.springframework.boot.loader.JarLauncher

# java -Dloader.path=../lib org.springframework.boot.loader.PropertiesLauncher
你知道我该怎么做吗?

看来这就是你要找的