Как построить сам кинжал
Проект Dagger использует систему http://bazel.build/ для сборки. Я установил bazel на Fedora, он запускает и собирает проект, но, очевидно, у dagger есть код Java 1.8, а bazel нацелен на java 7.
Существует файл build_def.bzl, и целевая версия java определяется следующим образом: SOURCE_7_TARGET_7 = ["-source 1.7 -target 1.7"]
меняя его на SOURCE_7_TARGET_7 = ["-source 1.8 -target 1.8"]
не помогает. И ветки master, и rc11 не могут быть скомпилированы из-за одной и той же ошибки (компилятор java жалуется на то, что целевая версия 1.7 не поддерживает лямбду и ссылку на метод). На вики или странице проекта нет руководства по созданию кинжала, и я незнаком с Базелем. Интересно, нужно ли что-то вроде retrolambda добавить в путь времени выполнения сборки, но с bazel это не так просто.
Образец вывода:
$> bazel build :all
INFO: Found 8 targets...
ERROR: /home/user/dagger/java/dagger/internal/codegen/BUILD:44:1: Building java/dagger/internal/codegen/libcodegen.jar (116 source files) failed: java failed: error executing command external/local_jdk/bin/java -Xbootclasspath/p:external/bazel_tools/third_party/java/jdk/langtools/javac-9-dev-r4023-2.jar -XX:+TieredCompilation '-XX:TieredStopAtLevel=1' -jar ... (remaining 2 argument(s) skipped): com.google.devtools.build.lib.shell.BadExitStatusException: Process exited with status 1.
java/dagger/internal/codegen/AbstractComponentWriter.java:612: error: method references are not supported in -source 1.7
(use -source 8 or higher to enable method references)
java/dagger/internal/codegen/AnnotationExpression.java:80: error: lambda expressions are not supported in -source 1.7
(use -source 8 or higher to enable lambda expressions)
java/dagger/internal/codegen/AnnotationSpecs.java:41: error: method references are not supported in -source 1.7
(use -source 8 or higher to enable method references)
# Rest of output removed for brevity, the error above repeats for many more files.
1 ответ
У меня была установлена неправильная версия базеля. Сборка так же проста, как и запуск:
bazel build :all
Я уже установил Oracle JDK 8 на мою машину (Fedora) и скачал этот выпуск bazel (bazel-0.5.0-without-jdk-installer-linux-x86_64.sh).