[英]Maven dependency management for plugin dependencies
最近,我遇到了以下问题:
当我为我的项目设置依赖项管理时,我使用带有依赖项的插件的 child-pom,我希望与我的依赖项管理中声明的依赖项同步。
在根 pom 中,我在依赖管理中声明:
<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>2.4.0</version>
</dependency>
...
<dependencies>
<dependencyManagement>
在子 pom 中,我有一个需要 gwt-user 的插件:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>2.4.0</version>
<dependencies>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>2.4.0</version>
</dependency>
...
</dependencies>
...
</plugin>
但是,如果我删除 gwt-maven-plugin 中使用的依赖版本,则编译失败。
有没有另一种方法来实现它?
PS:有一篇相关的帖子在 maven 和 maven 插件中选择依赖版本没有回答我的问题
根据以下链接,似乎不可能:
这是我找到的解决方法,我想与大家分享,以防其他人遇到同样的问题:
在我的根 pom 中,我定义了一个属性、一个依赖管理和一个插件管理:
<properties>
<gwtVersion>2.4.0</gwtVersion>
<gwtMavenPluginVersion>2.4.0</gwtMavenPluginVersion>
</properties>
<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>${gwtVersion}</version>
</dependency>
...
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>${gwtMavenPluginVersion}</version>
<dependencies>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>${gwtVersion}</version>
</dependency>
...
</dependencies>
...
</plugins>
...
</pluginManagement>
</build>
而在我的子 pom 中,使用插件管理提供的关系(参见Maven2 -插件管理和父子关系的问题),我只是声明了插件依赖:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
</plugin>
现在,如果我更改属性中的版本,它会自动影响所有直接依赖项和插件依赖项。
为了让父 POM 控制子使用的插件版本,您应该在父 POM 的<pluginManagement>
部分声明<plugin>
。
你定义com.google.gwt:gwt-user
作为<dependency>
在<dependencyManagement>
部。
我不确定您是打算将gwt-user
用作插件还是依赖项,但它应该在两者中列为相同的实体,以便继承工作。
另一种可能是导入父 POM 的所有依赖项:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>2.4.0</version>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<version>${project.version}</version>
</dependency>
...
</dependencies>
...
</plugin>
不是最漂亮的解决方案,但工作:-)
在我的例子中,我使用了 jetty maven 插件,依赖于 hsqldb。 我从 sonatype 书中复制了一些示例行(我认为这是我从那里得到这些行的)以使用 jetty 插件,该插件将 groupId 指定为 hsqldb。 我正在使用 hsqldb 的 2.3.2 版。 在dependencyManagement 部分的父pom 和持久性模块中,groupId 是org.hsqldb。 groupIds 不匹配是导致我收到错误的原因,因为在旧的 groupId 下没有版本 2.3.2。 一旦我将 groupId 从 hsqldb 更改为 org.hsqldb 一切都开始工作了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.