gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:14:51 35 4
gpt4 key购买 nike

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

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

我的问题是,当我将库分开时,我无法让启动器找到它们。在 jar 或爆炸模式(有两个目录) - 我不断得到

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

知道如何让它发挥作用吗?

最佳答案

看来the Spring Boot thin launcher这就是您正在寻找的。

关于java - 将 Spring Boot fat jar 拆分为两个 jar (app/libs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46265276/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com