Regras do Java

Regras

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)

Cria um arquivo Java ("arquivo jar"), além de um script de shell do wrapper com o mesmo nome da regra. O script de shell do wrapper usa um caminho de classe que inclui, entre outras coisas, um arquivo jar para cada da qual o binário depende.

O script do wrapper aceita várias sinalizações exclusivas. Consulte //src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt para uma lista de sinalizações configuráveis e variáveis de ambiente aceitas pelo wrapper.

Destinos de saída implícitos

  • name.jar: um arquivo Java, contendo os arquivos da classe e outros recursos que correspondem às dependências diretas do binário.
  • name-src.jar: um arquivo que contém as origens. garrafa).
  • name_deploy.jar: um arquivo Java adequado para implantação (somente criado se solicitado explicitamente).

    Como criar o destino <name>_deploy.jar para sua regra cria um arquivo jar independente com um manifesto que permite que ele seja executado com o o comando java -jar ou o --singlejar do script de wrapper é a melhor opção. É preferível usar o script de wrapper em vez de java -jar porque ele também transmite as sinalizações da JVM e as opções para carregar bibliotecas nativas.

    O jar de implantação contém todas as classes que podem ser encontradas por um carregador de classe que pesquisou o caminho de classe a partir do script de wrapper do binário do início ao fim. Ela também contém as bibliotecas nativas necessárias para as dependências. Eles são carregados automaticamente para a JVM durante a execução.

    Caso seu destino especifique uma tela de início em vez de ser um arquivo JAR normal, o _deploy.jar será um binário nativo. Ela conterá o inicializador e todas as dependências nativas (C++) do à sua regra, tudo vinculado a um binário estático. Os bytes do arquivo jar serão anexado a esse binário nativo, criando um único blob binário contendo os dois executável e o código Java. Você pode executar o arquivo jar resultante diretamente como você executa qualquer binário nativo.

  • name_deploy-src.jar: um arquivo contendo as origens. coletados do fechamento transitivo do alvo. Eles corresponderão às classes da deploy.jar, exceto quando os jars não têm um jar de origem correspondente.

Um atributo deps não é permitido em uma regra java_binary sem srcs; essa regra exige main_class fornecida por runtime_deps.

O snippet de código a seguir ilustra um erro comum:

java_binary(
    name = "DontDoThis",
    srcs = [
        ...,
        "GeneratedJavaFile.java",  # a generated .java file
    ],
    deps = [":generating_rule",],  # rule that generates that file
)

Em vez disso, faça o seguinte:

java_binary(
    name = "DoThisInstead",
    srcs = [
        ...,
        ":generating_rule",
    ],
)

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.


É recomendável usar o nome do arquivo de origem que é o ponto de entrada principal do aplicativo (menos a extensão). Por exemplo, se o ponto de entrada for chamado Main.java, seu nome poderá ser Main.
deps

List of labels; optional

A lista de outras bibliotecas a serem vinculadas ao destino. Veja os comentários gerais sobre deps em Atributos típicos definidos pelo a maioria das regras de build.
srcs

List of labels; optional

A lista de arquivos de origem processados para criar o destino. Esse atributo é quase sempre obrigatório. veja as exceções abaixo.

Arquivos de origem do tipo .java são compilados. No caso de dados .java, geralmente é aconselhável colocar o nome da regra de geração em vez do nome do próprio arquivo. Isso não só melhora a legibilidade, torna a regra mais resiliente a alterações futuras: se a regra geradora gerar arquivos diferentes no futuro, você só precisa corrigir um local: o outs do a regra geradora. Não liste a regra geradora no campo deps porque é um ambiente autônomo.

Arquivos de origem do tipo .srcjar são descompactados e compilados. Isso é útil se Você precisa gerar um conjunto de arquivos .java com uma genrule.)

Regras: se a regra (normalmente genrule ou filegroup) gera qualquer um dos arquivos listados acima, eles serão usados da mesma forma descrita para origem .

Esse argumento é quase sempre necessário, exceto se um O atributo main_class especifica um no caminho de classe do ambiente de execução ou especifique o argumento runtime_deps.

resources

List of labels; optional

Uma lista de arquivos de dados a serem incluídos em um jar Java.

Se os recursos forem especificados, eles serão empacotados no jar junto com o Arquivos .class produzidos pela compilação. A localização dos recursos dentro do arquivo jar é determinado pela estrutura do projeto. o Bazel primeiro procura as instâncias layout de diretório padrão, (um diretório "src" seguido por um neto de diretório "resources"). Se isso não for encontrado, o Bazel procura o diretório superior chamado "java". ou "javatests" (assim, para Por exemplo, se um recurso estiver em <workspace root>/x/java/y/java/z, o caminho do recurso será y/java/z. Essa heurística não pode ser substituída, No entanto, o atributo resource_strip_prefix pode ser usado para especificar diretório alternativo específico para arquivos de recurso.

Os recursos podem ser arquivos de origem ou gerados.

classpath_resources

List of labels; optional

NÃO USE ESTA OPÇÃO A MENOS QUE NÃO haja OUTRA FORMA)

Uma lista de recursos que precisam estar localizados na raiz da árvore Java. A configuração único objetivo é oferecer suporte a bibliotecas de terceiros que exijam que os recursos sejam encontrado no caminho de classe como exatamente "myconfig.xml". Só é permitido em binários e não bibliotecas, devido ao risco de conflitos de namespace.

create_executable

Boolean; optional; nonconfigurable; default is True

Indica se o binário é executável. Binários não executáveis coletam dependências de Java do ambiente de execução em um jar de implantação, mas não podem ser executadas diretamente. Nenhum script de wrapper será criado se esse atributo for definido. É um erro definir esse valor como 0 se os atributos launcher ou main_class estão definidos.
deploy_env

List of labels; optional

Uma lista de outros destinos java_binary que representam a implantação para este binário. Defina este atributo ao compilar um plug-in que será carregado por outro java_binary:
A definição desse atributo exclui todas as dependências do o caminho de classe do ambiente de execução (e o jar de implantação) desse binário, que são compartilhados entre esse binário e os destinos especificados em deploy_env.
deploy_manifest_lines

List of strings; optional

Uma lista de linhas a serem adicionadas ao arquivo META-INF/manifest.mf gerado para o Meta de *_deploy.jar. O conteúdo deste atributo não está sujeito para a substituição "Make variables".
javacopts

List of strings; optional

Opções extras do compilador para essa biblioteca. Sujeito à substituição "Make variables" e Tokenização de Bourne Shell.

Essas opções do compilador são transmitidas para javac após as opções do compilador global.

jvm_flags

List of strings; optional

Uma lista de sinalizações a serem incorporadas no script de wrapper gerado para executar esse binário. Sujeito aos termos $(location) e Substituição "Make variables", e Tokenização de shell Bourne.

O script de wrapper para um binário Java inclui uma definição de CLASSPATH (para encontrar todos os jars dependentes) e invoca o interpretador Java correto. A linha de comando gerada pelo script do wrapper inclui o nome do a classe principal seguida por um "$@" para que você possa transmitir outras após o classname. No entanto, os argumentos destinados à análise pela JVM deve ser especificado antes do nome da classe no comando linha O conteúdo de jvm_flags é adicionado ao wrapper. antes do nome da classe listado.

Esse atributo não tem efeito em *_deploy.jar de entrada e saída.

launcher

Label; optional

Especifique um binário que será usado para executar seu programa Java em vez do programa bin/java normal incluído no JDK. O destino precisa ser um cc_binary. Qualquer cc_binary que implementa A API Java Invocation pode ser especificada como um valor para esse atributo.

Por padrão, o Bazel usa o inicializador normal do JDK (bin/java ou java.exe).

A flag --java_launcher do Bazel relacionada afeta apenas os Metas java_binary e java_test que têm não especificou um atributo launcher.

Observe que as dependências nativas (C++, SWIG, JNI) serão criadas de maneira diferente dependendo se você está usando o inicializador do JDK ou outro inicializador:

  • Se você estiver usando o inicializador normal do JDK (o padrão), as dependências nativas serão criada como uma biblioteca compartilhada chamada {name}_nativedeps.so, em que {name} é o atributo name dessa regra java_binary. O código não utilizado não é removido pelo vinculador nessa configuração.
  • Se você estiver usando qualquer outra tela de início, as dependências nativas (C++) serão estaticamente vinculado a um binário chamado {name}_nativedeps, em que {name} é o atributo name dessa regra java_binary. Nesse caso, o vinculador removerá qualquer código que pareça não ser usado do binário resultante, o que significa que qualquer código C++ acessado somente via JNI não pode ser vinculado, a menos que esse destino cc_library especifica alwayslink = 1.

Ao usar qualquer inicializador diferente do inicializador padrão do JDK, o formato das mudanças de saída *_deploy.jar. Confira as principais java_binary para mais detalhes.

main_class

String; optional

Nome da classe com o método main() para usar como ponto de entrada. Se uma regra usar essa opção, não precisará de uma lista srcs=[...]. Portanto, com esse atributo, é possível tornar um executável a partir de uma biblioteca Java que já contém um ou mais métodos main().

O valor desse atributo é um nome de classe, não um arquivo de origem. A classe precisa ser Disponível no momento da execução: ele pode ser compilado por essa regra (de srcs) ou fornecidos por dependências diretas ou transitivas (por meio de runtime_deps ou deps). Se a classe não estiver disponível, o binário falhará no tempo de execução. não há verificação de tempo de build.

plugins

List of labels; optional

Plug-ins do compilador Java para executar no momento da compilação. Cada java_plugin especificado neste atributo será executado sempre que esta regra é construído. Uma biblioteca também pode herdar plug-ins de dependências que usam exported_plugins: Recursos gerados pelo plug-in serão incluídos no jar resultante dessa regra.
resource_jars

List of labels; optional

Obsoleto: use java_import e deps ou runtime_deps.
resource_strip_prefix

String; optional

O prefixo do caminho a ser removido dos recursos Java.

Se especificado, esse prefixo de caminho é removido de todos os arquivos no resources . É um erro se um arquivo de recurso não estiver nesse diretório. Caso contrário especificado (o padrão), o caminho do arquivo de recurso é determinado de acordo com o mesmo lógica de rede como o pacote Java de arquivos de origem. Por exemplo, um arquivo de origem stuff/java/foo/bar/a.txt estará localizado em foo/bar/a.txt.

runtime_deps

List of labels; optional

Bibliotecas a serem disponibilizadas para o binário final ou para teste apenas no momento da execução. Como deps comum, eles vão aparecer no caminho de classe do tempo de execução, mas, ao contrário e não no caminho de classe do tempo de compilação. As dependências necessárias apenas no ambiente de execução devem ser listadas aqui. As ferramentas de análise de dependência devem ignorar os destinos que aparecem em ambos runtime_deps e deps.
stamp

Integer; optional; default is -1

Define se as informações da versão serão codificadas no binário. Valores possíveis:
  • stamp = 1: sempre inclua as informações do build no binário, mesmo em --nostamp builds. Este deve ser evitada, já que ela pode eliminar o armazenamento em cache remoto dos binário e qualquer ação downstream que dependa dele.
  • stamp = 0: sempre substitui as informações do build por valores constantes. Isso oferece um bom armazenamento em cache dos resultados da compilação.
  • stamp = -1: a incorporação de informações do build é controlada pelo sinalização --[no]stamp.

Os binários carimbos não são recriados, a menos que as dependências deles mudem.

use_launcher

Boolean; optional; default is True

Define se o binário precisa usar uma tela de início personalizada.

Se este atributo for definido como falso, o atributo launcher e o relacionado Sinalização --java_launcher serão ignorados para esse destino.

use_testrunner

Boolean; optional; default is False

Use o executor de testes (por padrão) com.google.testing.junit.runner.BazelTestRunner) como a ponto de entrada principal de um programa Java e forneceremos a classe de teste ao executor de testes como um valor de bazel.test_suite propriedade do sistema. Use-o para substituir o padrão que é usar o executor de testes para java_test regras, e não o usará para regras java_binary. É improvável você vai querer fazer isso. Um uso é para AllTest chamadas por outra regra (para configurar um banco de dados antes de executar os testes, por exemplo). O AllTest regra deve ser declarada como java_binary, mas deve usar o executor de testes como ponto de entrada principal. O nome de uma classe do executor de testes pode ser substituído pelo atributo main_class.

java_import

java_import(name, deps, data, compatible_with, constraints, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, jars, licenses, neverlink, proguard_specs, restricted_to, runtime_deps, srcjar, tags, target_compatible_with, testonly, visibility)

Essa regra permite o uso de arquivos .jar pré-compilados como bibliotecas para java_library e java_binary.

Exemplos

    java_import(
        name = "maven_model",
        jars = [
            "maven_model/maven-aether-provider-3.2.3.jar",
            "maven_model/maven-model-3.2.3.jar",
            "maven_model/maven-model-builder-3.2.3.jar",
        ],
    )

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

deps

List of labels; optional

A lista de outras bibliotecas a serem vinculadas ao destino. Consulte java_library.deps.
constraints

List of strings; optional; nonconfigurable

Restrições extras impostas a essa regra, como uma biblioteca Java.
exports

List of labels; optional

Destinos a serem disponibilizados para os usuários desta regra. Consulte java_library.exports.
jars

List of labels; required

A lista de arquivos JAR fornecida para destinos Java que dependem desse destino.

Boolean; optional; default is False

Use essa biblioteca apenas para compilação e não durante a execução. Útil se a biblioteca for fornecida pelo ambiente de execução durante a execução. Exemplos de bibliotecas como esta são as APIs do ambiente de desenvolvimento integrado para plug-ins do ambiente de desenvolvimento integrado ou tools.jar para qualquer item executado no um JDK padrão.
proguard_specs

List of labels; optional

Arquivos a serem usados como especificação do Proguard. Elas vão descrever o conjunto de especificações a serem usadas pelo Proguard. Se especificado, ele vai ser adicionado a qualquer destino android_binary, dependendo dessa biblioteca. Os arquivos incluídos aqui só podem ter regras idempotentes, como -dontnote, -dontwarn presumanocolaterais e regras que começam com -keep. Outras opções só podem aparecer em Proguard_specs de android_binary, para garantir mesclas não tautológicas.
runtime_deps

List of labels; optional

Bibliotecas a serem disponibilizadas para o binário final ou para teste apenas no momento da execução. Consulte java_library.runtime_deps.
srcjar

Label; optional

Um arquivo JAR que contém o código-fonte para os arquivos JAR compilados.

java_library

java_library(name, deps, srcs, data, resources, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exported_plugins, exports, features, javacopts, licenses, neverlink, plugins, proguard_specs, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, tags, target_compatible_with, testonly, visibility)

Essa regra compila e vincula origens em um arquivo .jar.

Destinos de saída implícitos

  • libname.jar: um arquivo Java que contém os arquivos da classe.
  • libname-src.jar: um arquivo que contém as origens. garrafa).

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

deps

List of labels; optional

Lista de bibliotecas para vincular a esta biblioteca. Veja os comentários gerais sobre deps em Atributos típicos definidos pelo a maioria das regras de build.

Os jars criados pelas regras de java_library listadas em deps serão ativados caminho de classe do tempo de compilação dessa regra. Além disso, o fechamento transitivo das deps, runtime_deps e exports estarão no dia caminho de classe do tempo de execução.

Por outro lado, os destinos no atributo data estão incluídos nos arquivos de execução, mas nem no caminho de classe do tempo de compilação nem do tempo de execução.

srcs

List of labels; optional

A lista de arquivos de origem processados para criar o destino. Esse atributo é quase sempre obrigatório. veja as exceções abaixo.

Arquivos de origem do tipo .java são compilados. No caso de dados .java, geralmente é aconselhável colocar o nome da regra de geração em vez do nome do próprio arquivo. Isso não só melhora a legibilidade, torna a regra mais resiliente a alterações futuras: se a regra geradora gerar arquivos diferentes no futuro, você só precisa corrigir um local: o outs do a regra geradora. Não liste a regra geradora no campo deps porque é um ambiente autônomo.

Arquivos de origem do tipo .srcjar são descompactados e compilados. Isso é útil se Você precisa gerar um conjunto de arquivos .java com uma genrule.)

Regras: se a regra (normalmente genrule ou filegroup) gera qualquer um dos arquivos listados acima, eles serão usados da mesma forma descrita para origem .

Esse argumento é quase sempre necessário, exceto se um O atributo main_class especifica um no caminho de classe do ambiente de execução ou especifique o argumento runtime_deps.

data

List of labels; optional

A lista de arquivos necessários para esta biblioteca no tempo de execução. Veja os comentários gerais sobre data em Atributos típicos definidos pelo a maioria das regras de build.

Ao criar um java_library, o Bazel não coloca esses arquivos em nenhum lugar. se data são arquivos gerados pelo Bazel. Ao criar um que depende deste java_library Bazel copia ou vincula o arquivos data na área dos runfiles.

resources

List of labels; optional

Uma lista de arquivos de dados a serem incluídos em um jar Java.

Se os recursos forem especificados, eles serão empacotados no jar junto com o Arquivos .class produzidos pela compilação. A localização dos recursos dentro do arquivo jar é determinado pela estrutura do projeto. o Bazel primeiro procura as instâncias layout de diretório padrão, (um diretório "src" seguido por um neto de diretório "resources"). Se isso não for encontrado, o Bazel procura o diretório superior chamado "java". ou "javatests" (assim, para Por exemplo, se um recurso estiver em <workspace root>/x/java/y/java/z, o caminho do recurso será y/java/z. Essa heurística não pode ser substituída, No entanto, o atributo resource_strip_prefix pode ser usado para especificar diretório alternativo específico para arquivos de recurso.

Os recursos podem ser arquivos de origem ou gerados.

exported_plugins

List of labels; optional

A lista de java_plugins (por exemplo, de anotação processadores) para exportar para bibliotecas que dependem diretamente dessa biblioteca.

A lista especificada de java_plugins será aplicada a qualquer biblioteca que depende diretamente dessa biblioteca, como se a biblioteca tivesse declarado explicitamente esses rótulos em plugins.

exports

List of labels; optional

Bibliotecas exportadas.

As regras de listagem aqui as tornarão disponíveis para regras pai, como se as mães dependia dessas regras. Isso não é verdade para o deps normal (não exportado).

Resumo: uma regra X pode acessar o código em Y se houver uma dependência caminho entre eles que começa com uma aresta deps seguida por zero ou mais exports bordas. Vamos ver alguns exemplos para ilustrar isso.

Suponha que A dependa de B e B dependa de C. Nesse caso, C é uma dependência transitiva de A, então alterar as origens de C e recriar A vai e recriar tudo corretamente. No entanto, A não poderá usar classes em C. Para permitir que A precisa declarar C em deps, ou B pode facilitar para A (e qualquer coisa que dependa de A), declarando C em sua exports .

O fechamento de bibliotecas exportadas está disponível para todas as regras mãe diretas. Dê uma olhada um pouco exemplo diferente: A depende de B, B depende de C e D e também exporta C, mas não D. Agora, A tem acesso a C, mas não a D. Agora, se C e D exportassem algumas bibliotecas, C' e D' respectivamente, A só pode acessar C' mas não D".

Importante: uma regra exportada não é uma dependência regular. Mantendo o exemplo anterior, se B exportar C e também quiser usar C, deverá listá-lo no próprio deps:

javacopts

List of strings; optional

Opções extras do compilador para essa biblioteca. Sujeito à substituição "Make variables" e Tokenização de Bourne Shell.

Essas opções do compilador são transmitidas para javac após as opções do compilador global.

Boolean; optional; default is False

Define se essa biblioteca deve ser usada apenas para compilação e não durante a execução. Útil se a biblioteca for fornecida pelo ambiente de execução durante a execução. Exemplos dessas bibliotecas são as APIs do ambiente de desenvolvimento integrado para plug-ins do ambiente de desenvolvimento integrado ou tools.jar para qualquer em execução em um JDK padrão.

O neverlink = 1 não impede que o compilador crie inline do material dessa biblioteca em destinos de compilação que dependem dela, conforme permitido pelo código Especificação da linguagem (por exemplo, Constantes static final de String ou de tipos primitivos). Portanto, o caso de uso preferido é quando a biblioteca de tempo de execução é idêntico à biblioteca de compilação.

Se a biblioteca de tempo de execução for diferente da biblioteca de compilação, será necessário garantir que ela difere apenas em locais em que o JLS proíbe os compiladores para inline (e que deve manter para todas as versões futuras do JLS).

plugins

List of labels; optional

Plug-ins do compilador Java para executar no momento da compilação. Cada java_plugin especificado neste atributo será executado sempre que esta regra é construído. Uma biblioteca também pode herdar plug-ins de dependências que usam exported_plugins: Recursos gerados pelo plug-in serão incluídos no jar resultante dessa regra.
proguard_specs

List of labels; optional

Arquivos a serem usados como especificação do Proguard. Elas vão descrever o conjunto de especificações a serem usadas pelo Proguard. Se especificado, ele vai ser adicionado a qualquer destino android_binary, dependendo dessa biblioteca. Os arquivos incluídos aqui só podem ter regras idempotentes, como -dontnote, -dontwarn presumanocolaterais e regras que começam com -keep. Outras opções só podem aparecer em Proguard_specs de android_binary, para garantir mesclas não tautológicas.
resource_jars

List of labels; optional

Obsoleto: use java_import e deps ou runtime_deps.
resource_strip_prefix

String; optional

O prefixo do caminho a ser removido dos recursos Java.

Se especificado, esse prefixo de caminho é removido de todos os arquivos no resources . É um erro se um arquivo de recurso não estiver nesse diretório. Caso contrário especificado (o padrão), o caminho do arquivo de recurso é determinado de acordo com o mesmo lógica de rede como o pacote Java de arquivos de origem. Por exemplo, um arquivo de origem stuff/java/foo/bar/a.txt estará localizado em foo/bar/a.txt.

runtime_deps

List of labels; optional

Bibliotecas a serem disponibilizadas para o binário final ou para teste apenas no momento da execução. Como deps comum, eles vão aparecer no caminho de classe do tempo de execução, mas, ao contrário e não no caminho de classe do tempo de compilação. As dependências necessárias apenas no ambiente de execução devem ser listadas aqui. As ferramentas de análise de dependência devem ignorar os destinos que aparecem em ambos runtime_deps e deps.

java_lite_proto_library

java_lite_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

java_lite_proto_library gera código Java com base em arquivos .proto.

deps precisa apontar para regras proto_library .

Exemplo:

java_library(
    name = "lib",
    deps = [":foo"],
)

java_lite_proto_library(
    name = "foo",
    deps = [":bar"],
)

proto_library(
    name = "bar",
)

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

deps

List of labels; optional

Lista de proto_library para gerar código Java.

java_proto_library

java_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

java_proto_library gera código Java com base em arquivos .proto.

deps precisa apontar para regras proto_library .

Exemplo:

java_library(
    name = "lib",
    deps = [":foo_java_proto"],
)

java_proto_library(
    name = "foo_java_proto",
    deps = [":foo_proto"],
)

proto_library(
    name = "foo_proto",
)

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

deps

List of labels; optional

Lista de proto_library para gerar código Java.

java_test

java_test(name, deps, srcs, data, resources, args, classpath_resources, compatible_with, create_executable, deploy_manifest_lines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, launcher, licenses, local, main_class, plugins, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, use_testrunner, visibility)

Uma regra java_test() compila um teste Java. Um teste é um wrapper binário em torno código de teste. O método principal do executor de testes é invocado em vez da classe principal sendo compilada.

Destinos de saída implícitos

  • name.jar: um arquivo Java.
  • name_deploy.jar: um arquivo Java adequado para implantação. (Criado somente se solicitado explicitamente.) Consulte a descrição name_deploy.jar saída de java_binary para mais detalhes.

Consulte a seção sobre argumentos java_binary(). Esta regra também suporta todos os atributos comuns a todas as regras de teste (*_test).

Exemplos

java_library(
    name = "tests",
    srcs = glob(["*.java"]),
    deps = [
        "//java/com/foo/base:testResources",
        "//java/com/foo/testing/util",
    ],
)

java_test(
    name = "AllTests",
    size = "small",
    runtime_deps = [
        ":tests",
        "//util/mysql",
    ],
)

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

deps

List of labels; optional

A lista de outras bibliotecas a serem vinculadas ao destino. Veja os comentários gerais sobre deps em Atributos típicos definidos pelo a maioria das regras de build.
srcs

List of labels; optional

A lista de arquivos de origem processados para criar o destino. Esse atributo é quase sempre obrigatório. veja as exceções abaixo.

Arquivos de origem do tipo .java são compilados. No caso de dados .java, geralmente é aconselhável colocar o nome da regra de geração em vez do nome do próprio arquivo. Isso não só melhora a legibilidade, torna a regra mais resiliente a alterações futuras: se a regra geradora gerar arquivos diferentes no futuro, você só precisa corrigir um local: o outs do a regra geradora. Não liste a regra geradora no campo deps porque é um ambiente autônomo.

Arquivos de origem do tipo .srcjar são descompactados e compilados. Isso é útil se Você precisa gerar um conjunto de arquivos .java com uma genrule.)

Regras: se a regra (normalmente genrule ou filegroup) gera qualquer um dos arquivos listados acima, eles serão usados da mesma forma descrita para origem .

Esse argumento é quase sempre necessário, exceto se um O atributo main_class especifica um no caminho de classe do ambiente de execução ou especifique o argumento runtime_deps.

resources

List of labels; optional

Uma lista de arquivos de dados a serem incluídos em um jar Java.

Se os recursos forem especificados, eles serão empacotados no jar junto com o Arquivos .class produzidos pela compilação. A localização dos recursos dentro do arquivo jar é determinado pela estrutura do projeto. o Bazel primeiro procura as instâncias layout de diretório padrão, (um diretório "src" seguido por um neto de diretório "resources"). Se isso não for encontrado, o Bazel procura o diretório superior chamado "java". ou "javatests" (assim, para Por exemplo, se um recurso estiver em <workspace root>/x/java/y/java/z, o caminho do recurso será y/java/z. Essa heurística não pode ser substituída, No entanto, o atributo resource_strip_prefix pode ser usado para especificar diretório alternativo específico para arquivos de recurso.

Os recursos podem ser arquivos de origem ou gerados.

classpath_resources

List of labels; optional

NÃO USE ESTA OPÇÃO A MENOS QUE NÃO haja OUTRA FORMA)

Uma lista de recursos que precisam estar localizados na raiz da árvore Java. A configuração único objetivo é oferecer suporte a bibliotecas de terceiros que exijam que os recursos sejam encontrado no caminho de classe como exatamente "myconfig.xml". Só é permitido em binários e não bibliotecas, devido ao risco de conflitos de namespace.

create_executable

Boolean; optional; nonconfigurable; default is True

Indica se o binário é executável. Binários não executáveis coletam dependências de Java do ambiente de execução em um jar de implantação, mas não podem ser executadas diretamente. Nenhum script de wrapper será criado se esse atributo for definido. É um erro definir esse valor como 0 se os atributos launcher ou main_class estão definidos.
deploy_manifest_lines

List of strings; optional

Uma lista de linhas a serem adicionadas ao arquivo META-INF/manifest.mf gerado para o Meta de *_deploy.jar. O conteúdo deste atributo não está sujeito para a substituição "Make variables".
javacopts

List of strings; optional

Opções extras do compilador para essa biblioteca. Sujeito à substituição "Make variables" e Tokenização de Bourne Shell.

Essas opções do compilador são transmitidas para javac após as opções do compilador global.

jvm_flags

List of strings; optional

Uma lista de sinalizações a serem incorporadas no script de wrapper gerado para executar esse binário. Sujeito aos termos $(location) e Substituição "Make variables", e Tokenização de shell Bourne.

O script de wrapper para um binário Java inclui uma definição de CLASSPATH (para encontrar todos os jars dependentes) e invoca o interpretador Java correto. A linha de comando gerada pelo script do wrapper inclui o nome do a classe principal seguida por um "$@" para que você possa transmitir outras após o classname. No entanto, os argumentos destinados à análise pela JVM deve ser especificado antes do nome da classe no comando linha O conteúdo de jvm_flags é adicionado ao wrapper. antes do nome da classe listado.

Esse atributo não tem efeito em *_deploy.jar de entrada e saída.

launcher

Label; optional

Especifique um binário que será usado para executar seu programa Java em vez do programa bin/java normal incluído no JDK. O destino precisa ser um cc_binary. Qualquer cc_binary que implementa A API Java Invocation pode ser especificada como um valor para esse atributo.

Por padrão, o Bazel usa o inicializador normal do JDK (bin/java ou java.exe).

A flag --java_launcher do Bazel relacionada afeta apenas os Metas java_binary e java_test que têm não especificou um atributo launcher.

Observe que as dependências nativas (C++, SWIG, JNI) serão criadas de maneira diferente dependendo se você está usando o inicializador do JDK ou outro inicializador:

  • Se você estiver usando o inicializador normal do JDK (o padrão), as dependências nativas serão criada como uma biblioteca compartilhada chamada {name}_nativedeps.so, em que {name} é o atributo name dessa regra java_binary. O código não utilizado não é removido pelo vinculador nessa configuração.
  • Se você estiver usando qualquer outra tela de início, as dependências nativas (C++) serão estaticamente vinculado a um binário chamado {name}_nativedeps, em que {name} é o atributo name dessa regra java_binary. Nesse caso, o vinculador removerá qualquer código que pareça não ser usado do binário resultante, o que significa que qualquer código C++ acessado somente via JNI não pode ser vinculado, a menos que esse destino cc_library especifica alwayslink = 1.

Ao usar qualquer inicializador diferente do inicializador padrão do JDK, o formato das mudanças de saída *_deploy.jar. Confira as principais java_binary para mais detalhes.

main_class

String; optional

Nome da classe com o método main() para usar como ponto de entrada. Se uma regra usar essa opção, não precisará de uma lista srcs=[...]. Portanto, com esse atributo, é possível tornar um executável a partir de uma biblioteca Java que já contém um ou mais métodos main().

O valor desse atributo é um nome de classe, não um arquivo de origem. A classe precisa ser Disponível no momento da execução: ele pode ser compilado por essa regra (de srcs) ou fornecidos por dependências diretas ou transitivas (por meio de runtime_deps ou deps). Se a classe não estiver disponível, o binário falhará no tempo de execução. não há verificação de tempo de build.

plugins

List of labels; optional

Plug-ins do compilador Java para executar no momento da compilação. Cada java_plugin especificado neste atributo será executado sempre que esta regra é construído. Uma biblioteca também pode herdar plug-ins de dependências que usam exported_plugins: Recursos gerados pelo plug-in serão incluídos no jar resultante dessa regra.
resource_jars

List of labels; optional

Obsoleto: use java_import e deps ou runtime_deps.
resource_strip_prefix

String; optional

O prefixo do caminho a ser removido dos recursos Java.

Se especificado, esse prefixo de caminho é removido de todos os arquivos no resources . É um erro se um arquivo de recurso não estiver nesse diretório. Caso contrário especificado (o padrão), o caminho do arquivo de recurso é determinado de acordo com o mesmo lógica de rede como o pacote Java de arquivos de origem. Por exemplo, um arquivo de origem stuff/java/foo/bar/a.txt estará localizado em foo/bar/a.txt.

runtime_deps

List of labels; optional

Bibliotecas a serem disponibilizadas para o binário final ou para teste apenas no momento da execução. Como deps comum, eles vão aparecer no caminho de classe do tempo de execução, mas, ao contrário e não no caminho de classe do tempo de compilação. As dependências necessárias apenas no ambiente de execução devem ser listadas aqui. As ferramentas de análise de dependência devem ignorar os destinos que aparecem em ambos runtime_deps e deps.
stamp

Integer; optional; default is 0

Define se as informações da versão serão codificadas no binário. Valores possíveis:
  • stamp = 1: sempre inclua as informações do build no binário, mesmo em --nostamp builds. Este deve ser evitada, já que ela pode eliminar o armazenamento em cache remoto dos binário e qualquer ação downstream que dependa dele.
  • stamp = 0: sempre substitui as informações do build por valores constantes. Isso oferece um bom armazenamento em cache dos resultados da compilação.
  • stamp = -1: a incorporação de informações do build é controlada pelo sinalização --[no]stamp.

Os binários carimbos não são recriados, a menos que as dependências deles mudem.

test_class

String; optional

A classe Java a ser carregada pelo executor de testes.

Por padrão, se esse argumento não estiver definido, o modo legado será usado e o argumentos de teste são usados no lugar. Definir a sinalização --nolegacy_bazel_java_test para não substituir o primeiro argumento.

Este atributo especifica o nome de uma classe Java a ser executada nesse teste. É raro precisar definir isso. Se esse argumento for omitido, ela será inferida usando a name do destino e caminho relativo-raiz da origem. Se o teste estiver localizado fora de um sistema raiz de origem, o Bazel informará um erro se test_class não está definido.

Para JUnit3, a classe de teste precisa ser uma subclasse de junit.framework.TestCase ou precisa ter um perfil público método suite() estático que retorna uma junit.framework.Test (ou uma subclasse de Test). Para JUnit4, a classe precisa receber uma anotação com org.junit.runner.RunWith.

Esse atributo permite que várias regras java_test compartilham o mesmo Test (TestCase, TestSuite...). Normalmente informações adicionais são passadas para ele (por exemplo, via jvm_flags=['-Dkey=value']) para que seu comportamento é diferente em cada caso, como a execução de uma subconjunto dos testes. Esse atributo também permite o uso de Testes de Java fora da árvore javatests.

use_launcher

Boolean; optional; default is True

Define se o binário precisa usar uma tela de início personalizada.

Se este atributo for definido como falso, o atributo launcher e o relacionado Sinalização --java_launcher serão ignorados para esse destino.

use_testrunner

Boolean; optional; default is True

Use o executor de testes (por padrão) com.google.testing.junit.runner.BazelTestRunner) como a ponto de entrada principal de um programa Java e forneceremos a classe de teste ao executor de testes como um valor de bazel.test_suite propriedade do sistema. Use-o para substituir o padrão que é usar o executor de testes para java_test regras, e não o usará para regras java_binary. É improvável você vai querer fazer isso. Um uso é para AllTest chamadas por outra regra (para configurar um banco de dados antes de executar os testes, por exemplo). O AllTest regra deve ser declarada como java_binary, mas deve usar o executor de testes como ponto de entrada principal. O nome de uma classe do executor de testes pode ser substituído pelo atributo main_class.

java_package_configuration

java_package_configuration(name, data, compatible_with, deprecation, distribs, features, javacopts, licenses, packages, restricted_to, tags, target_compatible_with, testonly, visibility)

Configuração para aplicar a um conjunto de pacotes. As configurações podem ser adicionadas java_toolchain.javacoptss.

Exemplo:

java_package_configuration(
    name = "my_configuration",
    packages = [":my_packages"],
    javacopts = ["-Werror"],
)

package_group(
    name = "my_packages",
    packages = [
        "//com/my/project/...",
        "-//com/my/project/testing/...",
    ],
)

java_toolchain(
    ...,
    package_configuration = [
        ":my_configuration",
    ]
)

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

data

List of labels; optional

A lista de arquivos necessários para esta configuração no ambiente de execução.
javacopts

List of strings; optional

Sinalizações do compilador Java.
packages

List of labels; optional

O conjunto de package_groups a configuração deve ser aplicada.

java_plugin

java_plugin(name, deps, srcs, data, resources, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, generates_api, javacopts, licenses, neverlink, output_licenses, plugins, processor_class, proguard_specs, resource_jars, resource_strip_prefix, restricted_to, tags, target_compatible_with, testonly, visibility)

java_plugin define plug-ins para o compilador Java executado pelo Bazel. No momento, os únicos tipos de plug-ins compatíveis são os processadores de anotações. Uma java_library ou A regra java_binary pode executar plug-ins dependendo deles pela plugins . Um java_library também pode exportar automaticamente plug-ins para bibliotecas que depender diretamente dele usando exported_plugins.

Destinos de saída implícitos

  • libname.jar: um arquivo Java.

Os argumentos são idênticos a java_library, exceto para adicionar o argumento processor_class.

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

deps

List of labels; optional

Lista de bibliotecas para vincular a esta biblioteca. Veja os comentários gerais sobre deps em Atributos típicos definidos pelo a maioria das regras de build.

Os jars criados pelas regras de java_library listadas em deps serão ativados caminho de classe do tempo de compilação dessa regra. Além disso, o fechamento transitivo das deps, runtime_deps e exports estarão no dia caminho de classe do tempo de execução.

Por outro lado, os destinos no atributo data estão incluídos nos arquivos de execução, mas nem no caminho de classe do tempo de compilação nem do tempo de execução.

srcs

List of labels; optional

A lista de arquivos de origem processados para criar o destino. Esse atributo é quase sempre obrigatório. veja as exceções abaixo.

Arquivos de origem do tipo .java são compilados. No caso de dados .java, geralmente é aconselhável colocar o nome da regra de geração em vez do nome do próprio arquivo. Isso não só melhora a legibilidade, torna a regra mais resiliente a alterações futuras: se a regra geradora gerar arquivos diferentes no futuro, você só precisa corrigir um local: o outs do a regra geradora. Não liste a regra geradora no campo deps porque é um ambiente autônomo.

Arquivos de origem do tipo .srcjar são descompactados e compilados. Isso é útil se Você precisa gerar um conjunto de arquivos .java com uma genrule.)

Regras: se a regra (normalmente genrule ou filegroup) gera qualquer um dos arquivos listados acima, eles serão usados da mesma forma descrita para origem .

Esse argumento é quase sempre necessário, exceto se um O atributo main_class especifica um no caminho de classe do ambiente de execução ou especifique o argumento runtime_deps.

data

List of labels; optional

A lista de arquivos necessários para esta biblioteca no tempo de execução. Veja os comentários gerais sobre data em Atributos típicos definidos pelo a maioria das regras de build.

Ao criar um java_library, o Bazel não coloca esses arquivos em nenhum lugar. se data são arquivos gerados pelo Bazel. Ao criar um que depende deste java_library Bazel copia ou vincula o arquivos data na área dos runfiles.

resources

List of labels; optional

Uma lista de arquivos de dados a serem incluídos em um jar Java.

Se os recursos forem especificados, eles serão empacotados no jar junto com o Arquivos .class produzidos pela compilação. A localização dos recursos dentro do arquivo jar é determinado pela estrutura do projeto. o Bazel primeiro procura as instâncias layout de diretório padrão, (um diretório "src" seguido por um neto de diretório "resources"). Se isso não for encontrado, o Bazel procura o diretório superior chamado "java". ou "javatests" (assim, para Por exemplo, se um recurso estiver em <workspace root>/x/java/y/java/z, o caminho do recurso será y/java/z. Essa heurística não pode ser substituída, No entanto, o atributo resource_strip_prefix pode ser usado para especificar diretório alternativo específico para arquivos de recurso.

Os recursos podem ser arquivos de origem ou gerados.

generates_api

Boolean; optional; default is False

Esse atributo marca processadores de anotações que geram código de API.

Se uma regra usar um processador de anotações que gera uma API, outras regras dependendo dele, poderá consultar o código gerado somente se as as ações de compilação são programadas após a regra geradora. Isso instrui o Bazel a introduzir restrições de programação ao --java_header_compilation está ativado.

AVISO: este atributo afeta o build performance, use apenas se necessário.

javacopts

List of strings; optional

Opções extras do compilador para essa biblioteca. Sujeito à substituição "Make variables" e Tokenização de Bourne Shell.

Essas opções do compilador são transmitidas para javac após as opções do compilador global.

Boolean; optional; default is False

Define se essa biblioteca deve ser usada apenas para compilação e não durante a execução. Útil se a biblioteca for fornecida pelo ambiente de execução durante a execução. Exemplos dessas bibliotecas são as APIs do ambiente de desenvolvimento integrado para plug-ins do ambiente de desenvolvimento integrado ou tools.jar para qualquer em execução em um JDK padrão.

O neverlink = 1 não impede que o compilador crie inline do material dessa biblioteca em destinos de compilação que dependem dela, conforme permitido pelo código Especificação da linguagem (por exemplo, Constantes static final de String ou de tipos primitivos). Portanto, o caso de uso preferido é quando a biblioteca de tempo de execução é idêntico à biblioteca de compilação.

Se a biblioteca de tempo de execução for diferente da biblioteca de compilação, será necessário garantir que ela difere apenas em locais em que o JLS proíbe os compiladores para inline (e que deve manter para todas as versões futuras do JLS).

output_licenses

Licence type; optional

Consulte common attributes .
plugins

List of labels; optional

Plug-ins do compilador Java para executar no momento da compilação. Cada java_plugin especificado neste atributo será executado sempre que esta regra é construído. Uma biblioteca também pode herdar plug-ins de dependências que usam exported_plugins: Recursos gerados pelo plug-in serão incluídos no jar resultante dessa regra.
processor_class

String; optional

A classe de processador é o tipo totalmente qualificado da classe que o compilador Java precisa como ponto de entrada para o processador de anotações. Se não for especificada, esta regra não contribuem com um processador de anotações para o processamento de anotações do compilador Java, mas seu o caminho de classe do tempo de execução ainda será incluído no caminho do processador de anotações do compilador. (Este deve ser usado principalmente Plug-ins propensos a erro, que são carregados. do caminho do processador de anotações usando java.util.ServiceLoader.)
proguard_specs

List of labels; optional

Arquivos a serem usados como especificação do Proguard. Elas vão descrever o conjunto de especificações a serem usadas pelo Proguard. Se especificado, ele vai ser adicionado a qualquer destino android_binary, dependendo dessa biblioteca. Os arquivos incluídos aqui só podem ter regras idempotentes, como -dontnote, -dontwarn presumanocolaterais e regras que começam com -keep. Outras opções só podem aparecer em Proguard_specs de android_binary, para garantir mesclas não tautológicas.
resource_jars

List of labels; optional

Obsoleto: use java_import e deps ou runtime_deps.
resource_strip_prefix

String; optional

O prefixo do caminho a ser removido dos recursos Java.

Se especificado, esse prefixo de caminho é removido de todos os arquivos no resources . É um erro se um arquivo de recurso não estiver nesse diretório. Caso contrário especificado (o padrão), o caminho do arquivo de recurso é determinado de acordo com o mesmo lógica de rede como o pacote Java de arquivos de origem. Por exemplo, um arquivo de origem stuff/java/foo/bar/a.txt estará localizado em foo/bar/a.txt.

java_runtime

java_runtime(name, srcs, compatible_with, deprecation, distribs, features, hermetic_srcs, java, java_home, lib_modules, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

Especifica a configuração para um ambiente de execução Java.

Exemplo:

java_runtime(
    name = "jdk-9-ea+153",
    srcs = glob(["jdk9-ea+153/**"]),
    java_home = "jdk9-ea+153",
)

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

srcs

List of labels; optional

Todos os arquivos no ambiente de execução.
hermetic_srcs

List of labels; optional

Arquivos no ambiente de execução necessários para implantações herméticas.
java

Label; optional

O caminho para o executável Java.
java_home

String; optional

O caminho para a raiz do ambiente de execução. Sujeito a "Marca" variável. Se esse caminho for absoluto, a regra denotará um tempo de execução Java não hermético com um método caminho. Nesse caso, os atributos srcs e java precisam estar vazios.
lib_modules

Label; optional

O arquivo lib/modules necessário para implantações herméticas.

java_toolchain

java_toolchain(name, android_lint_data, android_lint_jvm_opts, android_lint_opts, android_lint_package_configuration, android_lint_runner, bootclasspath, compatible_with, deprecation, deps_checker, distribs, features, forcibly_disable_header_compilation, genclass, header_compiler, header_compiler_direct, ijar, jacocorunner, java_runtime, javabuilder, javabuilder_data, javabuilder_jvm_opts, javac_supports_multiplex_workers, javac_supports_workers, javacopts, jvm_opts, licenses, oneversion, oneversion_whitelist, package_configuration, proguard_allowlister, resourcejar, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, tools, turbine_data, turbine_jvm_opts, visibility, xlint)

Especifica a configuração do compilador Java. O conjunto de ferramentas a ser usado pode ser alterado por meio de o argumento --java_dataset. Normalmente, você não deve escrever esse tipo de regra, a menos que queira ajustar seu compilador Java.

Exemplos

Um exemplo simples seria:

java_toolchain(
    name = "toolchain",
    source_version = "7",
    target_version = "7",
    bootclasspath = ["//tools/jdk:bootclasspath"],
    xlint = [ "classfile", "divzero", "empty", "options", "path" ],
    javacopts = [ "-g" ],
    javabuilder = ":JavaBuilder_deploy.jar",
)

Argumentos

Atributos
name

Name; required

Um nome exclusivo para o destino.

android_lint_data

List of labels; optional

Rótulos de ferramentas disponíveis para expansão de rótulos em android_lint_jvm_opts.
android_lint_jvm_opts

List of strings; optional

A lista de argumentos para a JVM ao invocar o Android Lint.
android_lint_opts

List of strings; optional

A lista de argumentos do Android Lint.
android_lint_package_configuration

List of labels; optional

Android Lint Configuration que precisa ser aplicada aos grupos de pacotes especificados.
android_lint_runner

Label; optional

Rótulo do executor do Android Lint, se houver.
bootclasspath

List of labels; optional

As entradas bootclasspath de destino do Java. Corresponde à flag -bootclasspath do javac.
deps_checker

List of labels; optional

Rótulo do jar de implantação do ImportDepsChecker.
forcibly_disable_header_compilation

Boolean; optional; default is False

Substitui --java_header_compilation para desativar a compilação de cabeçalho em plataformas que não suporte, por exemplo, Bazel do JDK 7.
genclass

List of labels; required

Rótulo do jar de implantação do GenClass.
header_compiler

List of labels; optional

Rótulo do compilador de cabeçalho. Obrigatório se --java_header_compilation estiver ativado.
header_compiler_direct

List of labels; optional

Rótulo opcional do compilador de cabeçalhos a ser usado para ações diretas do caminho de classe que não incluir qualquer processador de anotações que gere APIs.

Esta ferramenta não é compatível com o processamento de anotações.

ijar

List of labels; required

Rótulo do executável ijar.
jacocorunner

Label; optional

Rótulo do jar de implantação do JacocoCoverageRunner.
java_runtime

Label; required

O java_runtime a ser usado com este conjunto de ferramentas. O padrão é java_runtime. na configuração da execução.
javabuilder

List of labels; required

Rótulo do jar de implantação do JavaBuilder.
javabuilder_data

List of labels; optional

Rótulos de dados disponíveis para expansão de rótulos em javabuilder_jvm_opts.
javabuilder_jvm_opts

List of strings; optional

A lista de argumentos para a JVM ao invocar o JavaBuilder.
javac_supports_multiplex_workers

Boolean; optional; default is True

"True", se o JavaBuilder oferece suporte à execução como um worker persistente multiplex, e "false" se não for.
javac_supports_workers

Boolean; optional; default is True

"True", se o JavaBuilder oferece suporte à execução como um worker persistente, "false" se não for.
javacopts

List of strings; optional

A lista de argumentos extras para o compilador Java. Consulte o compilador Java documentação para obter uma lista extensa de possíveis sinalizações do compilador Java.
jvm_opts

List of strings; optional

A lista de argumentos para a JVM ao invocar o compilador Java. Consulte a documentação máquina virtual com a extensa lista de possíveis sinalizações para essa opção.
oneversion

Label; optional

Identificador do binário de aplicação de uma versão.
oneversion_whitelist

Label; optional

Rótulo da lista de permissões de uma versão.
package_configuration

List of labels; optional

Configuração que precisa ser aplicada aos grupos de pacotes especificados.
proguard_allowlister

Label; optional; default is @bazel_tools//tools/jdk:proguard_whitelister

Rótulo da lista de permissões do Proguard.
resourcejar

List of labels; optional

Rótulo do executável do builder do jar de recurso.
singlejar

List of labels; required

Rótulo do jar de implantação do SingleJar.
source_version

String; optional

A versão de origem Java (por exemplo, "6" ou "7"). Ela especifica qual conjunto de estruturas de código são permitidas no código-fonte Java.
target_version

String; optional

A versão de destino do Java (por exemplo, "6" ou "7"). Ela especifica para qual ambiente de execução do Java a classe deve ser criada.
timezone_data

Label; optional

Rótulo de um jar de recurso que contém dados de fuso horário. Se definido, os dados de fuso horário são adicionados como um dependência do ambiente de execução implicitamente de todas as regras java_binary.
tools

List of labels; optional

Rótulos de ferramentas disponíveis para expansão de rótulos em jvm_opts.
turbine_data

List of labels; optional

Rótulos de dados disponíveis para expansão de rótulos em turbine_jvm_opts.
turbine_jvm_opts

List of strings; optional

A lista de argumentos para a JVM ao invocar a turbina.
xlint

List of strings; optional

A lista de avisos a serem adicionados ou removidos da lista padrão. Precede com um traço para o remove. Para mais informações, consulte a documentação do Javac sobre as opções de -Xlint.