Что такое maven-эквивалент зависимостей реализации в gradle? - PullRequest
0 голосов
/ 25 сентября 2018

Я недавно узнал, что у gradle есть api / implementation "области видимости" для зависимостей , и я пытался выяснить, есть ли maven-эквивалент implementation в gradle.Ни одна из областей зависимостей maven не кажется абсолютно подходящей для этого - provided не делает ее зависимостью во время выполнения, compile / runtime, кажется, не делает правильную вещь, ... и поэтому кажется, что нет прямойэквивалент.

По сути, у меня есть зависимость от моей библиотеки, которая требуется во время компиляции (для моей библиотеки) / времени выполнения (для кода, использующего мою библиотеку), но я не хочу находиться в compile classpath кода, который зависит от моей библиотеки.Можно ли это сделать с maven?

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018
  • У такой зависимости должна быть область видимости = compile, когда она объявлена ​​в вашей библиотеке.Таким образом, он будет доступен во время компиляции библиотеки.
  • Но у него должна быть область видимости = время выполнения, когда она объявлена ​​в разделе dependencyManagement других модулей, которые зависят от вашей библиотеки.Таким образом, он не будет присутствовать в пути к классам при компиляции других модулей.
0 голосов
/ 25 сентября 2018

Можете ли вы быть более конкретным и привести пример архитектуры (модуль, подмодули)?

Если у меня есть следующие модули:

  • A: есть зависимость от зависимости x область компиляции
  • B: есть зависимость от зависимости A область компиляции

Теперь я хочу, чтобы x находился в пути к классам и компилировался во время сборки A, но я не хочу, чтобы x в пути к классам B

Что ж, вы получите xв B, потому что это транзитивная зависимость, но вы можете легко исключить ее (когда вы объявите зависимость A в B), поэтому она не будет в пути к классам.

<dependencies>
    <dependency>
      <groupId>test.test</groupId>
      <artifactId>B</artifactId>
      <version>1.0-SNAPSHOT</version>
      <exclusions>
        <exclusion>
          <groupId>test.test</groupId>
          <artifactId>x</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>

Для получения дополнительной информации: https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

0 голосов
/ 25 сентября 2018

AFAIK это невозможно.

Если вы хотите избежать непреднамеренного использования транзитивных зависимостей в вашем коде, вы можете использовать dependency:analyse или dependency:analyze-only.

Последняя позволяет вам отказаться от сборки, если вы используете напрямуюклассы из транзитивных зависимостей.

...