Это определенно вопрос для начинающих, но я просто не могу заставить его работать.
У меня есть библиотека и приложение, которое зависит от библиотеки.
.
/ library
/ application
Iможете установить библиотеку через gradle install
в ./library
, затем получить приложение, зависящее от библиотеки через группу / имя / версию, и взять библиотеку через репозиторий mavenLocal()
в приложении build.gradle
, затем собратьприложение в папке application
. И это работает.
Но я бы хотел, чтобы у меня был проект, и у меня могла бы быть одна команда для сборки приложения и, при необходимости, библиотека тоже (похоже на флаг maven -am
).
Вот что у меня сейчас, в родительской папке, build.gradle
:
subprojects {
apply plugin: "java"
repositories {
mavenCentral()
}
}
project(':application') {
dependencies {
compile project(':library')
}
}
и в той же папке у меня settings.gradle
:
include ':library', ':application'
Опять же, если я захожу в папку библиотеки и запускаю gradle install
, это работает. Я получаю артефакт в моем ~/.m2
.
Но теперь с описанной мной конфигурацией, если я иду в корневую папку и запускаю gradle shadowJar
.. и задача shadowJar присутствует только в application
,затем gradle пытается скомпилировать библиотеку, но терпит неудачу, по-видимому, потому, что она не определяет зависимости библиотеки.
* What went wrong:
Execution failed for task ':library:compileJava'.
> Compilation failed; see the compiler error output for details.
ошибки похожи, например:
Задача:библиотека: compileJava FAILED ... / DateTimeAdapter.java:5: ошибка: пакет javax.xml.bind.annotation.adapters не существует import javax.xml.bind.annotation.adapters.XmlAdapter;
и, конечно же, это зависимости в библиотеке / build.gradle =>
implementation 'com.fasterxml.jackson.core:jackson-core:2.8.8'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.8.8'
Поэтому мой вопрос заключается в том, как указать зависимость приложения от библиотеки, чтобы я мог выполнить одну команду и получить mavenесли нужно, создайте библиотеку, а затем приложение. Я думал, что то, что я сделал, получило бы первую часть, но это не удалось, по-видимому, из-за транзитивных зависимостей библиотеки. Я действительно ожидаю, что мне нужно обработать вторую часть после этого, то есть как указать зависимость в приложении build.json. Возможно, мне придется перейти от указания координат группы / имени / версии maven к названию проекта, но я еще не дошел до этого.
Я бы определенно не хотел перечислять зависимости библиотеки в корневом граделеfile: мне бы хотелось, чтобы библиотека обрабатывала свои зависимости, и, применяя свои зависимости, я хотел бы, чтобы размер корневого файла gradle был небольшим.