java - 如何用多项目和 Gradle 构建一个胖 jar?

我是 Gradle 的新手,正在努力构建一个 https://docs.gradle.org/current/samples/sample_building_java_applications_multi_project.html

我正在尝试与此处提到的相同:https://stackoverflow.com/questions/20008324/gradle-multiple-jars-from-single-source-folder/20010200#20010200

我有三个包,依赖是:PandaService => PandaServiceDataAccessLayer => PandaDatabaseDocker

现在我想为 PandaService 构建一个胖罐子。但是,我无法获得 ./gradlew build 工作。现在它抱怨 Plugin with id 'org.springframework.boot' not found. 我该如何解决?

还将感谢有关更改 build.gradle 以遵循最佳实践的任何建议。

更多信息

这是 PandaServicesettings.gradle

rootProject.name = "PandaService"
include "PandaService"
include "PandaDatabaseDocker"
include "PandaServiceDataAccessLayer"

这是 PandaServicebuild.gradle

subprojects {
    apply plugin: 'java'
}

project(':PandaDatabaseDocker') {
    sourceSets {
        main {
            java {
                srcDir '../src'
                include 'PandaDatabaseDocker/**'
            }
        }
    }
}

project(':PandaServiceDataAccessLayer') {
    sourceSets {
        main {
            java {
                srcDir '../src'
                include 'PandaServiceDataAccessLayer/**'
            }
        }
    }
    dependencies {
        implementation project(':PandaDatabaseDocker')
    }
}

project(':PandaService') {

    repositories {
        mavenCentral()
    }

    group = 'PandaService'
    version = '0.0.1'
    sourceCompatibility = '11'
    targetCompatibility = '11'

    apply plugin: 'java'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'

    sourceSets {
        main {
            java {
                srcDir '../src'
                include 'PandaService/**'
            }
        }
    }
    dependencies {
        // Add depended local modules
        implementation project(':PandaServiceDataAccessLayer')

        // Spring boot + Jersey
        implementation 'org.springframework.boot:spring-boot-starter-parent:2.6.4'
        implementation 'org.springframework.boot:spring-boot-starter-web'
        implementation 'org.springframework.boot:spring-boot-starter-jersey'
        compileOnly("org.springframework.boot:spring-boot-devtools")
        testImplementation 'org.springframework.boot:spring-boot-starter-test'

        // Swagger
        implementation 'io.swagger:swagger-jersey2-jaxrs:1.6.5'

        // Lombok
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'

        // log
        implementation 'org.springframework.boot:spring-boot-starter-web'
        implementation 'org.springframework.boot:spring-boot-starter-log4j2'


        // RDS Connection
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        runtimeOnly 'mysql:mysql-connector-java:8.0.27'

        // AWS secretes manager
        implementation 'com.amazonaws.secretsmanager:aws-secretsmanager-jdbc:1.0.6'

        // JOOQ
        implementation 'org.springframework.boot:spring-boot-starter-jooq'

        // HikariCP
        implementation 'com.zaxxer:HikariCP:5.0.1'
    }

    //create a fat Jar with all dependencies
    jar {
        duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
        dependsOn configurations.runtimeClasspath
        from {
            configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
        }
        manifest {
            attributes "Main-Class": "com.PandaService.MainApplication"
        }
    }

    configurations {
        all*.exclude module: 'spring-boot-starter-logging'
        all*.exclude module: "logback-classic"

        compileOnly {
            extendsFrom annotationProcessor
        }
    }

    test {
        useJUnitPlatform()
    }
}

相似文章

随机推荐

最新文章