在Java中管理部署依赖项

在Java中管理部署依赖项,java,dependencies,Java,Dependencies,我正试图找出处理应用服务器依赖关系的最佳方法。我们正在考虑maven来构建应用程序,但我们发现了一个问题。当我们需要更新一个没有版本号的专有共享库时,就会出现这种情况。这种情况每月发生一次,我们正在以以下方式使用Websphere共享库函数: 对于Websphere中的每个共享库,我们创建一个没有版本的别名。例如:db-component-1.2.1接收别名db组件。在第一次部署期间,我们使用别名将应用程序与所需的库相关联。由于我们忽略了版本,所有应用程序都必须使用相同的版本,这造成了一些限制

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

  • 对于Websphere中的每个共享库,我们创建一个没有版本的别名。例如:db-component-1.2.1接收别名db组件。在第一次部署期间,我们使用别名将应用程序与所需的库相关联。由于我们忽略了版本,所有应用程序都必须使用相同的版本,这造成了一些限制。但当我们需要升级共享库时,我们只需在WS中上载新库,然后所有应用程序都使用更新版本
我们有70多个应用程序依赖于专有的共享库。这些库不断变化,此解决方案使管理更加容易。但在应用程序的构建过程之外更改依赖项似乎有点奇怪。依赖项控件不再可靠,因为应用程序POM中的信息可能是错误的。此外,所有应用程序必须使用相同的版本

我认为可能存在更好的解决办法

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

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

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


谢谢

我不确定是否完全理解您的要求,我首先认为您不确定如何管理无法以版本化方式提供的依赖项,如果是这样的话:

您已经提到过OSGi,您可能想考虑运行自己的Maven库,这样您就可以自己编写版本化的JAR了。 如果不想说清楚,你就不能使用没有版本的特定版本

但在重读你的问题时,你可能会问,是让每个应用程序都有明确的依赖关系更好,还是让一些共享的依赖关系集在运行中不断更新,从而推动对所有应用程序的更改更好。我想说:

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

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

我不确定是否完全理解您的要求,我首先认为您不确定如何管理版本化方式不可用的依赖项,如果是这样的话:

您已经提到过OSGi,您可能想考虑运行自己的Maven库,这样您就可以自己编写版本化的JAR了。 如果不想说清楚,你就不能使用没有版本的特定版本

但在重读你的问题时,你可能会问,是让每个应用程序都有明确的依赖关系更好,还是让一些共享的依赖关系集在运行中不断更新,从而推动对所有应用程序的更改更好。我想说:

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

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

我真的在寻找关于“是否最好具有显式依赖项或某些共享依赖项集”的建议。你的建议给了我一些想法。我会检查这个插件。拥有可重复的构建非常重要,但部署60个应用程序会产生操作问题。你有类似的情况吗?这就是您处理它的方式吗?我们总是显式地对所有依赖项进行版本控制,只需使用maven/nexus/versions插件组合,我们就不必担心在更新共享代码时检查所有单个项目是否会破坏更改。任何需要特定非当前版本的问题都很容易识别(仅在~6个月内发生一次),我真的在寻找关于“是否最好有明确的依赖项或一些共享的依赖项集”的建议。你的建议给了我一些想法。我会检查这个插件。拥有可重复的构建非常重要,但部署60个应用程序会产生操作问题。你有类似的情况吗?这就是您处理它的方式吗?我们总是显式地对所有依赖项进行版本控制,只使用maven/nexus/