在 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 插件中选择依赖版本的主要内容,如果未能解决你的问题,请参考以下文章