管理Java中的部署依赖关系

时间:2010-08-18 14:44:19

标签: java dependencies

我试图弄清楚在app服务器中处理依赖关系的最佳方法是什么。我们正在考虑使用maven来构建应用程序,但我们发现了一个问题。当我们需要更新没有版本号的专有共享库时,它会出现。这种情况每月发生一次,我们以下列方式使用Websphere共享库函数:

  • 对于Websphere中的每个共享库,我们创建一个没有版本的别名。例如:db-component-1.2.1接收别名db-component。在第一次部署期间,我们使用别名将应用程序与所需的库相关联。由于我们忽略了该版本,因此所有应用必须使用相同的版本,从而产生一些限制。但是当我们需要升级共享库时,我们只需在WS中上传新库,然后所有应用程序都使用更新版本。

我们有超过70个依赖专有共享库的应用程序。这些库不断变化,这种解决方案使管理更加容易。但是在应用程序的构建过程之外更改依赖项似乎有点奇怪。依赖控制不再可靠,因为app的POM中的信息可能是错误的。此外,所有应用必须使用相同的版本。

我认为可能存在更好的解决方案。

我们考虑过另一种模式。在每场战争中包含依赖关系。这允许我们在每个应用程序中使用不同版本的库而不受限制。但是有一个问题:当在专有共享库中进行更改时,我们需要重新构建并重新部署所有应用程序。

我一直认为我们的专有共享库是如此不稳定或使用混合两种想法的解决方案,但我不知道如何解决这个问题。 OSGI看起来是处理依赖关系的更好方法,但我们在升级许多应用程序时会遇到同样的问题。

我们应该使用WS的共享库函数吗?有没有更好的方法来解决这个问题?提示非常感谢。

由于

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全明白你在问什么,我首先想到你不确定如何管理以版本化方式无法获得的依赖关系,如果是这样的话:

您已经提到了OSGi,您可能需要考虑使用Nexus运行自己的maven存储库,这样您就可以自己对未版本化的jar进行版本化。

不希望陈述明显的,你不能使用没有版本的特定版本的东西......

但是在重新阅读你的问题时,听起来你可能会问,是否更好地为每个应用程序或一些共享的依赖项具有明确的依赖关系,这些依赖关系会随时更新,从而推动对所有应用程序的更改。我会说以下内容:

  • 您需要可重复的构建,这意味着您需要知道何时构建应用程序使用哪个版本的依赖库
  • 您希望确保所有项目在下次构建
  • 时获取最新版本的依赖项

您可以使用Maven versions plugin来管理这类事情,我们有一个父pom定义dependencyManagement部分中所有库的版本,并且每5分钟运行一次脚本来查找更新的依赖项。每当父pom更改时,所有子pom都会更新并检入源代码控制,这意味着一旦发布了新的共享库,我们将尝试构建然后对所有应用程序进行单元测试。