Как исправить ошибку «Не удается найти символ» в связанном подпроекте при запуске gradle compileJava - PullRequest
1 голос
/ 06 октября 2019

Я пытаюсь создать весенний загрузочный проект с gradle, используя подпроекты для разных слоев (web, business, dataAccess, common).

Я следовал инструкциям официального руководства по gradle Создание мультипроектовbuilds .

Оба подпроекта изначально созданы с Spring.io .

Проблема

Я пытаюсь использоватьмой User класс подпроекта общий в моем другом подпроекте dataAccess . Импорт отлично работает в Intellij. Однако, когда я запускаю gradlew :dataAccess:compileJava, задача не выполняется, поскольку User не может быть найден:

Задача: dataAccess: compileJava FAILED ... \ dataAccess \ src \ main \ java \ ch \ wprogLK \MyProject \ backend \ dataAccess \ MyProjectDataApplication.java: 23: ошибка: не удается найти символ Пользователь u = новый пользователь ();^ символ: класс Расположение пользователя: класс MyProjectDataApplication)

Проект common компилируется до проекта dataAccess . Я предполагаю, что это проблема с простой настройкой, что проект dataAccess ничего не знает о проекте common во время компиляции (может быть, проблема с classpath?). Я рад за любую помощь. Благодарю.

Настройка проекта

  • MyProject
    • common
      • src/ main / java / ch / wprogLK / myProject / backend / common / entity
        • User.java
      • build.gradle
      • settings.gradle
    • dataAccess
      • src / main / java / ch / wprogLK / myProject / backend / dataAccess
        • AcLuDataApplication.java
      • build.gradle
      • settings.gradle
    • build.gradle
    • settings.gradle

Код

MyProject / 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

rootProject.name = 'MyProject'

include 'common'
include 'dataAccess'

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 {
}

MyProject / common / settings.gradle

rootProject.name = 'common'

MyProject / common / src / main / java / ch / wprogLK / myProject / backend / common / entity / User.java

package ch.wprogLK.myProject.backend.common.entities;
public class User
{
    private Long userId;
    private String username;
}

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")
}

MyProject / dataAccess / settings.gradle

rootProject.name = 'dataAccess'

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
    }
}

1 Ответ

1 голос
/ 07 октября 2019

Отсутствует возможность установить две конфигурации, чтобы указать, что common - это библиотека. Поэтому добавьте следующую конфигурацию и compile, run из корневого каталога проекта.

common build.gradle

bootJar {
    enabled = false
}

jar {
    enabled = true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...