[英]How to fix “Cannot find symbol error” in related subproject while running gradle compileJava
I try to create a spring boot project with gradle using subprojects for different layers (web, business, dataAccess, common).我尝试使用 gradle 创建一个 spring 引导项目,并使用不同层的子项目(web、业务、dataAccess、common)。
I followed the instruction of the official gradle guide Creating Multi-Projects builds .我按照官方 gradle 指南Creating Multi-Projects builds的说明进行操作。
Both subprojects are create originally with Spring.io .这两个子项目最初都是使用Spring.io创建的。
Problem问题
I try to use my User
class of the subproject common in my other subproject dataAccess .我尝试使用我的其他子项目dataAccess中常见的子项目的
User
class 。 The import works fine in Intellij.导入在 Intellij 中运行良好。 However, when I run
gradlew:dataAccess:compileJava
the task fails because User
cannot be found:但是,当我运行
gradlew:dataAccess:compileJava
任务失败,因为找不到User
:
Task:dataAccess:compileJava FAILED...\dataAccess\src\main\java\ch\wprogLK\MyProject\backend\dataAccess\MyProjectDataApplication.java:23: error: cannot find symbol User u = new User();
任务:dataAccess:compileJava FAILED...\dataAccess\src\main\java\ch\wprogLK\MyProject\backend\dataAccess\MyProjectDataApplication.java:23:错误:找不到符号用户 u = new User(); ^ symbol: class User location: class MyProjectDataApplication)
^ 符号:class 用户位置:class MyProjectDataApplication)
The common project gets compiled before the dataAccess project.通用项目在dataAccess项目之前编译。 I guess it's a gradle configuration problem that the dataAccess project does not know anything about the common project at compilation time (maybe a classpath issue?).
我猜这是一个 gradle 配置问题, dataAccess项目在编译时对common项目一无所知(可能是类路径问题?)。 I'm glad for any help.
我很高兴有任何帮助。 Thanks.
谢谢。
Project setup项目设置
Code代码
MyProject /build.gradle我的项目/build.gradle
plugins {
id 'org.springframework.boot' version '2.1.8.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
group = 'ch.wprogLK'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
allprojects {
apply plugin: 'java'
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
MyProject /settings.gradle我的项目 /settings.gradle
rootProject.name = 'MyProject'
include 'common'
include 'dataAccess'
MyProject/ common /build.gradle我的项目/common/build.gradle
plugins {
id 'org.springframework.boot'
id 'io.spring.dependency-management'
id 'java'
}
group = 'ch.wprogLK'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
}
MyProject/ common /settings.gradle MyProject/ common /settings.gradle
rootProject.name = 'common'
MyProject/ common /src/main/java/ch/wprogLK/myProject/backend/common/entities/User.java MyProject/ common /src/main/java/ch/wprogLK/myProject/backend/common/entities/User.java
package ch.wprogLK.myProject.backend.common.entities;
public class User
{
private Long userId;
private String username;
}
MyProject/ dataAccess /build.gradle MyProject/数据访问/build.gradle
plugins {
id 'org.springframework.boot'
id 'io.spring.dependency-management'
id 'java'
}
group = 'ch.wprogLK'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
compile project(":common")
}
MyProject/ dataAccess /settings.gradle MyProject/ dataAccess /settings.gradle
rootProject.name = 'dataAccess'
MyProject/ dataAccess /src/main/java/ch/wprogLK/myProject/backend/dataAccess/MyProjectDataApplication.java MyProject/ dataAccess /src/main/java/ch/wprogLK/myProject/backend/dataAccess/MyProjectDataApplication.java
package ch.wprogLK.myProject.backend.dataAccess;
import ch.wprogLK.myProject.backend.common.entities.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyProjectDataApplication
{
public static void main(String[] args)
{
SpringApplication.run(MyProjectDataApplication.class, args);
}
public MyProjectDataApplication()
{
User u = new User(); //This line is the problem when running gradle :dataAccess:javaCompile
}
}
It is missing to set two configurations in order to indicate that common
is a library.缺少设置两个配置以表明
common
是一个库。 So add the following configuration and compile
, run
from root of project.所以添加以下配置并
compile
,从项目的根目录run
。
common build.gradle
bootJar {
enabled = false
}
jar {
enabled = true
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.