如何在应用程序服务器上部署的多个WAR / EAR文件中重用库?

时间:2016-12-27 22:11:20

标签: java java-ee deployment jboss shared-libraries

我目前正在开发电子银行平台,因此客户就是银行。为了扩展这个平台,我们开发了自己的&#x; xDK' (开发工具包)适用于第三方开发人员(通常是银行本身)。

当xDK用作依赖项(通过maven或gradle)时,它会带来许多传递依赖项以便工作(~25MB)。我试图想出解决方案,使依赖关系变得更轻一些(因为它需要所有的依赖关系),这反过来将促进更小,更集中的服务(不完全是微服务,但至少更近一步)

目前的情况是,每个服务/项目都可以使用自己的xDK版本,并且在需要之前不必更新。问题是它没有扩展。如果我们假设有100个带有xDK作为依赖关系的WAR文件,我们会在应用程序服务器上创建2.5GB的开销(即使它们都使用相同的版本)。

我列出了我想到的两个选项,但我想知道是否有更好的解决方案来解决这个问题。随意询问更多信息。提前谢谢。

与JavaEE组件(JPA,JAX-RS,...)类似,我们有一个' api'依赖和实施。这些项目只会宣布“api”。作为提供的依赖项,而实现将如此提供:

JBoss模块

我还没与其他应用服务器合作过。我们(和我们的客户)只使用JBoss EAP,因此这可能是JBoss特定的解决方案。我们可以为xDK创建一个JBoss模块,然后通过JBoss部署描述符使每个部署依赖它。好处是我们摆脱了库的多个副本,但我们失去了版本的灵活性。这意味着需要对您在服务中编码的xDK版本进行某种治理。此外,每当发生重大变化时,如果我们想将JBoss模块更新到最新版本,我们就需要更新所有服务。

EAR中的捆绑

EAR允许其中包含多个WAR文件,并且也可以将jar作为库。 xDK将是EAR依赖项。同样,我们与之前的解决方案具有相同的优点和缺点。这个解决方案是JBoss独立的。但是,它需要额外的构建步骤来收集所有项目并捆绑它们,如果需要捆绑自己的服务,这可能会让客户感到烦恼。

1 个答案:

答案 0 :(得分:0)

如何使用scope的maven依赖项provided声明对于各个war文件,jar文件是在war文件之外提供的,然后有另一种机制来注入共享jar文件进入应用服务器?

c.f。 https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html