要求对传递依赖关系的显式maven依赖

时间:2013-06-25 18:55:31

标签: maven dependencies maven-plugin

我正在创建一个本身具有依赖关系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>

现在,这个额外的显式依赖是可选。如果缺少,则使用最新版本。我想将此依赖强制。我该怎么做?

1 个答案:

答案 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 Pluginwriting a custom plugin包装/扩展编译器插件,但<optional>可能是最方便的方法。