在 maven 和 maven 插件中选择依赖版本

Posted

技术标签:

【中文标题】在 maven 和 maven 插件中选择依赖版本【英文标题】:Choosing dependency version in maven and maven plugin 【发布时间】:2011-08-27 04:06:09 【问题描述】:

我有一个使用 hsqldb 1.8.0.10 的 maven 插件。在插件的 pom.xml 中,它是这样声明的:

<dependency>
    <groupId>hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>1.8.0.10</version>
</dependency>

但是如果我从另一个 maven 项目运行该插件,并且该项目具有较新版本的 hsqldb(例如 1.9.0),我如何配置我的插件,他将使用最新版本的 hsqldb,而不更改它pom.xml?

是否也可以反过来做呢?如果我的其他 maven 项目使用 hsqldb 1.7.0(例如),他将使用 maven 插件本身中指定的 1.8.0.10 版本?

希望有人能回答我的问题。

亲切的问候,

华尔

【问题讨论】:

我是否理解正确,您正在创建插件或使用具有 mojo.codehaus.org/sql-maven-plugin/usage.html 之类的依赖项的插件? 【参考方案1】:

您的主要问题是可能的,但如果插件由于任何原因不能与较新的代码一起使用,它可能无法正常工作。

插件可以有它自己的个人依赖部分,并且会使用标准的 Maven 依赖解析,选择请求的最高版本。所以,你可以这样做

<plugin>
    <groupId>some.group.id</groupId>
    <artifactId>some.artifact.id</artifactId>
    <version>someversion</version>
    <dependencies>
        <dependency>
            <groupId>hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>1.9.0</version>
        </dependency>
    </dependencies>
</plugin>

不过,我认为反过来是不可能的。

【讨论】:

实际上是不可能的。项目和插件的类加载器是隔离的(尤其是在 Maven 3 中)。如果您需要插件的同一库的另一个版本,请使用此答案。如果您想要项目依赖项的另一个版本,则必须在 pom.xml 中更改它。 Maven 是否会通过包含插件来解决项目依赖关系,这将是地球上的地狱 :)【参考方案2】:

为版本使用属性占位符,比如 $hsqldb.version 然后在不同的项目 pom 中声明你想要放入其中的版本

【讨论】:

以上是关于在 maven 和 maven 插件中选择依赖版本的主要内容,如果未能解决你的问题,请参考以下文章

使用Maven Helper解决Maven插件冲突

依赖管理中的依赖与 Maven 版本插件中的依赖

是否有一个 Maven 插件可以验证传递依赖项的冲突版本?

idea使用Maven Helper插件排除依赖冲突

关于maven的规则插件:Maven Enforcer plugin

未指定版本的 Maven 兄弟模块依赖