gofor's blog

  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

解决Springboot2中依赖本地项目Gradle5编译异常问题

发表于 2019-11-04 分类于 问题 阅读次数: Valine:

问题描述

在Idea中使用gradle5配置springboot2项目,该项目下有两个子项目,如:Project {subA, subB},其中subA项目依赖subB(非springboot项目)项目implementation project(':subB'),在使用gradle build时,控制台抛出类似如下异常:

1
2
3
/Users/xxxx/xxx/xxx/solby/xboot/src/main/java/me/solby/xboot/tookit/aspect/RequestLimitAspect.java:6: 错误: 程序包me.solby.xoauth.common不存在
import me.solby.xtool.common.UserSessionHolder;
^

该类异常表示找不到类所在包,但是通过idea的方式编译或运行,都不会有问题。

根项目build.gradle配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
plugins {
id 'org.springframework.boot' version '2.2.0.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}

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

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-aop'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation('org.springframework.boot:spring-boot-starter-test')
}
}

问题排查

开始时以为是gradle依赖找不到,但是代码不报错,idea中也正常,看了好几天也没找到原因。突然在某一天的晚上,看到了springboot的这个issue: Gradle multi-project build dependencies of subprojects cannot be resolved #11594,发现srpingboot插件spring-boot-gradle-plugin对dependency-management-plugin具有可传递的依赖关系,因此,如果在spring-boot-gradle-plugin上添加依赖项,则将使用所使用的版本将dependency-management-plugin自动添加到构建脚本的类路径中通过引导,然后可以像通常一样应用和配置它。

综合分析,该问题是由于spring插件问题引起的,且只会出现在依赖非srping项目时,因此,通过mavenBom的方式进行springboot依赖的管理。

问题解决

修改根项目build.gradle配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
buildscript {
ext {
springBootVersion = "2.2.0.RELEASE"
}
}

plugins {
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
id 'maven-publish'
}

allprojects {
group = 'me.solby'
version = '0.0.8-SNAPSHOT'

sourceCompatibility = 11

repositories {
mavenCentral()
}
}

subprojects {
apply plugin: 'io.spring.dependency-management'
apply plugin: 'java'

// java编译的时候缺省状态下会因为中文字符而失败
[compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8'

dependencyManagement {
imports {
mavenBom "org.springframework.boot:spring-boot-dependencies:$springBootVersion"
}
}

dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-aop'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation('org.springframework.boot:spring-boot-starter-test')
...
}
}

关于io.spring.dependency-management插件的引入,根据传递依赖,可以使用org.springframework.boot替代。

  • 本文作者: gofor
  • 本文链接: https://acehjm.github.io/2019/11/04/解决Springboot2中依赖本地项目Gradle5编译异常问题/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
# springboot # gradle
java11+springboot2+gradle5+idea+lombok 编译失败问题记录
SSH快速远程连接配置
gofor

gofor

Programming technology
14 日志
4 分类
14 标签
RSS
GitHub StackOverflow
Creative Commons
© 2016 – 2020 gofor
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Pisces v7.3.0
0%