运行gradle compileJava时如何修复相关子项目中的“找不到符号错误”

wpr*_*gLK 4 java spring gradle spring-boot

我尝试使用不同层(web、business、dataAccess、common)的子项目创建一个带有 gradle 的 spring boot 项目。

我按照官方 gradle 指南创建多项目构建的说明进行操作

两个子项目最初都是用Spring.io创建的。

问题

我尝试使用我User的其他子项目dataAccess 中常见的子项目类。导入在 Intellij 中工作正常。但是,当我运行任务失败,因为找不到:gradlew :dataAccess:compileJavaUser

任务 :dataAccess:compileJava FAILED ...\dataAccess\src\main\java\ch\wprogLK\MyProject\backend\dataAccess\MyProjectDataApplication.java:23: 错误:找不到符号 User u = new User(); ^ 符号:class 用户位置:class MyProjectDataApplication)

常见的项目获取编译之前数据访问项目。我猜这是一个 gradle 配置问题,dataAccess项目在编译时对公共项目一无所知(可能是类路径问题?)。我很高兴得到任何帮助。谢谢。

项目设置

  • 我的项目
    • 常见的
      • src/main/java/ch/wprogLK/myProject/backend/common/entities
        • 用户.java
      • 构建.gradle
      • 设置.gradle
    • 数据访问
      • src/main/java/ch/wprogLK/myProject/backend/dataAccess
        • AcLuDataApplication.java
      • 构建.gradle
      • 设置.gradle
    • 构建.gradle
    • 设置.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'
}
Run Code Online (Sandbox Code Playgroud)

我的项目/settings.gradle

rootProject.name = 'MyProject'

include 'common'
include 'dataAccess'
Run Code Online (Sandbox Code Playgroud)

MyProject/ 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 {
}
Run Code Online (Sandbox Code Playgroud)

MyProject/ common / settings.gradle

rootProject.name = 'common'
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

MyProject/ dataAccess / 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")
}
Run Code Online (Sandbox Code Playgroud)

MyProject的/数据访问/settings.gradle

rootProject.name = 'dataAccess'
Run Code Online (Sandbox Code Playgroud)

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
    }
}
Run Code Online (Sandbox Code Playgroud)