Подпроект 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 СТРОИТЬ УСПЕШНО