首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有任何方法来制作一个与多个不同组件共享的基本弹簧引导组件?

是否有任何方法来制作一个与多个不同组件共享的基本弹簧引导组件?
EN

Stack Overflow用户
提问于 2014-10-01 07:37:55
回答 2查看 2.2K关注 0票数 1

我正在寻找一个解决方案来制作一个通用的spring引导组件,以避免多个不同组件中的许多重复文件。例如:有两个组件(例如,C1和C2)是基于spring构建的,用于提供RESTful服务,在这两个组件中都使用swagger来显示生成的API文档,生成的胖jar看起来如下所示:

代码语言:javascript
复制
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.*).

我们可以看到,在这两个组件中有许多重复的文件,我想创建一个公共组件来包含所有公共资源和配置文件,以保持组件结构的整洁,例如:

代码语言:javascript
复制
 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看起来如下:

代码语言:javascript
复制
 C1.jar
 ├─com.host.c1.*
 ├─lib ... BaseComponent.jar

 C2.jar
 ├─com.host.c1.*
 ├─lib ... BaseComponent.jar

我手动尝试过,但它没有工作,但在运行修改后的jar时有以下例外:

代码语言:javascript
复制
  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)

是否有可能做到这一点?如有任何建议/解决办法,将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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:/前缀资源位置),您就不会有任何问题。

票数 2
EN

Stack Overflow用户

发布于 2014-10-01 09:30:42

安迪,是的,我知道Spring的Maven插件可以处理它。我只想看看它是不是这样起作用。我想知道Spring是否可以从嵌套的jar文件中很好地完成以下工作:

  1. 加载日志配置
  2. 扫描并启动附加说明的组件、控制器、拦截器等。

顺便说一句,您是对的,用过的Spring是1.0.2。upgrade,它是旧的,我稍后会升级它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26136374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档