Правила
- java_binary
- java_import
- java_library
- java_lite_proto_library
- java_proto_library
- java_test
- java_package_configuration
- java_plugin
- java_runtime
- java_toolchain
java_binary
java_binary(name, deps, srcs, data, resources, args, classpath_resources, compatible_with, create_executable, deploy_env, deploy_manifest_lines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, javacopts, jvm_flags, launcher, licenses, main_class, output_licenses, plugins, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, stamp, tags, target_compatible_with, testonly, toolchains, use_launcher, use_testrunner, visibility)
Создаёт Java архив ("jar-файл"), плюс оболочечную командную оболочку со схожим именем с правилом. Оболочечная командная оболочка использует путь к классам, включающий, среди прочего, jar-файл для каждой библиотеки, от которой зависит двоичный файл. При выполнении оболочечной командной оболочки любая непустая JAVABIN переменная среды будет иметь приоритет над версией, указанной через --java_runtime_version флаг Bazel.
Оболочечная командная оболочка принимает несколько уникальных флагов. Обратитесь к //src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt за списком настраиваемых флагов и переменных среды, принимаемых оболочкой.
Неявные целевые выходные файлы
-
name.jar: Java архив, содержащий файлы классов и другие ресурсы, соответствующие прямым зависимостям двоичного файла. -
name-src.jar: Архив, содержащий исходные файлы ("исходный jar-файл"). -
name_deploy.jar: Java архив, подходящий для развертывания (создаётся только при явном запросе).Построение целевого
<name>_deploy.jarдля вашего правила создаёт автономный jar-файл с манифестом, позволяющим его запустить с помощью командыjava -jarили с помощью--singlejarопции оболочечной командной оболочки. Рекомендуется использовать оболочечную командную оболочку вместоjava -jar, так как она также передаёт JVM флаги и параметры для загрузки нативных библиотек.Jar-файл для развертывания содержит все классы, которые были бы найдены загрузчиком классов, который искал путь к классам от оболочечной командной оболочки двоичного файла от начала до конца. Он также содержит нативные библиотеки, необходимые для зависимостей. Они автоматически загружаются в JVM во время выполнения.
Если ваша цель определяет атрибут launcher, то вместо обычного JAR-файла _deploy.jar будет нативный двоичный файл. Он будет содержать загрузчик плюс любые нативные (C++) зависимости вашего правила, все связанные в статический двоичный файл. Байты фактического jar-файла будут добавлены к этому нативному двоичному файлу, создавая один двоичный блок, содержащий как исполняемый файл, так и Java-код. Вы можете запустить получившийся jar-файл напрямую, как любой нативный двоичный файл.
-
name_deploy-src.jar: Архив, содержащий исходные файлы, собранные из транзитивного замыкания цели. Они будут соответствовать классам вdeploy.jarза исключением случаев, когда у jar-файлов нет соответствующего исходного jar-файла.
Атрибут deps не разрешается в правиле java_binary без srcs; такое правило требует main_class, предоставленного runtime_deps.
Следующий фрагмент кода иллюстрирует распространённую ошибку:
java_binary(
name = "DontDoThis",
srcs = [
...,
"GeneratedJavaFile.java", # a generated .java file
],
deps = [":generating_rule",], # rule that generates that file
)
Сделайте так вместо этого:
java_binary(
name = "DoThisInstead",
srcs = [
...,
":generating_rule",
],
)