2

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

现在,这个额外的显式依赖是可选的。如果缺少,则使用最新的。我想让这种依赖成为强制性的。我怎么做?

4

1 回答 1

1

您应该能够将您的 DEP 定义为“可选”依赖项,如以下问题和链接的博客文章中所述:

处理可选依赖的最佳策略

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编写自定义插件来包装/扩展编译器插件,但这<optional>可能是最方便的方法。

于 2013-06-26T17:33:42.167 回答