Компилируйте классы Java только в многопроектных сборках для взаимозависимых проектов.

Мой вопрос касается межпроектных зависимостей и полученных JAR-файлов.

Структура проекта похожа на эту

root
 -- :a
 -- :b
 -- :c
 -- :d

Зависимости следующие (при этом :d не имеет зависимостей)

a -> b -> c -> d

Компиляция :dсодержит все *.classфайлы в :d. Компиляция :cсодержит исходники, сгенерированные для :dи :c. Все идет нормально.

Однако, когда я компилирую root, он создает JAR для :d, затем компилирует и создает банку для :c, которая включает CLASS файлы :d. Это идет до самого верха.

Проект rootпо-прежнему будет содержать скомпилированные подпроекты только один раз, но папка build\libs также будет содержать все промежуточные JAR-файлы.

Я запустил сборку с помощью --profile и заметил, что упаковка JAR-файлов занимает довольно много времени по сравнению с общим процессом сборки.

Зависимые проекты включаются в соответствующие файлы build.gradle следующим образом (пример для :bи :c)

Проект C

dependencies { compile project(':d') }

Проект Б

dependencies { compile project(':c') }

На самом деле весь проект состоит примерно из 100 подпроектов и большого количества взаимозависимых проектов.

Есть ли способ скомпилировать CLASSfiles без создания JAR?

Любая помощь в этом будет принята с благодарностью.

Упомянутый возможный повторяющийся вопрос не относится к многопроектным сборкам или межпроектным зависимостям.


person Daniel Einars    schedule 22.11.2018    source источник
comment
Возможный дубликат Могу ли я удалить задачу "jar" в сборке gradle? ?   -  person UninformedUser    schedule 22.11.2018
comment
@AKSW Я только что попробовал gradle build -x jar, и он не компилирует межпроектные зависимости. Я пытаюсь настроить все промежуточные проекты с помощью jar.enabled = false, кроме того, который отвечает за сборку дистрибутива.   -  person Daniel Einars    schedule 22.11.2018
comment
@AKSW, применяющий jar.enabled = false к промежуточным проектам, ломает сборку. Любые другие предложения?   -  person Daniel Einars    schedule 22.11.2018


Ответы (1)


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

Мы думаем о том, чтобы красиво отделить все, чтобы каждый модуль был библиотекой, которую можно было бы импортировать из внутреннего артефакта.

person Daniel Einars    schedule 04.12.2018