Весенний загрузочный мультипроект с Gradle генерирует ту же банку - PullRequest
1 голос
/ 28 апреля 2020

Я новичок в gradle, и у меня возникают проблемы при создании нескольких банок с пружинной загрузкой. Я генерирую две разные сборки, но когда я запускаю сборку A или сборку B, обе имеют A

Мой проект имеет следующую структуру:

root
├── facade
     ├─── rest-api
     └─── web-api

├── dependencies
     ├─── services
     ├─── entities
     └─── ...

├── settings.gradle
└── build.gradle

Я намерен сделать моно репо микро услуги. Микро сервисы, которые я буду генерировать, это модули web api и rest api каталога фасадов. Эти модули имеют зависимости от модуля, называемого зависимостями, как указывает его имя.

Как я уже говорил ранее, когда я запускаю модуль web api, я запускаю rest api, даже запрашивая его зависимости.

Мой settings.gradle :

rootProject.name = "root"

include ":root:facade:rest-api"
include ":root:facade:web-api"



include ":root:dependencies:entities"
include ":root:dependencies:services"
...

И мой build.gradle

buildscript {
    ext.kotlin_version = '1.3.61'
    ext.spring_boot_version = '2.2.2.RELEASE'
    ext.jjwt_version = '0.10.6'
    ext.klockVersion = "1.7.3"
    ext.queryDslVersion = '4.1.4'
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
    }
}

group 'org.com'
version '0.1.0'


def javaProjects() {
    return subprojects.findAll { new File(it.projectDir, "src").exists() }
}

subprojects {
    repositories {
        jcenter()
        mavenCentral()
    }

    configure(javaProjects()) {
        apply plugin: "java"
        apply plugin: "java-library"
        apply plugin: "org.jetbrains.kotlin.jvm"
        apply plugin: 'kotlin'
        apply plugin: "kotlin-spring"
        apply plugin: "kotlin-jpa"
        apply plugin: 'org.springframework.boot'
        apply plugin: 'io.spring.dependency-management'
        compileKotlin {
            kotlinOptions.jvmTarget = "1.8"
        }
        compileTestKotlin {
            kotlinOptions.jvmTarget = "1.8"
        }


        dependencies {
            implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
            implementation "io.jsonwebtoken:jjwt-api:$jjwt_version"
            implementation "io.jsonwebtoken:jjwt-impl:$jjwt_version"
            implementation "io.jsonwebtoken:jjwt-jackson:$jjwt_version"
            implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

            implementation "com.soywiz.korlibs.klock:klock-jvm:1.7.3"
            implementation "org.jetbrains.kotlin:kotlin-reflect"

            implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
            implementation 'org.springframework.boot:spring-boot-starter-data-rest'
            implementation "org.springframework.boot:spring-boot-starter-web"
            implementation("org.springframework.boot:spring-boot-starter-security")

            implementation "org.postgresql:postgresql:42.1.3"

            implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'

            implementation "khttp:khttp:1.0.0"

            testImplementation('org.springframework.boot:spring-boot-starter-test') {
                exclude module: 'junit'
                exclude module: 'mockito-core'
            }

            testImplementation('org.junit.jupiter:junit-jupiter:5.5.2')
            testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
            testImplementation('com.ninja-squad:springmockk:2.0.0')
        }

        allOpen {
            annotation("javax.persistence.Entity")
            annotation("javax.persistence.MappedSuperclass")
            annotation("javax.persistence.Embeddable")
        }
    }
}

project(":root:dependencies:services") {
    bootJar {
        enabled = false
    }
    jar {
        enabled = true
    }
}
project(":root:dependencies:entities") {
    bootJar {
        enabled = false
    }
    jar {
        enabled = true
    }
}

...

Я чувствую, что я должно быть что-то не так с build.gradle, но я не понимаю, что.

Я также пропустил файлы build.gradle модулей rest api и web api, поскольку у меня есть только зависимости, и я не считаю это уместным.

Ранее я работал с Maven и следовал этой архитектуре. Я не знаю, подходит ли gradle, поэтому я открыт для любых советов, которые вы можете мне дать.

Спасибо за ваше внимание.

1 Ответ

0 голосов
/ 28 апреля 2020

Как я уже упоминал в комментариях, правильный способ включить подпроекты состоит в том, чтобы заменить путь к подпроекту на :, т. Е. Если подпроект находится в (из проекта root) sub / project1, то правильный путь чтобы включить это:

include ':sub:project1'

Теперь что касается вашего другого вопроса в комментариях относительно:

Имя основного класса не настроено, и оно не может быть решено

Вы можете просто сделать:

mainClassName = 'full.cannonical.name.of.MainClass'

Если у всех проектов есть основной класс, то вам нужно сделать это в build.gradle каждого проекта

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