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/

Другие вопросы по тегам