许多jar库的版本兼容性



例如,我在pom.xml中有以下hibernate内容:

<!-- Hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>3.6.10.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-annotations</artifactId>
            <version>3.3.1.GA</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.common</groupId>
            <artifactId>hibernate-commons-annotations</artifactId>
            <version>4.0.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.2.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-envers</artifactId>
            <version>3.6.10.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>3.6.10.Final</version>
        </dependency>

现在工作良好。但目前我需要将hibernate的核心版本更改为5。我害怕我的变化。据我所知,库具有向后兼容性是罕见的。但在更改主版本后,这是绝对不可能的。

如何确定各自的版本保持休眠的东西

通常团队(在本例中是Hibernate)应该提供其各种库的兼容性矩阵。

即使他们不这样做,通常也不难自己判断。所有库的最新版本通常应该是兼容的,所以如果您打算将所有库升级到最新版本,那么升级可能会很顺利。

在您的情况下,hibernate-core, hibernate-envershibernate-entitymanager似乎遵循相同的版本号,因此您可以为这些库使用5.0.0.Beta2。只需使用其余库的最新版本(几乎所有库看起来都像实用程序,所以我希望它们与上面的核心库兼容)。

你必须尝试这些组合,看看哪一个有效。在这些情况下,拥有一组强大的测试套件通常会有所帮助。

Maven材料清单(BOM)提供了这样一个功能,我们可以在其中包含我们需要的工件,但是版本不需要显式定义,版本将从BOM文件中引用,这将有助于维护已定义工件的最新版本。更多详情及例子载于以下连结:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

另一个JBoss的例子,我发现:http://www.mastertheboss.com/jboss-frameworks/maven-tutorials/jboss-maven/maven-and-jboss-how-to-use-boms

最新更新