Liferay 版本和正确的依赖关系

Liferay versions and correct dependencies

我对 Liferay、Maven 和 Java 比较陌生,所以这可能更像是一个关于依赖关系的一般性问题。我正在维护一个已从 6.2 迁移到 7.1 的 Liferay portlet,并且有许多带有版本号的 Liferay maven 依赖项(例如 com.liferay.portal.kernel)。

如何知道要将这些依赖项的哪些版本用于他们正在使用的产品版本?

这是一个典型的案例,即使产品版本落后于次要版本,也应该始终尝试使用最新版本的依赖项吗?

how does one know which versions of these dependencies one is to use for the version of the product that they are using?

有多种方法可以了解您正在使用的依赖项版本。最简单的方法是打开包的 jar 文件并查看清单文件。

当然,打开清单非常乏味。您可以使用系统的 Gogo shell 获取有关 运行ning 系统上的捆绑包的信息。

或者您可以查找对 git 的依赖。使用与您的系统对应的 Liferay 标签,并从您在 bnd 文件中看到的版本的次要部分减去 1。

最后,日志可以帮助您判断何时缺少依赖项或存在版本号不匹配的包版本。

就个人而言,我会说 Gogo shell 和应用程序管理器选项是最简单的方法..但有时您已经在 git..


is this a typical case where one should always be trying to use the most recent version of dependencies even if the version of the product is a minor release behind?

不,这对你来说不是一件好事。尽管版本方案的次要部分通常表明事情不太可能崩溃,但它们确实如此。如果您使用在次要版本中添加的方法,在您的 运行ning 系统上该方法将不可用并且调试可能会令人困惑,因为您会清楚地看到您 IDE 甚至不存在自动完成东西。

此外,使用最新版本编译模块并没有真正的优势,因为系统上的 运行ning 没有更新,运行ning 是一个随您的产品一起提供的(如果您没有更改它,甚至没有将其安装或嵌入到您的模块中......但如果你对你的捆绑包进行了调整,那么由你来跟踪......)。

您可以使用像 3.1.+ 这样的版本范围来构建您的模块,假设使用该依赖项编译的模块将在 运行ning 系统中使用它的所有点版本。如果已知依赖项与自身的旧版本兼容,则可以使用旧版本构建,而系统将 运行 一个较新的版本。 Liferay 在他们自己的代码中一直这样做(有时隐藏在 default 一词中)。当然,如果您这样做,您将无法享受最新功能和 IDE 提供的自动完成和验证。

您还需要注意,在基于 OSGi 的系统中,同一库的多个版本是可能的。有时,只有一个 运行s(单例),但有时 运行 时间会有多个可用...因此,您可以选择最新的可用...

所以,简而言之:如果您的系统不会 运行ning,请不要使用最新版本来构建它。也许一个范围有效,但您需要根据其版本控制方案检查该依赖项是否真正关心在该范围内兼容。


有用的链接:

确保再次编译目标环境中的 JAR 版本的最简单方法可能是使用相应的 BOM(material 清单)。

你可以看看这个 code sample's POM for Liferay Portal 7.2 例如。请注意指示要使用哪个 BOM 的 dependencyManagement

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.liferay.portal</groupId>
                <artifactId>release.portal.bom</artifactId>
                <version>${portal.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

然后请注意 com.liferay.portal.kernel JAR 的实际依赖项如何没有指定版本。

        <dependency>
            <groupId>com.liferay.portal</groupId>
            <artifactId>com.liferay.portal.kernel</artifactId>
        </dependency>

JAR 版本将从 BOM 中获取,以确保它与给定版本的 Liferay Portal 包含的版本相匹配。

为了比较,这里是exact same POM but for Liferay Portal 7.1。如您所见,唯一的区别是 portal.version 属性。