Следуя соглашениям разработчиков, я создал свой файл .proto в src/main/proto/billing_service.proto. В build.gradle я правильно объявил зависимости GRPC. С помощью ./gradlew compileJava Gradle легко компилирует их и генерирует необходимые файлы .java GRPC в командах build/generated/sources/proto/main/java и build/generated/sources/proto/main/grpc. (Я могу подтвердить их существование в поисковике моего Mac)
Поскольку EclipseIDE позволяет импортировать файлы за пределами src/ проекта только тогда, когда они находятся в исходных папках, я помечаю сгенерированные репозитории grpc как исходные папки с помощью плагина Gradle Eclipse:
eclipse {
classpath {
file.whenMerged { cp ->
cp.entries.add(new org.gradle.plugins.ide.eclipse.model.SourceFolder(
'build/generated/source/proto/main/java', null))
cp.entries.add(new org.gradle.plugins.ide.eclipse.model.SourceFolder(
'build/generated/source/proto/main/grpc', null))
}
}
}
За исключением build/generated/sources/proto/main/grpc EclipseIDE распознает их все и позволяет мне импортировать. Однако build/generated/sources/proto/main/grpc не отображается независимо от того, ./gradlew очищаюEclipse eclipse, удаляю и повторно импортирую свой проект Gradle в EclipseIDE или просто обновляю его. Я могу подтвердить, что build/generated/sources/proto/main/grpc заполнен необходимым файлом .java, поэтому он не пуст.
Существует ли внутренний хак EclipseIDE или фрагмент Gradle, который позволит правильно отображать все эти папки и на них можно ссылаться?


----------------------------------
РЕДАКТИРОВАТЬ
Я люблю программировать: потратил 2 часа на борьбу с этим, 20 минут на написание этого вопроса, после чего попробовал другое возможное решение и решил его.
Исправление заключалось в том, чтобы объявить путь к классам как исходную папку, прежде чем плагин сборки сможет перезаписать изменения, используя file.beforeMerged { вместо file.whenMerged {}. Следующее изменение решило проблему:
eclipse {
classpath {
file.beforeMerged { cp ->
cp.entries.add(
new org.gradle.plugins.ide.eclipse.model.SourceFolder(
'build/generated/source/proto/main/grpc', null))
cp.entries.add(
new org.gradle.plugins.ide.eclipse.model.SourceFolder(
'build/generated/source/proto/main/java', null))
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... lipseide-b
Мобильная версия