我正在寻找一个解决方案来制作一个通用的spring引导组件,以避免多个不同组件中的许多重复文件。例如:有两个组件(例如,C1和C2)是基于spring构建的,用于提供RESTful服务,在这两个组件中都使用swagger来显示生成的API文档,生成的胖jar看起来如下所示:
C1.jar
│ logback-access.xml
│ logback.xml
├─com.host.c1.*
├─db
├─lib
├─logging
│ logback-access-base.xml
│ logback-base.xml
├─META-INF
├─org. springframework.boot.loader
└─static
└─swagger.ui.app C2.jar与C1.jar几乎相同,但是不同的包名(com.host.c2.*).
我们可以看到,在这两个组件中有许多重复的文件,我想创建一个公共组件来包含所有公共资源和配置文件,以保持组件结构的整洁,例如:
BaseComponent.jar
│ logback-access.xml
│ logback.xml
├─com.host.base.*
├─lib
├─logging
│ logback-access-base.xml
│ logback-base.xml
├─META-INF
├─org. springframework.boot.loader
└─static
└─swagger.ui.app 这样,基于C1的新C2和BaseComponent看起来如下:
C1.jar
├─com.host.c1.*
├─lib ... BaseComponent.jar
C2.jar
├─com.host.c1.*
├─lib ... BaseComponent.jar我手动尝试过,但它没有工作,但在运行修改后的jar时有以下例外:
java.lang.IllegalStateException: Unable to open nested compressed entry lib/BaseComponent.jar
at org.springframework.boot.loader.jar.JarFile.getNestedJarFileFromFileEntry(JarFile.java:342)
at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:312)
at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:87)
at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:74)
at org.springframework.boot.loader.ExecutableArchiveLauncher.getClassPathArchives(ExecutableArchiveLauncher.java:56)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:60)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:45)是否有可能做到这一点?如有任何建议/解决办法,将不胜感激。
发布于 2014-10-01 08:54:30
创建可执行jar
Spring要求嵌套条目为不受任何压缩。问题是您已经手动构建了jar,因此压缩了嵌套的jar文件。Spring的Maven和Gradle插件将为您处理这个问题。或者,如果您想继续手工构建jar,应该可以禁用压缩,但它将取决于您正在使用的工具。例如,如果您在OS上使用zip,-Zstore将使它不受压缩地存储条目。
另外,堆栈跟踪中显示的方法只存在于Spring的旧版本中(1.1.1是最新版本)。这与这个问题无关,但我建议升级到1.1.7。
从嵌套jars中进行组件扫描和加载配置
当Spring应用程序执行组件扫描、试图加载配置文件等时,它将使用类路径来执行,也就是说,文件和类是否位于主jar文件或嵌套jar文件中并不重要,因为它们都在类路径上。只要您对任何资源加载遵循与在您自己的代码中所做的相同方法(使用classpath:/前缀资源位置),您就不会有任何问题。
发布于 2014-10-01 09:30:42
安迪,是的,我知道Spring的Maven插件可以处理它。我只想看看它是不是这样起作用。我想知道Spring是否可以从嵌套的jar文件中很好地完成以下工作:
顺便说一句,您是对的,用过的Spring是1.0.2。upgrade,它是旧的,我稍后会升级它。
https://stackoverflow.com/questions/26136374
复制相似问题