我试图找出什么是处理应用服务器中依赖项的最佳方法。我们正在考虑使用Maven来构建应用程序,但发现了一个问题。当我们需要更新没有版本号的专有共享库时会出现此情况,这种情况每月发生一次,并且我们通过以下方式使用Websphere共享库功能:
对于Websphere中的每个共享库,我们创建一个没有版本的别名。例如:db-component-1.2.1接收别名db-component。在第一次部署期间,我们使用别名将应用程序与所需的库关联。由于我们忽略该版本,因此所有应用都必须使用相同的版本,从而产生了一些限制。但是,当我们需要升级共享库时,只需在WS中上载新库,然后所有应用程序都使用更新的版本。
我们有70多个依赖专有共享库的应用程序。这些库不断变化,并且此解决方案使管理变得更加容易。但是在应用程序的构建过程之外更改依赖项似乎有点奇怪。依赖项控制不再可靠,因为应用程序POM中的信息可能为假。此外,所有应用都必须使用相同的版本。
我认为可能存在更好的解决方案。
我们考虑了另一种模型。在每次战争中都包括依赖项。这使我们可以不受限制地在每个应用程序中使用不同版本的库。但是有一个问题:在专有共享库中进行更改时,我们需要重建并重新部署所有应用程序。
我曾考虑过我们的专有共享库是如此不稳定,或者使用了将两种想法混在一起的解决方案,但是我不确定如何解决此问题。 OSGI看起来是一种更好的处理依赖关系的方法,但是升级许多应用程序时也会遇到同样的问题。
我们应该使用WS的共享库功能吗?有解决这个问题的更好方法吗?提示受到高度赞赏。
谢谢
最佳答案
我不确定我是否完全理解您的要求,我首先以为您不确定如何管理版本化不可用的依赖项,如果可以的话:
您已经提到过OSGi,您可能要考虑使用Nexus运行自己的Maven存储库,这将允许您自己对未版本化的jar进行版本控制。
不希望陈述明显的内容,就不能使用没有版本的特定版本...
但是,在重新阅读您的问题时,听起来您可能会问,为每个应用程序都具有显式依赖关系还是动态更新某些共享的依赖关系集(将更改推送到所有应用程序)是否更好?我会说以下内容:
您需要可重复的构建,这意味着您在构建应用程序时需要知道它使用了哪个版本的依赖库
您要确保所有项目在下次构建时都能获取最新版本的依赖关系
您可以使用Maven versions plugin来管理这种事情,我们在dependencyManagement
部分中有一个父pom定义所有库的版本,并每隔5分钟对此运行一个脚本以查找更新的依赖项。每当父pom更改时,所有子pom的更新都会更新并检入源代码管理,这意味着一旦发布了新的共享库,我们将尝试构建并进行所有应用程序的单元测试。