Почему есть разница между ./gradlew clean build и ./gradlew clean: build - PullRequest
0 голосов
/ 20 ноября 2018

У меня следующая ситуация:

У меня есть проект с несколькими подпроектами.Сегодня я попытался построить проекты с Gradle через командную строку.

Сборка прошла успешно, когда я выполнил ./gradlew clean :build, но не с ./gradlew clean build.Это вызывает разные ошибки, в зависимости от того, какие подпроекты активированы. Почему это?Разве это не должно быть одинаково?

Обе команды выполняются непосредственно друг за другом, без изменений в коде, и из одного и того же каталога (базовый каталог, где находится settings.gradle).

Gradle-обновление Intellij работает, сборка прошла успешно (но не на нашем сервере сборки, если это уместно).

Согласно документации https://docs.gradle.org/current/userguide/command_line_interface.html#executing_tasks_in_multi_project_builds Я предположилчто он будет делать то же самое, поскольку подпроект не указан, и задача сборки выполняется для всех подмодулей. В корневом проекте нет папки с именем build, поэтому это не должно вызывать путаницу. Я неправильно понимаю?

Я искал в Интернете, однако не смог найти результат, поскольку : не распознается большинством поисковых систем, а colon приводит к несоответствующим результатам, таким как Что такое оператор двоеточия вGradle? .

Версия Gradle 4.10.2

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 22 ноября 2018

Существует разница между ./gradlew clean :build и ./gradlew clean build, поэтому у вас другое поведение: в первом случае вы используете полное имя задачи, в другом - простое имя задачи.Эти документы здесь и здесь объясняют эти два подхода к выполнению задач:

  • Использование простого имени задачи (./gradlew test):

Первый подход аналогичен сценарию использования с одним проектом, но в случае многопроектной сборки Gradle работает несколько иначе.Команда gradle test выполнит тестовое задание в любых подпроектах, относящихся к текущему рабочему каталогу, которые имеют эту задачу.Поэтому, если вы запустите команду из корневого каталога проекта, вы запустите test в api, shared, services: shared и services: webservice.Если вы запустите команду из каталога проекта служб, вы будете выполнять ее только в службах: shared и services: webservice.

=>, поэтому выполнение ./gradlew build в корневом каталоге проекта вызоветвыполнение задачи build для корневого проекта и всех подпроектов

  • Использование квалифицированного имени задачи (./gradlew :build)

Для большего контроля над выполнением,используйте квалифицированные имена (упомянутый второй подход).Это такие же пути, как и пути к каталогам, но используйте «:» вместо «/» или «\».Если путь начинается с «:», то путь разрешается относительно корневого проекта.Другими словами, ведущий ':' представляет сам корневой проект.Все остальные двоеточия являются разделителями пути.

=> выполнив ./gradlew :build, вы выполните «только» задачу build для rootProject

Как я уже сказал в комментарии,у вас есть проблемы с одним или несколькими подпроектами, но вы не увидите этих ошибок, если выполните только сборку корневого проекта (./gradlew :build)

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