Разрешение Gradle Dependency изменяется с 4.10.3 на 6.1.1 - PullRequest
1 голос
/ 04 февраля 2020

В настоящее время я пытаюсь обновить версию Gradle своих проектов с 4.10.3 до 6.1.1. Проблема, с которой я сталкиваюсь и не могу обернуться, - это изменение разрешения зависимостей. Я не вижу никаких замечаний по этому поводу в руководствах по миграции.

В частности, похоже, что некоторые (или все) переходные процессы теперь игнорируются. Вот настройка в упрощенном виде:

У меня есть проект Main и библиотека Boot . Main зависит от Boot , который выглядит следующим образом:

implementation group: 'com.example', name: 'boot', version: '1.0'

Boot зависит от servlet-api

implementation group: 'javax.servlet', name: 'servlet-api', version: '2.5'

Это один из множества примеров. В 4.10.3 для Main нет проблем со ссылкой на ServletContext. Теперь он работает в моей среде IDE, но задача gradlew compile Java завершается неудачно, говоря, что ServletContext является неизвестным символом.

Похоже, но не совсем так, я не могу передать зависимости от другой источник Вот второй пример: у меня есть проект Сервис и библиотека Commons . Проект Сервис имеет дополнительный набор источников, называемый api . Теперь Сервис содержит следующие зависимости

apiImplementation group: "com.example", name: "commons", version: "1.0"

implementaiton sourceSets.api.output

С 4.10.3 это работает отлично, но с 6.1.1 я не могу использовать элементы из commons in Service: главный . Здесь также у меня есть много случаев, когда это терпит неудачу.

Обычно я предполагаю, что я что-то забыл, и я потратил довольно много времени, уже просматривая сеть на предмет подсказок, но видя, как она прекрасно работает с 4.10 .3, но не с 6.1.1 (без других изменений), это должно быть изменение разрешения зависимостей или изменение синтаксиса. В любом случае я не могу найти какую-либо документацию по конкретной теме. Я надеюсь, что кто-то уже сталкивался с этой проблемой и нашел решение.

1 Ответ

1 голос
/ 04 февраля 2020

Ваш основной модуль не может использовать классы сервлетов из-за API и разделения реализации :

Конфигурация api должна использоваться для объявления зависимостей, которые экспортируются библиотечным API тогда как конфигурация implementation должна использоваться для объявления зависимостей, которые являются внутренними для компонента.

Вы используете конфигурацию implementation, поэтому ее зависимости не отображаются транзитивно.

Попробуйте изменить область зависимости сервлета от api или включите зависимость сервлета в основной модуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...