Подпроект Gradle не включен в classpath

У нас есть 2 проекта, 1 основной и 1 подпроект, это проекты Java. Все они находятся в одном каталоге.

Вот как выглядит структура каталогов:

 ./dev
   ./Project_A
     build.gradle
     settings.gradle
   ./Project_B
     build.gradle

Project_A включает в себя Project_B.

Project_A settings.gradle выглядит так:

includeFlat 'Project_B'

Project_A build.gradle содержит:

compile project(':Project_B')   

Проблема Project_A пропускает классы из Project_B при компиляции из командной строки (чистая сборка gradlew). Похоже, Project_B не принадлежит к classpath Project-A.

Вот (часть выходных данных) из чистой сборки gradlew, запущенной в каталоге Project_A (после этого все это "пакет project_b.xy отсутствует" и "не удается найти символ" (из Project_B):

:clean
:Project_B:clean
:Project_B:compileJava
:Project_B:processResources
:Project_B:classes
:Project_B:jar UP-TO-DATE
:compileJava
...Starts erroring out here...

Я предполагаю, что это проблема пути к классам, но я просто не могу понять, как это исправить.

Заранее спасибо, JM

PS: отредактированный вопрос, так как я смог воспроизвести проблему со сборкой 2 проектов (из 3 изначально)

2 ответа

Решение

Хорошо, в случае, если это кому-то пригодится, я наконец-то начал работать с фактическим удалением (git rm) файла.claspath. Это было в.gitignore, но по какой-то причине кажется, что оно было исправлено в какой-то момент и играло вокруг.

После этого и повторного импорта проектов в Eclipse все вернулось на круги своя.

Спасибо тем, кто пытался помочь.

Основано на Java Quckstart: многопроектная сборка Java:

1) твой settings.gradle файл должен быть в dev/не dev/project_A и он должен содержать что-то вроде этого:

include 'Project_A', 'Project_B'

2) Тогда ваш dev/Project_A/build.gradle файл должен содержать

dependencies {
    compile project(':Project_B')
}

Редактировать:

Я создал игрушечный пример в соответствии с макетом проекта, который вы описали в своем вопросе. Однако я не смог воспроизвести проблему. Возможно, вы сможете заметить разницу, которая вызывает вашу конкретную ошибку:

Дерево каталогов

Project── Project_A
│   ├── build.gradle
Settings ├── settings.gradle
│   └── срк
Main └── главная
│ └── java
A └── а
J └── A.java
Project── Project_B
    Build── build.gradle
    └── срк
        Main── главная
            └── ява
                B── б
                    J── B.java

Project_A / build.gradle

apply plugin: 'java'
apply plugin: 'application'

mainClassName = 'a.A'

dependencies {
    compile project(':Project_B')
}

Project_A / settings.gradle

includeFlat 'Project_B'

A.java

package a;
import b.B;

public class A {
    public static void main(String[] args) {
        System.out.println("From A.main...");
        B.call();
    }
}

Project_B / build.gradle

apply plugin: 'java'

B.java

package b;

public class B {
    public static void call() {
        System.out.println("Calling B");
    }
}

При запуске Gradle из Project_A, вывод:

$ gradle чистый сборочный прогон: clean UP-TO-DATE: Project_B: clean UP-TO-DATE: Project_B: compileJava: Project_B: processResources UP-TO-DATE: Project_B: классы: Project_B: jar: compileJava: processResources UP-TO- ДАТА: классы: jar: сборка: compileTestJava UP-TO-DATE: processTestResources UP-TO-DATE:testClasses UP-TO-DATE: тест UP-TO-DATE: проверка UP-TO-DATE: сборка: Project_B: сборка: Project_B: compileTestJava UP-TO-DATE: Project_B: processTestResources UP-TO-DATE: Project_B:testClasses UP-TO-DATE: Project_B: тест UP-TO-DATE: Project_B: проверка UP-TO-DATE: Project_B: сборка: выполнить с A.main... Звоню B СТРОИТЬ УСПЕШНО
Другие вопросы по тегам