gradle多模块 java_SpringBoot多模块项目(Gradle篇)
发布日期:2021-08-20 05:18:42 浏览次数:443 分类:技术文章

本文共 2880 字,大约阅读时间需要 9 分钟。

Gradle Kotlin DSL

1、创建项目

1.1、创建根项目 (parent)

1、使用Spring Initializr创建一个项目

2、删除src

3、修改build.gradle.kts文件,将以下内容移到subprojects里面:

java.sourceCompatibility

dependencies

tasks

简单来说就是把除plugins group version repositories之外的东西都移到subprojects里面

4、将以下内容放在subprojects最前面

subprojects {

apply(plugin = "java")

apply(plugin = "kotlin") // 可选

apply(plugin = "org.springframework.boot")

apply(plugin = "io.spring.dependency-management")

......

}

5、springboot插件后添加apply false

plugins {

id("org.springframework.boot") version "2.2.7.RELEASE" apply false

......

}

6、禁止根项目一切行为(不影响模块)

tasks.forEach {

it.enabled = false

}

禁用以后执行build的时候不会构建parent项目

1.2、创建模块1 (core)

1、在根目录创建文件夹core

2、在core文件夹下创建空白构建文件build.gradle.kts

3、修改根项目的settings.gradle.kts文件,添加

include("core")

4、修改core模块的build.gradle.kts,以标准jar形式打包,方法见下文或源码。

1.3、创建模块2 (web)

1、在根目录创建文件夹web

2、在web文件夹下创建空白构建文件build.gradle.kts

3、修改根项目的settings.gradle.kts文件,添加

include("web")

4、添加core模块依赖。修改web模块的构建文件,添加

dependencies {

implementation(project(":core"))

}

注意模块名前面有"冒号"。嵌套文件夹内的模块也要用"冒号"相连,不能用"斜杠"。

1.4、编写测试代码

1、在core模块下创建Model类 2、在web模块下创建Application和Controller类 3、启动无报错,接口可访问。测试通过

2、错误描述

2.1、项目build失败

Execution failed for task ':bootJar'.

> Main class name has not been configured and it could not be resolved

原因:根项目需禁用springboot插件。见1.1.5

2.2、core模块build失败

Execution failed for task ':core:bootJar'.

> Main class name has not been configured and it could not be resolved

原因:core模块需禁用springboot插件。见3.2

2.3 运行Application报错

ExampleController.java:3: 错误: 找不到符号

import org.misty.springboot.multi.Entity;

^

符号: 类 Entity

位置: 程序包 org.misty.springboot.multi

原因:core模块build失败。同2.2

2.4 Unresolved reference: developmentOnly

spring升级到2.3以后出现这个问题。升级后的一个变化是,原来gradle文件内的val developmentOnly by configurations.creating没有了。 但如果把以前那段代码拷过来又会报新的错误Cannot add a configuration with name 'developmentOnly' as a configuration with that name already exists.,即developmentOnly重复了。

解决方法:

id("org.springframework.boot") version "2.3.0.RELEASE" apply false

移除根项目配置中的apply false。 猜测是因为springboot插件中定义了developmentOnly,但解析根项目的gradle文件是在根项目的上下文中,因此需要在根项目中应用这个插件。

3、Gradle打标准jar包

3.1、方法1

去掉spring-boot-gradle-plugin插件

id("org.springframework.boot") version "2.2.7.RELEASE" // 删除这行

移除插件后,必须手动添加spring-boot相关依赖的版本号,否则无法找到依赖包

3.2、方法2

网上还搜到下面这种写法。这是GroovyDSL的写法,对KotlinDSL无效。

bootJar {

enabled = false

}

由于半天找不到KotlinDSL的用法,想着干脆找spring-boot-gradle-plugin源码看看吧。正巧源码文件夹里有个docs,里面有很多示例。

// 放在需要打标准jar包的模块的配置里

// 类型安全的写法

import org.springframework.boot.gradle.tasks.bundling.BootJar

import org.gradle.jvm.tasks.Jar

tasks.named("bootJar") {

enabled = false

}

// 光禁用BootJar是不行的,还要启用Jar。

tasks.named("jar") {

enabled = true

}

// 简化的写法

tasks.bootJar {

enabled = false

}

tasks.jar {

enabled = true

}

4、子模块专属配置的两种方式

1、子模块自己的build.gradle.kts文件 2、根项目的build.gradle.kts文件内添加

project(":core") {

}

实验证明用IDE创建完整模块的方式也是可行的,只要注意被引用模块的打包方式即可。缺点是每个模块都有一套完整的配置信息,管理起来比较混乱。 本文为最基本的配置,更复杂的配置,需要确定好适用范围,放到正确的配置区域即可。

转载地址:https://blog.csdn.net/weixin_33501587/article/details/114617131 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java项目中学到了什么_我们能从Java的HelloWorld中学到什么?
下一篇:java中字符串的索引的数据类型_Java字符串字符

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月30日 05时25分58秒