当前位置: 首页 > 知识库问答 >
问题:

Gradle:使用spring boot的多项目构建

司马德水
2023-03-14

我是Gradle的新手,我刚刚开始使用多项目构建。目前,我正在为服务使用spring boot,我有以下目录结构

|- api-web (module)
|-- build.gradle
|- api-admin (module)
|-- build.gradle
|- build.gradle (root)
|- settings.gradle

下面是根的配置

建筑格拉德尔(根)

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.2.2.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
}

description = "Company Multi-Project"

ext {
    springBootVersion = '2.2.2.RELEASE'
}

bootJar {
    enabled = false
}

allprojects {

    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8

    repositories {
        mavenCentral()
    }
}

subprojects {

    group = 'com.company'
    version = '0.0.1-SNAPSHOT'

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

    jar {
        enabled = true
    }

    bootJar {
        enabled = false
    }

    dependencies {

        // Lombok annotation processor
        annotationProcessor 'org.projectlombok:lombok'

        compileOnly 'org.projectlombok:lombok'
    }
}

设置。格拉德尔(根)

rootProject.name = 'core'

include 'common'
include 'api-web'
include 'api-admin'

模块的Gradle配置

API-admin(模块)

jar {
    manifest {
        attributes 'Main-Class': 'com.company.apiadmin.ApiAdminApplication'
    }
}

dependencies {
    implementation project(':common')
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

我添加了jar闭包以防止运行时出错。这避免了它无法运行时说“没有清单”的问题

然而,即使在添加了jar闭包之后,现在也出现了一个新问题

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication

现在我知道这是说找不到类,但我的问题是它是如何发生的,为什么以及如何克服这一点。我已经尝试了媒体、StackOverflow和博客文章中的大多数建议。没有任何帮助。非常感谢你的帮助。谢谢

共有1个答案

钮巴英
2023-03-14

我为自己找到了解决方案,这有点棘手,但最终,我找到了

主要的一点是,你一定要添加sping-boo-gradle-plugin,这将解决你所有的NoClassDef错误和No Manifelding错误。要添加此内容,您应该在根build.gradle文件中定义一个构建脚本

buildscript {
    ext {
        springBootVersion = "2.2.2.RELEASE"
    }

    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion"
    }
}

然后你应该为你的项目定义插件

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.2.2.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
}

然后,您可以像通常那样定义所有子项目所有项目

然后在模块中,在每个子模块中添加这些行

apply plugin: 'org.springframework.boot'

bootJar {
    launchScript() // optional
}

dependencies {

    // your module-specific dependencies
}

和你通常会有的依赖关系。

就这样,现在您可以使用gradle构建并执行。jar文件,就像您通常使用的那样。:-)

 类似资料:
  • 主要内容:多项目构建的结构,指定常规构建配置,项目指定配置和依赖关系,Gradle多项目构建的示例,子项目配置,参考可以轻松处理各种大小规模的项目。小项目由一个单一的构建文件和一个源代码树构成。 大项目可以将其拆分成更小的,相互依赖的模块,以便更容易理解。Gradle完美支持这种多项目构建的场景。 多项目构建的结构 这种构建有各种形状和大小,但它们都有一些共同的特点 - 在项目的根目录或主目录中都有一个文件。 根目录或主目录都有一个文件。 具有自己的构建文件的子目录(某些多项目构建可能会省略子项

  • 主要内容:1- 介绍,2- 示例模型,3-创建项目数学库,4- 创建另一个项目:MathWebApp,5- 创建GradleMain项目,6- 构建项目,7- 运行MathWebApp1- 介绍 本教程文章基于: Eclipse Java EE IDE for Web Developers. Version: Mars.1 Release (4.5.1) 如果您是初学者Gradle的。那么建议先看看初学者Gradle(Gradle Hello world)的文章: http://www.yiib

  • 我尝试使用gradle构建工具构建一个简单的android应用程序。但是我得到了这样的错误 方法无签名:org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.compile()适用于参数类型:(java.lang.String)值:[org.gradle.api.plugins: gradle and

  • 在使用GradleV5.5.1的多项目构建中,我尝试将插件仅应用于某些子项目(如使用插件中所述)。您可以在这里看到,我试图将它应用于以结尾的子项目: 但是,它将其应用于我的项目(输出日志): 我做错了什么??

  • 我正在改变我们的项目,以使用gradle作为构建工具,但正在与2个问题斗争;

  • 问题内容: 我对Gradle(和Java 9,说实话)还很陌生,并且我正在尝试使用Gradle构建一个简单的库项目,该项目混合了Java 9和Kotlin。更详细地讲,在Java中有一个接口,在Kotlin中有一个实现。我会在Kotlin中做所有事情,但是无论如何都是Java,所以我决定采用这种方式。 我建立在IntelliJ Idea的基础上,外部定义了1.2.0 kotlin插件和gradle