假设您有一组web应用程序,这些应用程序使用不同版本的通用库,如Spring。我有一个业务逻辑库,它也使用这个公用库。到目前为止,没有问题,但在此过程中,公共库的一个版本更改了抽象类定义,并破坏了业务逻辑库。
所以我最终得到了一个兼容的版本表,看起来像这样…
business-lib-version | common-lib-version
1.0 | 1.0
1.1 | 2.0
我不希望业务lib版本驱动消费应用程序中的公共lib版本。相反,我希望根据公共库选择正确版本的业务库。我非常确定这是不可能的,所以我继续主要问题。
有没有一种优雅的方法来检测版本不兼容性?理想情况下,我喜欢构建时解决方案,否则早期运行时解决方案就可以了。
我尝试过在Maven中使用版本范围,但由于Maven如何以非标准版本格式对版本进行排序,这给我们带来了许多问题,而且我们在构建时正确解析范围时也遇到了各种问题。
发布于 2012-03-01 17:20:33
如果一个依赖项版本意外地被另一个依赖项阻止,那么Ning dependency-versions-check Maven将使您的构建失败。它不会为你修复它,但它至少会告诉你!
发布于 2012-03-01 16:47:32
有没有一种优雅的方法来检测版本不兼容性?理想情况下,我喜欢构建时解决方案,否则早期运行时解决方案就可以了。
我不知道有什么方法可以很好地做到这一点--无论是在运行时还是在构建时。在不调查清单或jar文件名的情况下,没有标准的机制来确定包的版本--这充其量只是一种技巧。也许有一个我不知道的maven插件可以自动完成这个任务,但我不知道。
我们只需修复代码所需的库的版本,并在需要时进行升级,要么是因为我们需要额外的功能,要么是因为其他依赖项需要。通常,我们领先于其他依赖项,因此我们在pom.xml
中的依赖项定义中放置一个典型的排除标记
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>${spring-version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
这使我们可以依赖于更高版本的commons-logging
。
但是,如果您使用的是1.0版的库,而您的一个依赖项使用的是2.0版,那么您将不得不尝试使用exclusion
,看看该依赖项是否可以在1.0版中运行--甚至可以编译。如果不是,那么你将被迫升级你的代码以使用2.0或降级依赖项。
很抱歉我不能再帮你了。
https://stackoverflow.com/questions/9518284
复制相似问题