从另一个依赖项明确指定依赖关系

时间:2016-06-10 02:29:40

标签: java maven

我正在编写一个具有以下依赖关系的库:

```

<dependency>
  <groupId>io.dropwizard.metrics</groupId>
  <artifactId>metrics-servlets</artifactId>
  <version>[3.1.0,)</version>
</dependency>
<dependency>
  <groupId>io.dropwizard.metrics</groupId>
  <artifactId>metrics-core</artifactId>
  <version>[3.1.0,)</version>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-servlet</artifactId>
  <version>9.3.2</version>
  <scope>provided</scope>
</dependency>

```

现在的问题是 - 这个库的一些用户也将它与dropwizard-core一起使用,在这种情况下,我的库为dropwizard框架提供了一些额外的功能,因此dropwizard-core是一个可选的依赖项。

问题是 - 当用户导入dropwizard-core时 - 它会自动包含我在上面指定的其他依赖项(例如metrics-core),在这种情况下 - 通过dropwizard-core导入的版本可能会与版本明确指定。我该如何解决这个问题?

此库的一组用户将使用它 - 没有dropwizard-core,因此我不希望这些用户导入dropwizard-core(因此原子依赖性)。

1 个答案:

答案 0 :(得分:0)

您有两种选择。您应该根据使用模式选择一个。例如,大部分时间排除或包含的额外依赖性是什么?

<强> 1。明确排除(默认情况下包括)

保持原样,然后要求用户在必要时排除额外内容:

<dependency>
  <groupId>some.group.id</groupId>
  <artifactId>something-important</artifactId>
  <exclusions>
    <exclusion>
      <groupId>some.group.id</groupId>
      <artifactId>something-extra</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<强> 2。默认情况下排除(明确包含)

修改你的pom.xml:

<dependency>
  <groupId>some.group.id</groupId>
  <artifactId>something-extra</artifactId>
  <optional>true</optional>
</dependency>

OR

<dependency>
  <groupId>some.group.id</groupId>
  <artifactId>something-extra</artifactId>
  <scope>provided</scope>
</dependency>

使用可选项,如果暗示您的库可以在没有它的情况下正常工作,只是某些部分可能无法正常工作。当暗示您的图书馆需要它时提供使用,但是由用户决定从哪里获取它(或者哪个实现)。

请参阅两者的文档: https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html