Gradle构建SpringBoot项目

x33g5p2x  于2021-12-06 转载在 Spring  
字(4.6k)|赞(0)|评价(0)|浏览(410)

一、新建一个microboot的gradle项目,并在项目根目录新建gradle.properties文件

  1. project_group=com.it
  2. project.version=1.0.0
  3. project_jdk=11

二、在项目根目录新建dependencies.gradle文件,负责管理依赖的版本。

  1. // 定义所有要使用到的版本号
  2. ext.versions = [
  3. springboot :'2.5.5',
  4. log4jtoslf4j :'2.14.1',
  5. log4japi :'2.0',
  6. junit :'4.12',
  7. lombok :'1.18.22'
  8. ]
  9. // 定义所有的依赖库
  10. ext.libraries = [
  11. 'spring-boot-gradle-plugin' : "org.springframework.boot:spring-boot-gradle-plugin:${versions.springboot}",
  12. 'log4j-to-slf4j' : "org.apache.logging.log4j:log4j-to-slf4j:${versions.log4jtoslf4j}",
  13. 'log4j-api' : "org.apache.logging.log4j:log4j-api:${versions.log4japi}",
  14. 'junit' : "junit:junit:${versions.junit}",
  15. 'lombok' : "org.projectlombok:lombok:${versions.lombok}"
  16. ]

三、修改build.gradle文件,定义脚本资源、配置项目信息、定义子模块公用配置。

  1. buildscript { // 定义脚本资源
  2. apply from: file('dependencies.gradle') // 引入所需要的依赖文件
  3. repositories { // 脚本资源仓库
  4. maven { url 'https://maven.aliyun.com/repository/google' }
  5. maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
  6. maven { url 'https://maven.aliyun.com/repository/public' }
  7. maven { url 'https://maven.aliyun.com/repository/jcenter' }
  8. }
  9. dependencies { // gradle依赖库
  10. classpath libraries.'spring-boot-gradle-plugin'
  11. }
  12. }
  13. group project_group // 通过gradle.properties文件导入
  14. version version // 通过gradle.properties文件导入
  15. apply from: file('dependencies.gradle') // 引入所需要的依赖文件
  16. def env = System.getProperty('env') ?: 'dev' // 获取env环境属性
  17. subprojects { // 子模块
  18. apply plugin: 'java'
  19. apply plugin: 'io.spring.dependency-management' // 由此插件负责版本号的统一维护
  20. apply plugin: 'org.springframework.boot' // 将版本编号配置在插件内部
  21. sourceCompatibility = project_jdk // 本次项目都是基于JDK-11版本编写的
  22. targetCompatibility = project_jdk // 本次项目都是基于JDK-11版本编写的
  23. repositories { // 配置gradle仓库
  24. def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
  25. def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
  26. all {
  27. ArtifactRepository repo ->
  28. if (repo instanceof MavenArtifactRepository) {
  29. def url = repo.url.toString()
  30. if (url.startsWith('https://repo1.maven.org/maven2')) {
  31. project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
  32. remove repo
  33. }
  34. if (url.startsWith('https://jcenter.bintray.com/')) {
  35. project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
  36. remove repo
  37. }
  38. }
  39. }
  40. maven { url ALIYUN_REPOSITORY_URL } // 设置阿里云仓库
  41. maven { url ALIYUN_JCENTER_URL } // 设置阿里云仓库
  42. }
  43. dependencies { // 公共依赖库管理
  44. compile libraries.'log4j-to-slf4j'
  45. compile libraries.'log4j-api'
  46. testCompile 'org.springframework.boot:spring-boot-starter-test'
  47. testCompile libraries.'junit'
  48. runtime 'org.springframework.boot:spring-boot-devtools'
  49. compileOnly libraries.'lombok'
  50. annotationProcessor libraries.'lombok'
  51. }
  52. sourceSets { // 源代码目录配置
  53. main { // main及相关子目录配置
  54. java { srcDirs = ['src/main/java'] }
  55. resources { srcDirs = ['src/main/resources', "src/main/profiles/$env"] }
  56. }
  57. test { // test及相关子目录配置
  58. java { srcDirs = ['src/test/java'] }
  59. resources { srcDirs = ['src/test/resources'] }
  60. }
  61. }
  62. test { // 配置测试任务
  63. useJUnitPlatform() // 使用JUnit测试平台
  64. }
  65. // 最终生成的jar文件名称:baseName-version-classifier.extension
  66. task sourceJar(type: Jar, dependsOn: classes) { // 源代码的打包任务
  67. archiveClassifier = 'sources' // 设置文件的后缀
  68. from sourceSets.main.allSource // 所有源代码的读取路径
  69. }
  70. task javadocTask(type: Javadoc) { // JavaDoc文档打包任务
  71. options.encoding = 'UTF-8' // 设置文件编码
  72. source = sourceSets.main.allJava // 定义所有的Java源代码
  73. }
  74. task javadocJar(type: Jar, dependsOn: javadocTask) { // 先生成JavaDoc再打包
  75. archiveClassifier = 'javadoc' // 文件标记类型
  76. from javadocTask.destinationDir // 通过JavadocTask任务中找到目标路径
  77. }
  78. tasks.withType(Javadoc) { // 文档编码配置
  79. options.encoding = 'UTF-8' // 定义编码
  80. }
  81. tasks.withType(JavaCompile) { // 编译编码配置
  82. options.encoding = 'UTF-8' // 定义编码
  83. }
  84. artifacts { // 最终的打包的操作任务
  85. archives sourceJar // 源代码打包
  86. archives javadocJar // javadoc打包
  87. }
  88. gradle.taskGraph.whenReady { // 在所有的操作准备好后触发
  89. tasks.each { task -> // 找出所有的任务
  90. if (task.name.contains('test')) { // 如果现在发现有test任务
  91. // 如果将enabled设置为true表示要执行测试任务,如果设置为false表示不执行测试任务
  92. task.enabled = true
  93. }
  94. }
  95. }
  96. [compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8' // 编码配置
  97. }

四、新建microboot-common项目和microboot-web项目,microboot-common负责定义公共接口,microboot-web对外提供服务。
项目结构如下:

五、修改microboot-common项目的build.gradle文件,引入依赖:

  1. jar {enabled true} //允许当前模块打包为*.jar文件
  2. // 不启用javaDoc任务
  3. javadoc {enabled false}
  4. javadocTask{enabled false}
  5. // 不生成javadoc的*.jar文件
  6. javadocJar{enabled false}
  7. // 不执行springboot的打包任务
  8. bootJar{enabled false}
  9. dependencies {
  10. compile 'org.springframework.boot:spring-boot-starter-web'
  11. }

由于在父project中配置了子project使用spring-boot-gradle-plugin,所以gradle task会与spring boot task进行绑定。但是microboot-common项目并不是一个spring boot项目,因此会造成构建失败,所以需要手动进行部分任务的禁用。
六、修改microboot-web项目的build.gradle文件,引入依赖:

  1. dependencies { // 配置子模块依赖
  2. compile project('microboot-common') // 引入其他子模块
  3. }
  4. bootJar { // SpringBoot提供的任务名称
  5. archiveBaseName = 'spring-boot-project' // 设置打包文件名称
  6. archiveVersion = '1.0.0' // 设置版本号
  7. mainClassName = 'com.it.StartSpringBoot' // 程序启动类
  8. }

由于项目中引入了microboot-common,且microboot-common引入了compile范围的spring-boot-starter-web,所以可以直接在microboot-web项目使用spring-boot-starter-web

相关文章