我正在创建一个本身具有依赖关系DEP的maven插件。 DEP可以是多个版本之一。我需要的是消费者必须明确提及DEP及其版本。我不希望消费者对DEP使用隐式依赖,并在发布新DEP时自动获取新版本。
这就是我现在所拥有的,但这意味着如果没有在消费者的pom中指定DEP,那么他们将始终获得最新的。
在我的插件的依赖部分中,我有这个:
<dependencies>
<dependency>
<groupId>org.foo.bar</groupId>
<artifactId>DEP</artifactId>
<version>[1.8.3-01,9.9.9)</version>
</dependency>
...
</dependencies>
然后,有人使用我的插件:
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<compilerId>my-compiler-id/compilerId>
</configuration>
<dependencies>
<dependency>
<groupId>org.foo.bar</groupId>
<artifactId>my-compiler</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
在上面的案例中,一切都适用于消费者,他们始终获取最新版本的DEP
。如果他们想要一个特定版本的`DEP,那么他们需要在他们的pom中明确地添加它,就像在maven-compiler-plugin的依赖项部分中那样:
<dependency>
<groupId>org.foo.bar</groupId>
<artifactId>DEP</artifactId>
<version>1.8.6-09</version>
</dependency>
现在,这个额外的显式依赖是可选。如果缺少,则使用最新版本。我想将此依赖强制。我该怎么做?
答案 0 :(得分:1)
您应该能够将DEP定义为“可选”依赖项,如以下问题和链接博客文章中所述:
Best strategy for dealing with optional dependencies
http://axelfontaine.com/blog/optional-dependencies.html
基本上只是:
<dependency>
<groupId>org.foo.bar</groupId>
<artifactId>DEP</artifactId>
<version>1.8.6-09</version>
<optiona>true</optional>
</dependency>
现在,您的用户在使用此插件时必须显式添加此依赖项,否则会遇到错误。
可能还有一些方法可以实现相同的结果,但有更多信息性错误消息 - 使用Maven Enforcer Plugin或writing a custom plugin包装/扩展编译器插件,但<optional>
可能是最方便的方法。