Gradle - один проект, несколько пакетов, несколько банок
Я спрашиваю вас об очень простом вопросе, но я надеюсь, что вы найдете время, чтобы помочь мне:
Я пытаюсь реализовать java-проект, который может выдавать несколько разных программ, которые частично зависят от других моих проектов.
Для простоты я хочу, чтобы весь код в одном проекте выполнялся Gradle, поэтому, если я внесу изменения в центральную библиотеку (например, в соединитель базы данных), все дочерние программы автоматически получат эти изменения.
Пример может выглядеть так:
проект:
- program_A
- central_library
- program_B
выход:
- program_A.jar (включая центральную библиотеку)
- program_B.jar (включая центральную библиотеку)
Теперь у меня серьезные проблемы с поиском правильного buildscript для этого, и мне было интересно, может ли кто-нибудь здесь помочь мне.
PS: Поскольку я новичок в этом, если я должен реализовать это с помощью различных модулей в Gradleproject вместо различных пакетов в исходном файле Gradleprojects, не стесняйтесь сообщить мне:)
3 ответа
Один из способов добиться этого - создать корневой проект, в котором находятся три других проекта.
Укажите подпроекты внутри его settings.gradle
файл:
rootProject.name = 'RootProject'
include 'program_A'
include 'central_library'
include 'program_B'
С этим на месте, program_a
может зависеть от central_library
добавив зависимость в его build.gradle
:
dependencies {
compile project(':central_library')
}
У меня похожая настройка в одном из моих проектов, хотя "центральная библиотека" - это корневой проект, а подмодули - это тестовые среды.
Если я правильно понимаю, то, что вы хотите сделать, это когда вы меняете свои локальные проекты, вы хотите, чтобы другие проекты видели эти детали. Для этого вам нужно опубликовать свои проекты в каком-либо репо, например, в репозитории Maven. Вы можете сделать это из командной строки gradle publishToMavenLocal
, или же gradle build pTMl
, Вы также можете сделать это в файле build.gradle примерно так:
task sourceJar (type : Jar) {
classifier = constants.extSources
from sourceSets.main.allSource
}
publications {
mavenJava(MavenPublication) {
from components.java
artifact(sourceJar) {
classifier "sources" //classifier = constants.extSources
}
}
}
Создайте корневой каталог и поместите каждую библиотеку или программу в свой собственный подкаталог. Создайте gradle-проект в каждом подпроекте. Например, вы можете создать скелетный проект, запустив
gradle init --type=java-library
или же
gradle init --type=java-application
Затем в корневом каталоге создайте многомодульный проект Gradle. В основном бегать только
gradle init
а затем создайте файл settings.gradle и перечислите все подпроекты.
На самом деле это очень хорошо описано в документации gradle: https://guides.gradle.org/creating-multi-project-builds/