Reguły Java

Zgłoś problem Wyświetl źródło

Reguły

java_binary

Wyświetl źródło reguł
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)

Tworzy archiwum Javy („plik jar”) oraz skrypt powłoki otoki o tej samej nazwie co reguła. Skrypt powłoki otoki używa ścieżki klasy, która zawiera między innymi plik jar dla każdej biblioteki, od której zależy dany plik binarny. Gdy uruchomisz skrypt powłoki otoki, każda niepusta zmienna środowiskowa JAVABIN będzie miała pierwszeństwo przed wersją określoną za pomocą flagi --java_runtime_version bazy danych.

Skrypt kodu akceptuje kilka niepowtarzalnych flag. W //src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt znajdziesz listę konfigurowalnych flag i zmiennych środowiskowych akceptowanych przez kod.

Cele wynikowe niejawne

  • name.jar: archiwum Java zawierające pliki klas i inne zasoby odpowiadające bezpośrednim zależnościom pliku binarnego.
  • name-src.jar: archiwum zawierające źródła („źródłowy plik jar”).
  • name_deploy.jar: archiwum Java odpowiednie do wdrożenia (skompilowane tylko na wyraźne żądanie).

    Kompilacja miejsca docelowego <name>_deploy.jar reguły powoduje utworzenie samodzielnego pliku jar z plikiem manifestu, który umożliwia uruchomienie go za pomocą polecenia java -jar lub opcji --singlejar skryptu opakowania. Używanie skryptu opakowania jest preferowane w przypadku java -jar, ponieważ przekazuje on również flagi JVM i opcje wczytywania bibliotek natywnych.

    Plik jar wdrożenia zawiera wszystkie klasy, które zostałyby znalezione przez moduł ładowania klasy, który przeszukał ścieżkę klasy ze skryptu opakowania pliku binarnego od początku do końca. Zawiera też biblioteki natywne potrzebne do obsługi zależności. Są one automatycznie wczytywane do JVM w czasie działania.

    Jeśli w miejscu docelowym jest określony atrybut launchera, zamiast zwykłego pliku JAR plik _deploy.jar będzie natywnym plikiem binarnym. Będzie on zawierał program uruchamiający oraz wszelkie natywne zależności (C++) reguły. Wszystkie są połączone w statycznym pliku binarnym. Bajty rzeczywistego pliku jar zostaną dołączone do tego natywnego pliku binarnego, tworząc pojedynczy blob binarny zawierający zarówno plik wykonywalny, jak i kod Java. Wynikowy plik jar możesz uruchomić bezpośrednio w taki sam sposób jak dowolny natywny plik binarny.

  • name_deploy-src.jar: archiwum zawierające źródła zebrane podczas zamykania miejsca docelowego. Będą one pasować do klas w pliku deploy.jar, chyba że pliki jar nie mają pasującego źródłowego pliku jar.

Atrybut deps nie jest dozwolony w regule java_binary bez srcs. Taka reguła wymaga atrybutu main_class dostarczonego przez runtime_deps.

Oto częsty błąd:

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

Zamiast tego:

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

Argumenty

Atrybuty
name

Nazwa; wymagana

Unikalna nazwa celu.


Warto używać nazwy pliku źródłowego, który jest głównym punktem wejścia aplikacji (bez rozszerzenia). Jeśli na przykład punkt wejścia to Main.java, Twoja nazwa może wyglądać tak: Main.
deps

Lista etykiet; wartość domyślna to []

Lista innych bibliotek, które mają być połączone z miejscem docelowym. Zapoznaj się z ogólnymi komentarzami na temat deps w typowych atrybutach zdefiniowanych przez większość reguł kompilacji.
srcs

Lista etykiet; wartość domyślna to []

Lista plików źródłowych, które są przetwarzane w celu utworzenia środowiska docelowego. Ten atrybut jest niemal zawsze wymagany; zobacz wyjątki poniżej.

Pliki źródłowe typu .java są kompilowane. W przypadku wygenerowanych plików .java zalecamy umieszczenie tutaj nazwy reguły generowania, a nie nazwy samego pliku. Zwiększa to nie tylko czytelność reguły, ale także jej odporność na przyszłe zmiany. Jeśli w przyszłości reguła generująca będzie generować różne pliki, wystarczy poprawić jedno miejsce: outs reguły generowania. Nie wymieniaj reguły generującej w elemencie deps, ponieważ jest pusta.

Pliki źródłowe typu .srcjar zostaną rozpakowane i skompilowane. Jest to przydatne, gdy musisz wygenerować zestaw plików .java z genrule.

Reguły: jeśli reguła (zwykle genrule lub filegroup) generuje którykolwiek z wymienionych wyżej plików, zostaną one użyte w taki sam sposób jak w przypadku plików źródłowych.

Ten argument jest prawie zawsze wymagany, chyba że atrybut main_class określa klasę w ścieżce klasy środowiska wykonawczego lub podasz argument runtime_deps.

resources

Lista etykiet; wartość domyślna to []

Lista plików danych do umieszczenia w pliku jar.

Jeśli określisz zasoby, zostaną one umieszczone w pliku jar razem ze zwykłymi plikami .class generowanymi przez kompilację. Lokalizacja zasobów w pliku jar jest określana przez strukturę projektu. Bazel najpierw szuka standardowego układu katalogu Maven (katalogu „src”, po którym następuje wnuk katalogu „resources”). Jeśli go nie znajdzie, Bazel szuka najwyższego katalogu o nazwie „java” lub „javatests” (jeśli na przykład zasób znajduje się pod adresem <workspace root>/x/java/y/java/z, ścieżką do niego będzie y/java/z). Heurystyki nie można zastąpić, ale można użyć atrybutu resource_strip_prefix, aby określić alternatywny katalog dla plików zasobów.

Zasoby mogą być plikami źródłowymi lub wygenerowanymi.

classpath_resources

Lista etykiet; wartość domyślna to []

NIE UŻYWAJ TEJ OPCJI, O ile nie ma innego sposobu)

Lista zasobów, które muszą znajdować się w katalogu głównym drzewa Java. Jedynym celem tego atrybutu jest obsługa bibliotek zewnętrznych, które wymagają, aby ich zasoby znajdowały się w ścieżce klasy dokładnie o wartości "myconfig.xml". Jest dozwolona tylko w plikach binarnych, a nie bibliotekach, ze względu na ryzyko konfliktu przestrzeni nazw.

create_executable

Wartość logiczna; nonconfigurable; wartość domyślna to True

Wycofano. Użyj w zamian zasady java_single_jar.
deploy_env

Lista etykiet; wartość domyślna to []

Lista innych celów java_binary, które reprezentują środowisko wdrożenia tego pliku binarnego. Ustaw ten atrybut podczas tworzenia wtyczki, która będzie wczytywana przez inny zasób java_binary.
Ustawienie tego atrybutu wyklucza wszystkie zależności ze ścieżki klasy środowiska wykonawczego (i pliku jar) tego pliku binarnego, które są wspólne dla tego pliku binarnego i obiektów docelowych określonych w funkcji deploy_env.
deploy_manifest_lines

Lista ciągów tekstowych; wartość domyślna to []

Lista wierszy, które należy dodać do pliku META-INF/manifest.mf wygenerowanego dla celu *_deploy.jar. Zawartość tego atrybutu nie podlega zastępowaniu „Utwórz zmienną”.
javacopts

Lista ciągów tekstowych; wartość domyślna to []

Dodatkowe opcje kompilatora dla tej biblioteki. Podlega zastępowaniu „Utwórz zmienną” i tokenizacji powłoki Bourne'a.

Te opcje kompilatora są przekazywane do javac po opcjach globalnego kompilatora.

jvm_flags

Lista ciągów tekstowych; wartość domyślna to []

Lista flag do umieszczenia w skrypcie opakowującym wygenerowana na potrzeby uruchamiania tego pliku binarnego. Podlega zastępowaniu $(location), „Utwórz zmienną” oraz tokenizacji powłoki Bourne'a.

Skrypt otoki pliku binarnego Java zawiera definicję CLASSPATH (która umożliwia znalezienie wszystkich zależnych plików jar) i wywołuje odpowiedni interpreter Javy. Wiersz poleceń wygenerowany przez skrypt otoki zawiera nazwę klasy głównej i znak "$@", dzięki czemu możesz przekazać inne argumenty po nazwie klasy. Argumenty przeznaczone do analizy przez JVM muszą być jednak określone przed nazwą klasy w wierszu poleceń. Zawartość klasy jvm_flags jest dodawana do skryptu opakowania przed wyświetleniem nazwy klasy.

Pamiętaj, że ten atrybut nie ma wpływu na dane wyjściowe *_deploy.jar.

launcher

Etykieta, wartość domyślna to None

Podaj plik binarny, który będzie używany do uruchamiania Twojego programu w Javie zamiast normalnego programu bin/java dołączonego do pakietu JDK. Wartość docelowa musi być typu cc_binary. Jako wartość tego atrybutu można określić każdy cc_binary, który implementuje Java Invocation API.

Domyślnie Bazel będzie używać normalnego programu uruchamiającego JDK (bin/java lub java.exe).

Powiązana flaga --java_launcher Bazel ma wpływ tylko na te cele java_binary i java_test, które nie mają określonego atrybutu launcher.

Pamiętaj, że zależności natywne (C++, SWIG, JNI) będą tworzone inaczej w zależności od tego, czy używasz programu uruchamiającego JDK czy innego programu uruchamiającego:

  • Jeśli używasz normalnego programu uruchamiającego JDK (domyślnie), zależności natywne są tworzone jako biblioteka współdzielona o nazwie {name}_nativedeps.so, gdzie {name} to atrybut name tej reguły java_binary. Nieużywany kod nie jest usuwany przez tag łączący w tej konfiguracji.
  • Jeśli używasz innego programu uruchamiającego, zależności natywne (C++) są statycznie połączone w pliku binarnym o nazwie {name}_nativedeps, gdzie {name} to atrybut name tej reguły java_binary. W tym przypadku tag łączący usuwa z wynikowego pliku binarnego cały kod, który jego zdaniem nie był używany. Oznacza to, że kod C++, do którego uzyskano dostęp tylko przez JNI, nie może być połączony, chyba że cel cc_library określa alwayslink = 1.

Gdy używasz dowolnego programu uruchamiającego innego niż domyślny program uruchamiający JDK, zmienia się format danych wyjściowych *_deploy.jar. Szczegóły znajdziesz w głównych dokumentach java_binary.

main_class

Ciąg znaków; wartość domyślna to ""

Nazwa klasy z metodą main(), która ma być używana jako punkt wejścia. Jeśli reguła używa tej opcji, nie potrzebuje listy srcs=[...]. Dzięki temu atrybutowi można utworzyć plik wykonywalny z biblioteki Java, która zawiera już co najmniej 1 metodę main().

Wartość tego atrybutu jest nazwą klasy, a nie pliku źródłowego. Klasa musi być dostępna w czasie działania: może być skompilowana przez tę regułę (z srcs) lub udostępniana przez zależności bezpośrednie lub pośrednie (za pomocą runtime_deps lub deps). Jeśli klasa jest niedostępna, plik binarny nie zadziała w czasie działania; nie ma kontroli w czasie kompilacji.

plugins

Lista etykiet; wartość domyślna to []

Wtyczki kompilatora Java, które będą uruchamiane w czasie kompilowania. Każdy element java_plugin określony w tym atrybucie będzie uruchamiany przy każdym kompilowaniu tej reguły. Biblioteka może też dziedziczyć wtyczki z zależności, które korzystają z zasobu exported_plugins. Zasoby wygenerowane przez wtyczkę zostaną uwzględnione w wynikowym pliku jar tej reguły.
resource_jars

Lista etykiet; wartość domyślna to []

Wycofane: użyj poleceń java_import i deps lub wykonawcze_deps.
resource_strip_prefix

Ciąg znaków; wartość domyślna to ""

Prefiks ścieżki do usunięcia z zasobów Javy.

Jeśli go podasz, będzie on usuwany z każdego pliku w atrybucie resources. Jeśli plik zasobów nie znajduje się w tym katalogu, jest to błąd. Jeśli nie określono ścieżki (domyślnie), ścieżka pliku zasobów jest określana zgodnie z tą samą logiką co pakiet Javy z plikami źródłowymi. Na przykład plik źródłowy stuff/java/foo/bar/a.txt będzie znajdować się w lokalizacji foo/bar/a.txt.

runtime_deps

Lista etykiet; wartość domyślna to []

Biblioteki do udostępnienia ostatecznej wersji pliku binarnej lub testowania tylko w czasie działania. Podobnie jak w przypadku zwykłych plików deps, pojawią się one w ścieżce klasy w środowisku wykonawczym, ale w przeciwieństwie do nich nie będą w ścieżce klasy w czasie kompilacji. Tutaj powinny być wymienione zależności potrzebne tylko w czasie działania. Narzędzia do analizy zależności powinny ignorować cele, które pojawiają się zarówno w runtime_deps, jak i deps.
stamp

Liczba całkowita; wartość domyślna to -1

Określa, czy informacje o kompilacji mają być zakodowane w pliku binarnym. Możliwe wartości:
  • stamp = 1: zawsze dodawaj informację o kompilacji do pliku binarnego, nawet w kompilacjach --nostamp. Należy unikać tego ustawienia, ponieważ może ono zakończyć zdalną pamięć podręczną pliku binarnego i wszystkich zależnych od niego działań na dalszych etapach.
  • stamp = 0: zawsze zastępuj informacje o kompilacji stałymi wartościami. Zapewnia to dobre buforowanie wyników kompilacji.
  • stamp = -1: umieszczanie informacji o kompilacji jest kontrolowane za pomocą flagi --[no]stamp.

Opatrzone pieczęciami pliki binarne nie są odbudowywane, chyba że ich zależności ulegną zmianie.

use_launcher

Wartość logiczna; wartość domyślna to True

Określa, czy plik binarny powinien używać niestandardowego programu uruchamiającego.

Jeśli ten atrybut ma wartość false (fałsz), atrybut launcher i powiązana z nim flaga --java_launcher będą ignorowane w przypadku tego celu.

use_testrunner

Wartość logiczna; wartość domyślna to False

Użyj klasy uruchamiającej testy (domyślnie com.google.testing.junit.runner.BazelTestRunner) jako głównego punktu wejścia programu w Javie i podaj klasę testową jako wartość właściwości systemu bazel.test_suite. Możesz użyć tej opcji, aby zastąpić działanie domyślne, czyli użyć mechanizmu uruchamiania testów w regułach java_test, zamiast używać go w regułach java_binary. Raczej nie chcesz tego robić. Jednym z zastosowania mogą być reguły AllTest wywoływane przez inną regułę (np. do skonfigurowania bazy danych przed przeprowadzeniem testów). Reguła AllTest musi być zadeklarowana jako java_binary, ale aplikacja uruchamiająca test powinna być głównym punktem wejścia. Nazwę klasy uruchamiania testów można zastąpić za pomocą atrybutu main_class.

java_import

Wyświetl źródło reguł
java_import(name, deps, data, add_exports, add_opens, 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, toolchains, visibility)

Ta reguła pozwala na używanie wstępnie skompilowanych plików .jar jako bibliotek reguł java_library i java_binary.

Przykłady


    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",
        ],
    )

Argumenty

Atrybuty
name

Nazwa; wymagana

Unikalna nazwa celu.

deps

Lista etykiet; wartość domyślna to []

Lista innych bibliotek, które mają być połączone z miejscem docelowym. Zobacz java_library.deps.
data

Lista etykiet; wartość domyślna to []

Lista plików wymaganych przez tę regułę w czasie działania.
add_exports

Lista ciągów tekstowych; wartość domyślna to []

Zezwól tej bibliotece na dostęp do określonych elementów module lub package.

Odpowiada to flagom javac i JVM --add-exports=.

add_opens

Lista ciągów tekstowych; wartość domyślna to []

Zezwól tej bibliotece na dostęp do danych module lub package.

Odpowiada to flagom javac i JVM --add-opens=.

constraints

Lista ciągów tekstowych; wartość domyślna to []

Dodatkowe ograniczenia nałożone na tę regułę jako biblioteka Java.
exports

Lista etykiet; wartość domyślna to []

Cele, które mają być dostępne dla użytkowników tej reguły. Zobacz java_library.exports.
jars

Lista etykiet; wymagana

Lista plików JAR udostępnionych do celów w Javie, które zależą od tego miejsca docelowego.

Wartość logiczna; wartość domyślna to False

Używaj tej biblioteki tylko do kompilacji, a nie w czasie działania. Ta opcja jest przydatna, jeśli biblioteka zostanie udostępniona przez środowisko wykonawcze podczas wykonywania. Przykładami takich bibliotek są interfejsy API IDE dla wtyczek IDE lub tools.jar dla wszystkich elementów działających na standardowym JDK.
proguard_specs

Lista etykiet; wartość domyślna to []

Pliki, które mają być używane jako specyfikacja Proguard. Będą one opisywały zestaw specyfikacji, których ma używać ProGuard. Jeśli określisz ich typ, zostaną one dodane do dowolnego miejsca docelowego android_binary w zależności od tej biblioteki. Uwzględnione tutaj pliki mogą mieć tylko reguły idempotentne, czyli -dontnote, -dontwarn, assumenosideeffects i reguły zaczynające się od -keep. Inne opcje mogą pojawiać się tylko w parametrach Proard_specs android_binary, aby umożliwić scalenie nietautologiczne.
runtime_deps

Lista etykiet; wartość domyślna to []

Biblioteki do udostępnienia ostatecznej wersji pliku binarnej lub testowania tylko w czasie działania. Zobacz java_library.runtime_deps.
srcjar

Etykieta, wartość domyślna to None

Plik JAR zawierający kod źródłowy skompilowanych plików JAR.

java_library

Wyświetl źródło reguł
java_library(name, deps, srcs, data, resources, add_exports, add_opens, bootclasspath, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exported_plugins, exports, features, javabuilder_jvm_flags, javacopts, licenses, neverlink, plugins, proguard_specs, resource_strip_prefix, restricted_to, runtime_deps, tags, target_compatible_with, testonly, toolchains, visibility)

Ta reguła kompiluje źródła i łączy je w plik .jar.

Wyniki ogólne

  • libname.jar: archiwum w Javie zawierające pliki zajęć.
  • libname-src.jar: archiwum zawierające źródła („źródłowy plik jar”).

Argumenty

Atrybuty
name

Nazwa; wymagana

Unikalna nazwa celu.

deps

Lista etykiet; wartość domyślna to []

Lista bibliotek, które chcesz połączyć z tą biblioteką. Zapoznaj się z ogólnymi uwagami na temat deps w artykule Typowe atrybuty zdefiniowane przez większość reguł kompilacji.

Pliki jar utworzone przez reguły java_library wymienione w deps będą znajdować się w ścieżce klasy kompilowanej tej reguły. Ponadto przechodnie zamknięcie deps, runtime_deps i exports nastąpi w ścieżce klasy środowiska wykonawczego.

Z kolei cele w atrybucie data znajdują się w plikach runfiles, ale nie w czasie kompilacji ani w ścieżce klasy środowiska wykonawczego.

srcs

Lista etykiet; wartość domyślna to []

Lista plików źródłowych, które są przetwarzane w celu utworzenia środowiska docelowego. Ten atrybut jest niemal zawsze wymagany; zobacz wyjątki poniżej.

Pliki źródłowe typu .java są kompilowane. W przypadku wygenerowanych plików .java zwykle zalecamy podanie tutaj nazwy reguły generowania, a nie nazwy samego pliku. Nie tylko zwiększa to czytelność reguły, ale także zwiększa jej odporność na przyszłe zmiany. Jeśli w przyszłości reguła generująca będzie generować różne pliki, wystarczy poprawić jedno miejsce: outs reguły generowania. Nie należy podawać reguły generującej w elemencie deps, ponieważ jest to wykluczenie.

Pliki źródłowe typu .srcjar zostaną rozpakowane i skompilowane. Jest to przydatne, gdy musisz wygenerować zestaw plików .java z genrule.

Reguły: jeśli reguła (zwykle genrule lub filegroup) generuje którykolwiek z wymienionych wyżej plików, zostaną one użyte w taki sam sposób jak w przypadku plików źródłowych.

Pliki źródłowe typu .properties są traktowane jako zasoby.

Pozostałe pliki są ignorowane, dopóki istnieje co najmniej 1 plik o typie opisanym powyżej. W przeciwnym razie zostanie zgłoszony błąd.

Ten argument jest prawie zawsze wymagany, chyba że podasz argument runtime_deps.

data

Lista etykiet; wartość domyślna to []

Lista plików wymaganych przez tę bibliotekę w czasie działania. Zapoznaj się z ogólnymi uwagami na temat data w artykule Typowe atrybuty zdefiniowane przez większość reguł kompilacji.

Podczas tworzenia obiektu java_library Bazel nie umieszcza tych plików nigdzie. Jeśli pliki data zostały wygenerowane, Bazel je wygeneruje. Podczas tworzenia testu, który zależy od tego zasobu java_library Bazel, Bazel kopiuje lub łączy pliki data z obszarem uruchamiania plików.

resources

Lista etykiet; wartość domyślna to []

Lista plików danych do umieszczenia w pliku jar.

Zasoby mogą być plikami źródłowymi lub wygenerowanymi.

Jeśli określisz zasoby, zostaną one umieszczone w pliku jar razem ze zwykłymi plikami .class utworzonymi w ramach kompilacji. Lokalizacja zasobów w pliku jar jest określana przez strukturę projektu. Bazel najpierw szuka standardowego układu katalogu Maven (katalogu „src”, a następnie katalogu „resources”). Jeśli go nie znajdzie, szuka najwyższego katalogu o nazwie „java” lub „javatests” (jeśli na przykład zasób znajduje się pod adresem <workspace root>/x/java/y/java/z, jego ścieżka będzie miała postać y/java/z). Heurystyki nie można zastąpić, ale atrybutu resource_strip_prefix można użyć do określenia alternatywnego katalogu dla plików zasobów.

add_exports

Lista ciągów tekstowych; wartość domyślna to []

Zezwól tej bibliotece na dostęp do określonych elementów module lub package.

Odpowiada to flagom javac i JVM --add-exports=.

add_opens

Lista ciągów tekstowych; wartość domyślna to []

Zezwól tej bibliotece na dostęp do danych module lub package.

Odpowiada to flagom javac i JVM --add-opens=.

bootclasspath

Etykieta, wartość domyślna to None

Interfejs API z ograniczeniami – nie używać!
exported_plugins

Lista etykiet; wartość domyślna to []

Lista java_plugin (np. podmiotów przetwarzających adnotacje), które mają być eksportowane do bibliotek bezpośrednio zależnych od tej biblioteki.

Określona lista obiektów java_plugin zostanie zastosowana do każdej biblioteki, która jest bezpośrednio od niej zależna, tak jakby biblioteka jawnie zadeklarowała te etykiety w elemencie plugins.

exports

Lista etykiet; wartość domyślna to []

Wyeksportowane biblioteki.

Wyświetlenie listy reguł w tym miejscu spowoduje, że będą one dostępne dla reguł nadrzędnych, tak jakby elementy nadrzędne były od nich jawnie zależne. Nie dotyczy to zwykłych (nieeksportowanych) elementów deps.

Podsumowanie: reguła X może uzyskać dostęp do kodu w komórce Y, jeśli istnieje między nimi ścieżka zależności rozpoczynająca się od krawędzi deps, po której następuje zero lub więcej krawędzi exports. Spójrzmy na kilka przykładów.

Załóżmy, że A zależy od B i B zależy od C. W tym przypadku C jest przejściową zależnością typu A, więc zmiana źródeł C i ponowne skompilowanie A wszystko zostanie prawidłowo skompilowane. Dziecko (A) nie będzie jednak mogło korzystać z zajęć w języku C. Aby to umożliwić, zespół A musi zadeklarować C w elemencie deps, albo zespół B może ułatwić usługodawcę A (i wszystko, co może od niego zależeć), deklarując C w atrybucie exports (B).

Zamknięcie wyeksportowanych bibliotek jest możliwe dla wszystkich bezpośrednich reguł nadrzędnych. Oto nieco inny przykład: wartość A zależy od wartości B, B zależy od C i D, a także eksportuje C, ale nie D. Teraz A ma dostęp do C, ale nie do D. Jeśli pliki C i D wyeksportowały odpowiednio niektóre biblioteki (odpowiednio C i D), użytkownik A miałby dostęp tylko do C, ale nie D.

Ważne: wyeksportowana reguła nie jest regularną zależność. Kontynuując poprzedni przykład: jeśli usługa B eksportuje plik C i chce użyć też pliku C, musi umieścić to w osobnym obiekcie deps.

javabuilder_jvm_flags

Lista ciągów tekstowych; wartość domyślna to []

Interfejs API z ograniczeniami – nie używać!
javacopts

Lista ciągów tekstowych; wartość domyślna to []

Dodatkowe opcje kompilatora dla tej biblioteki. Podlega zastępowaniu „Utwórz zmienną” i tokenizacji powłoki Bourne'a.

Te opcje kompilatora są przekazywane do javac po opcjach globalnego kompilatora.

Wartość logiczna; wartość domyślna to False

Określa, czy ta biblioteka ma być używana tylko do kompilacji, a nie w czasie działania. Ta opcja jest przydatna, jeśli biblioteka zostanie udostępniona przez środowisko wykonawcze w trakcie wykonywania. Przykładami takich bibliotek są interfejsy API IDE dla wtyczek IDE lub tools.jar dla wszystkich elementów działających na standardowym JDK.

Pamiętaj, że neverlink = 1 nie blokuje kompilatora wbudowywania materiału z tej biblioteki do zależnych od niej celów kompilacji, zgodnie ze specyfikacją języka Java (np. stałe typu static final String lub typów podstawowych). Preferowanym przypadkiem użycia jest więc biblioteka środowiska wykonawczego, która jest identyczna z biblioteką kompilacji.

Jeśli biblioteka środowiska wykonawczego różni się od biblioteki kompilacji, musisz się upewnić, że różni się ona tylko tam, gdzie JLS zabrania umieszczania kompilatorów w tekście (i musi on dotyczyć wszystkich przyszłych wersji JLS).

plugins

Lista etykiet; wartość domyślna to []

Wtyczki kompilatora Java, które będą uruchamiane w czasie kompilowania. Każdy element java_plugin określony w tym atrybucie będzie uruchamiany przy każdym utworzeniu tej reguły. Biblioteka może też dziedziczyć wtyczki z zależności, które korzystają z exported_plugins. Zasoby wygenerowane przez wtyczkę zostaną umieszczone w wynikowym pliku jar tej reguły.
proguard_specs

Lista etykiet; wartość domyślna to []

Pliki, które mają być używane jako specyfikacja Proguard. Będą one opisywały zestaw specyfikacji, których ma używać ProGuard. Jeśli określisz ich typ, zostaną one dodane do dowolnego miejsca docelowego android_binary w zależności od tej biblioteki. Uwzględnione tutaj pliki mogą mieć tylko reguły idempotentne, czyli -dontnote, -dontwarn, assumenosideeffects i reguły zaczynające się od -keep. Inne opcje mogą pojawiać się tylko w parametrach Proard_specs android_binary, aby umożliwić scalenie nietautologiczne.
resource_strip_prefix

Ciąg znaków; wartość domyślna to ""

Prefiks ścieżki do usunięcia z zasobów Javy.

Jeśli zostanie podany, będzie usuwany z każdego pliku w atrybucie resources. Jeśli plik zasobów nie znajduje się w tym katalogu, jest to błąd. Jeśli nie zostanie określona (domyślnie), ścieżka do pliku zasobów jest określana zgodnie z tą samą logiką co w przypadku pakietu plików źródłowych w języku Java. Na przykład plik źródłowy stuff/java/foo/bar/a.txt będzie znajdować się w lokalizacji foo/bar/a.txt.

runtime_deps

Lista etykiet; wartość domyślna to []

Biblioteki do udostępnienia ostatecznej wersji pliku binarnej lub testowania tylko w czasie działania. Podobnie jak w przypadku zwykłego obiektu deps, pojawią się one w ścieżce klasy w środowisku wykonawczym, ale w przeciwieństwie do nich nie pojawią się w ścieżce klasy w czasie kompilacji. Tutaj należy wymienić zależności potrzebne tylko w czasie działania. Narzędzia do analizy zależności powinny ignorować cele, które pojawiają się zarówno w polu runtime_deps, jak i w deps.

java_lite_proto_library

Wyświetl źródło reguł
java_lite_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_lite_proto_library generuje kod Java z plików .proto.

deps musi wskazywać reguły proto_library .

Przykład:


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

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

proto_library(
    name = "bar",
)

Argumenty

Atrybuty
name

Nazwa; wymagana

Unikalna nazwa celu.

deps

Lista etykiet; wartość domyślna to []

Lista reguł proto_library służących do generowania kodu Java.

java_proto_library

Wyświetl źródło reguł
java_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_proto_library generuje kod Java z plików .proto.

deps musi wskazywać reguły proto_library .

Przykład:


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

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

proto_library(
    name = "foo_proto",
)

Argumenty

Atrybuty
name

Nazwa; wymagana

Unikalna nazwa celu.

deps

Lista etykiet; wartość domyślna to []

Lista reguł proto_library służących do generowania kodu Java.

java_test

Wyświetl źródło reguł
java_test(name, deps, srcs, data, resources, add_exports, add_opens, args, bootclasspath, 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, neverlink, plugins, 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)

Reguła java_test() kompiluje test Java. Test to binarny kod obejmujący kod testu. Zamiast kompilowania klasy głównej zostaje wywołana główna metoda uruchamiania testu.

Cele wynikowe niejawne

  • name.jar: archiwum Java.
  • name_deploy.jar: archiwum Java odpowiednie do wdrożenia. (Tworzenie tylko po wyraźnej prośbie). Więcej informacji znajdziesz w opisie danych wyjściowych name_deploy.jar z pliku java_binary.

Zobacz sekcję poświęconą argumentom java_binary(). Ta reguła obsługuje też wszystkie atrybuty wspólne dla wszystkich reguł testowych (*_test).

Przykłady



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",
    ],
)

Argumenty

Atrybuty
name

Nazwa; wymagana

Unikalna nazwa celu.

deps

Lista etykiet; wartość domyślna to []

Lista innych bibliotek, które mają być połączone z miejscem docelowym. Zapoznaj się z ogólnymi uwagami na temat deps w artykule Typowe atrybuty zdefiniowane przez większość reguł kompilacji.
srcs

Lista etykiet; wartość domyślna to []

Lista plików źródłowych, które są przetwarzane w celu utworzenia środowiska docelowego. Ten atrybut jest niemal zawsze wymagany; zobacz wyjątki poniżej.

Pliki źródłowe typu .java są kompilowane. W przypadku wygenerowanych plików .java zwykle zalecamy podanie tutaj nazwy reguły generowania, a nie nazwy samego pliku. Nie tylko zwiększa to czytelność reguły, ale także zwiększa jej odporność na przyszłe zmiany. Jeśli w przyszłości reguła generująca będzie generować różne pliki, wystarczy poprawić jedno miejsce: outs reguły generowania. Nie należy podawać reguły generującej w elemencie deps, ponieważ jest to wykluczenie.

Pliki źródłowe typu .srcjar zostaną rozpakowane i skompilowane. Jest to przydatne, gdy musisz wygenerować zestaw plików .java z genrule.

Reguły: jeśli reguła (zwykle genrule lub filegroup) generuje którykolwiek z wymienionych wyżej plików, zostaną one użyte w taki sam sposób jak w przypadku plików źródłowych.

Ten argument jest prawie zawsze wymagany, chyba że atrybut main_class określa klasę w ścieżce klasy środowiska wykonawczego lub podasz argument runtime_deps.

data

Lista etykiet; wartość domyślna to []

Lista plików wymaganych przez tę bibliotekę w czasie działania. Zapoznaj się z ogólnymi komentarzami na temat data w typowych atrybutach zdefiniowanych przez większość reguł kompilacji.
resources

Lista etykiet; wartość domyślna to []

Lista plików danych do umieszczenia w pliku jar.

Zasoby mogą być plikami źródłowymi lub wygenerowanymi.

Jeśli określisz zasoby, zostaną one umieszczone w pliku jar razem ze zwykłymi plikami .class utworzonymi w ramach kompilacji. Lokalizacja zasobów w pliku jar jest określana przez strukturę projektu. Bazel najpierw szuka standardowego układu katalogu Maven (katalogu „src”, a następnie katalogu „resources”). Jeśli go nie znajdzie, szuka najwyższego katalogu o nazwie „java” lub „javatests” (jeśli na przykład zasób znajduje się pod adresem <workspace root>/x/java/y/java/z, jego ścieżka będzie miała postać y/java/z). Heurystyki nie można zastąpić, ale atrybutu resource_strip_prefix można użyć do określenia alternatywnego katalogu dla plików zasobów.

add_exports

Lista ciągów tekstowych; wartość domyślna to []

Zezwól tej bibliotece na dostęp do określonych elementów module lub package.

Odpowiada to flagom javac i JVM --add-exports=.

add_opens

Lista ciągów tekstowych; wartość domyślna to []

Zezwól tej bibliotece na dostęp do danych module lub package.

Odpowiada to flagom javac i JVM --add-opens=.

bootclasspath

Etykieta, wartość domyślna to None

Interfejs API z ograniczeniami – nie używać!
classpath_resources

Lista etykiet; wartość domyślna to []

NIE UŻYWAJ TEJ OPCJI, O ile nie ma innego sposobu)

Lista zasobów, które muszą znajdować się w katalogu głównym drzewa Java. Jedynym celem tego atrybutu jest obsługa bibliotek zewnętrznych, które wymagają, aby ich zasoby były dostępne w ścieżce klasy dokładnie w postaci "myconfig.xml". Jest dozwolona tylko w plikach binarnych, a nie bibliotekach, ze względu na ryzyko konfliktu przestrzeni nazw.

create_executable

Wartość logiczna; wartość domyślna to True

Wycofano. Użyj w zamian zasady java_single_jar.
deploy_manifest_lines

Lista ciągów tekstowych; wartość domyślna to []

Lista wierszy, które należy dodać do pliku META-INF/manifest.mf wygenerowanego dla celu *_deploy.jar. Zawartość tego atrybutu nie podlega zastępowaniu „Utwórz zmienną”.
javacopts

Lista ciągów tekstowych; wartość domyślna to []

Dodatkowe opcje kompilatora dla tego pliku binarnego. Podlega zastępowaniu „Utwórz zmienną” i tokenizacji powłoki Bourne'a.

Te opcje kompilatora są przekazywane do javac po opcjach globalnego kompilatora.

jvm_flags

Lista ciągów tekstowych; wartość domyślna to []

Lista flag do umieszczenia w skrypcie opakowującym wygenerowana na potrzeby uruchamiania tego pliku binarnego. Podlega zastępowaniu $(location) i „Make zmienna” oraz tokenizacja powłoki Bourne'a.

Skrypt otoki pliku binarnego Java zawiera definicję CLASSPATH (która umożliwia znalezienie wszystkich zależnych plików jar) i wywołuje odpowiedni interpreter Javy. Wiersz poleceń wygenerowany przez skrypt otoki zawiera nazwę klasy głównej i znak "$@", dzięki czemu możesz przekazać inne argumenty po nazwie klasy. Argumenty przeznaczone do analizy przez JVM muszą być jednak określone przed nazwą klasy w wierszu poleceń. Zawartość klasy jvm_flags jest dodawana do skryptu opakowania przed wyświetleniem nazwy klasy.

Pamiętaj, że ten atrybut nie ma wpływu na *_deploy.jar wyniki.

launcher

Etykieta, wartość domyślna to None

Podaj plik binarny, który będzie używany do uruchamiania Twojego programu w Javie zamiast normalnego programu bin/java dołączonego do pakietu JDK. Wartość docelowa musi być typu cc_binary. Jako wartość tego atrybutu można określić każdy obiekt cc_binary, który implementuje interfejs Java Invocation API.

Domyślnie Bazel będzie używać normalnego programu uruchamiającego JDK (bin/java lub java.exe).

Powiązana flaga --java_launcher Bazel ma wpływ tylko na te cele java_binary i java_test, które nie mają określonego atrybutu launcher.

Pamiętaj, że zależności natywne (C++, SWIG, JNI) będą tworzone inaczej w zależności od tego, czy używasz programu uruchamiającego JDK, czy innego:

  • Jeśli używasz normalnego programu uruchamiającego JDK (domyślnie), zależności natywne są tworzone jako biblioteka współdzielona o nazwie {name}_nativedeps.so, gdzie {name} jest atrybutem name tej reguły java_binary. Nieużywany kod nie jest usuwany przez tag łączący w tej konfiguracji.
  • Jeśli używasz innego programu uruchamiającego, zależności natywne (C++) są statycznie połączone z plikiem binarnym o nazwie {name}_nativedeps, gdzie {name} to atrybut name tej reguły java_binary. W takim przypadku tag łączący będzie usuwał z wynikowego pliku binarnego cały kod, który jego zdaniem nie był używany. Oznacza to, że kod C++, do którego dostęp uzyskano tylko przez JNI, nie może być połączony, chyba że cel cc_library określa alwayslink = 1.

Gdy używasz dowolnego programu uruchamiającego innego niż domyślny program uruchamiający JDK, zmienia się format danych wyjściowych *_deploy.jar. Szczegóły znajdziesz w głównych dokumentach java_binary.

main_class

Ciąg znaków; wartość domyślna to ""

Nazwa klasy z metodą main(), która ma być używana jako punkt wejścia. Jeśli reguła używa tej opcji, nie potrzebuje listy srcs=[...]. Dzięki temu atrybutowi można utworzyć plik wykonywalny z biblioteki Java, która zawiera już co najmniej 1 metodę main().

Wartość tego atrybutu jest nazwą klasy, a nie pliku źródłowego. Klasa musi być dostępna w czasie działania: może być skompilowana przez tę regułę (z srcs) lub udostępniana przez zależności bezpośrednie lub pośrednie (za pomocą runtime_deps lub deps). Jeśli klasa jest niedostępna, plik binarny nie zadziała w czasie działania; nie ma kontroli w czasie kompilacji.

Wartość logiczna; wartość domyślna to False

plugins

Lista etykiet; wartość domyślna to []

Wtyczki kompilatora Java, które będą uruchamiane w czasie kompilowania. Każdy element java_plugin określony w tym atrybucie będzie uruchamiany przy każdym utworzeniu tej reguły. Biblioteka może też dziedziczyć wtyczki z zależności, które korzystają z exported_plugins. Zasoby wygenerowane przez wtyczkę zostaną umieszczone w wynikowym pliku jar tej reguły.
resource_strip_prefix

Ciąg znaków; wartość domyślna to ""

Prefiks ścieżki do usunięcia z zasobów Javy.

Jeśli zostanie podany, będzie usuwany z każdego pliku w atrybucie resources. Jeśli plik zasobów nie znajduje się w tym katalogu, jest to błąd. Jeśli nie zostanie określona (domyślnie), ścieżka do pliku zasobów jest określana zgodnie z tą samą logiką co w przypadku pakietu plików źródłowych w języku Java. Na przykład plik źródłowy stuff/java/foo/bar/a.txt będzie znajdować się w lokalizacji foo/bar/a.txt.

runtime_deps

Lista etykiet; wartość domyślna to []

Biblioteki do udostępnienia ostatecznej wersji pliku binarnej lub testowania tylko w czasie działania. Podobnie jak w przypadku zwykłego obiektu deps, pojawią się one w ścieżce klasy w środowisku wykonawczym, ale w przeciwieństwie do nich nie pojawią się w ścieżce klasy w czasie kompilacji. Tutaj należy wymienić zależności potrzebne tylko w czasie działania. Narzędzia do analizy zależności powinny ignorować cele, które pojawiają się zarówno w polu runtime_deps, jak i w deps.
stamp

Liczba całkowita; wartość domyślna to 0

Określa, czy informacje o kompilacji mają być zakodowane w pliku binarnym. Możliwe wartości:
  • stamp = 1: zawsze dodawaj informację o kompilacji do pliku binarnego, nawet w kompilacjach --nostamp. Należy unikać tego ustawienia, ponieważ może ono zakończyć zdalną pamięć podręczną pliku binarnego i wszystkich zależnych od niego działań na dalszych etapach.
  • stamp = 0: zawsze zastępuj informacje o kompilacji stałymi wartościami. Zapewnia to dobre buforowanie wyników kompilacji.
  • stamp = -1: umieszczanie informacji o kompilacji jest kontrolowane za pomocą flagi --[no]stamp.

Opatrzone pieczęciami pliki binarne nie są odbudowywane, chyba że ich zależności ulegną zmianie.

test_class

Ciąg znaków; wartość domyślna to ""

Klasa Java, która ma zostać załadowana przez narzędzie do uruchamiania testu.

Domyślnie, jeśli ten argument nie jest zdefiniowany, używany jest starszy tryb, a zamiast niego używane są argumenty testowe. Ustaw flagę --nolegacy_bazel_java_test tak, aby nie stosować wartości zastępczej dla pierwszego argumentu.

Ten atrybut określa nazwę klasy Java, która ma zostać uruchomiona przez ten test. Rzadko trzeba to ustawiać. Jeśli pominiesz ten argument, zostanie on wywnioskowany na podstawie zasobu name celu i jego ścieżki względem źródła – root. Jeśli test znajduje się poza znanym źródłowym katalogiem głównym, Bazel zgłosi błąd, jeśli zasada test_class jest nieskonfigurowana.

W przypadku JUnit3 klasa testowa musi być podklasą klasy junit.framework.TestCase lub musi mieć publiczną statyczną metodę suite(), która zwraca junit.framework.Test (lub podklasę Test). W przypadku JUnit4 klasa musi mieć adnotację org.junit.runner.RunWith.

Ten atrybut pozwala kilku regułom java_test współdzielić ten sam parametr Test (TestCase, TestSuite, ...). Zwykle przekazywane są do niego dodatkowe informacje (np.przez jvm_flags=['-Dkey=value']), więc jego działanie różni się w każdym przypadku, np. następuje uruchomienie innego podzbioru testów. Ten atrybut umożliwia też korzystanie z testów Java poza drzewem javatests.

use_launcher

Wartość logiczna; wartość domyślna to True

Określa, czy plik binarny powinien używać niestandardowego programu uruchamiającego.

Jeśli ten atrybut ma wartość false (fałsz), atrybut launchera i powiązana z nim flaga --java_launcher będą ignorowane w przypadku tego celu.

use_testrunner

Wartość logiczna; wartość domyślna to True

Użyj klasy uruchamiania testów (domyślnie com.google.testing.junit.runner.BazelTestRunner) jako głównego punktu wejścia programu w Javie i udostępnij klasę testową usłudze uruchamiającej testy jako wartość właściwości systemowej bazel.test_suite.
Możesz użyć tej opcji, aby zastąpić działanie domyślne, czyli użyć mechanizmu uruchamiania testów w regułach java_test, zamiast używać go w regułach java_binary. Raczej nie chcesz tego robić. Jednym z nich jest użycie reguł AllTest wywoływanych przez inną regułę (np. do skonfigurowania bazy danych przed przeprowadzeniem testów). Reguła AllTest musi być zadeklarowana jako java_binary, ale nadal powinna używać narzędzia do uruchamiania testów jako głównego punktu wejścia. Nazwę klasy uruchamiania testów można zastąpić za pomocą atrybutu main_class.

java_package_configuration

Wyświetl źródło reguł
java_package_configuration(name, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, javacopts, output_licenses, packages, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

Konfiguracja stosowana do zbioru pakietów. Konfiguracje można dodawać do java_toolchain.javacopts.

Przykład:



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",
    ]
)


Argumenty

Atrybuty
name

Nazwa; wymagana

Unikalna nazwa celu.

data

Lista etykiet; wartość domyślna to []

Lista plików wymaganych przez tę konfigurację w czasie działania.
javacopts

Lista ciągów tekstowych; wartość domyślna to []

flag kompilatora Java.
output_licenses

Lista ciągów tekstowych; wartość domyślna to []

packages

Lista etykiet; wartość domyślna to []

Zbiór package_group, do którego konfiguracja powinna zostać zastosowana.

java_plugin

Wyświetl źródło reguł
java_plugin(name, deps, srcs, data, resources, add_exports, add_opens, bootclasspath, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, generates_api, javabuilder_jvm_flags, javacopts, licenses, neverlink, output_licenses, plugins, processor_class, proguard_specs, resource_strip_prefix, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_plugin definiuje wtyczki dla kompilatora Java uruchamianego przez Bazel. Obecnie jedynym obsługiwanym typem wtyczek są procesory adnotacji. Reguła java_library lub java_binary może uruchamiać wtyczki, w zależności od nich za pomocą atrybutu plugins. java_library może też automatycznie eksportować wtyczki do bibliotek, które są z nim bezpośrednio zależne, korzystając z metody exported_plugins.

Cele wynikowe niejawne

  • libname.jar: archiwum Java.

Argumenty są takie same jak java_library z wyjątkiem dodania argumentu processor_class.

Argumenty

Atrybuty
name

Nazwa; wymagana

Unikalna nazwa celu.

deps

Lista etykiet; wartość domyślna to []

Lista bibliotek, które chcesz połączyć z tą biblioteką. Zapoznaj się z ogólnymi uwagami na temat deps w artykule Typowe atrybuty zdefiniowane przez większość reguł kompilacji.

Pliki jar utworzone przez reguły java_library wymienione w deps będą znajdować się w ścieżce klasy kompilowanej tej reguły. Ponadto przechodnie zamknięcie deps, runtime_deps i exports nastąpi w ścieżce klasy środowiska wykonawczego.

Z kolei cele w atrybucie data znajdują się w plikach runfiles, ale nie w czasie kompilacji ani w ścieżce klasy środowiska wykonawczego.

srcs

Lista etykiet; wartość domyślna to []

Lista plików źródłowych, które są przetwarzane w celu utworzenia środowiska docelowego. Ten atrybut jest niemal zawsze wymagany; zobacz wyjątki poniżej.

Pliki źródłowe typu .java są kompilowane. W przypadku wygenerowanych plików .java zwykle zalecamy podanie tutaj nazwy reguły generowania, a nie nazwy samego pliku. Nie tylko zwiększa to czytelność reguły, ale także zwiększa jej odporność na przyszłe zmiany. Jeśli w przyszłości reguła generująca będzie generować różne pliki, wystarczy poprawić jedno miejsce: outs reguły generowania. Nie należy podawać reguły generującej w elemencie deps, ponieważ jest to wykluczenie.

Pliki źródłowe typu .srcjar zostaną rozpakowane i skompilowane. Jest to przydatne, gdy musisz wygenerować zestaw plików .java z genrule.

Reguły: jeśli reguła (zwykle genrule lub filegroup) generuje którykolwiek z wymienionych wyżej plików, zostaną one użyte w taki sam sposób jak w przypadku plików źródłowych.

Pliki źródłowe typu .properties są traktowane jako zasoby.

Pozostałe pliki są ignorowane, dopóki istnieje co najmniej 1 plik o typie opisanym powyżej. W przeciwnym razie zostanie zgłoszony błąd.

Ten argument jest prawie zawsze wymagany, chyba że podasz argument runtime_deps.

data

Lista etykiet; wartość domyślna to []

Lista plików wymaganych przez tę bibliotekę w czasie działania. Zapoznaj się z ogólnymi uwagami na temat data w artykule Typowe atrybuty zdefiniowane przez większość reguł kompilacji.

Podczas tworzenia obiektu java_library Bazel nie umieszcza tych plików nigdzie. Jeśli pliki data zostały wygenerowane, Bazel je wygeneruje. Podczas tworzenia testu, który zależy od tego zasobu java_library Bazel, Bazel kopiuje lub łączy pliki data z obszarem uruchamiania plików.

resources

Lista etykiet; wartość domyślna to []

Lista plików danych do umieszczenia w pliku jar.

Zasoby mogą być plikami źródłowymi lub wygenerowanymi.

Jeśli określisz zasoby, zostaną one umieszczone w pliku jar razem ze zwykłymi plikami .class utworzonymi w ramach kompilacji. Lokalizacja zasobów w pliku jar jest określana przez strukturę projektu. Bazel najpierw szuka standardowego układu katalogu Maven (katalogu „src”, a następnie katalogu „resources”). Jeśli go nie znajdzie, szuka najwyższego katalogu o nazwie „java” lub „javatests” (jeśli na przykład zasób znajduje się pod adresem <workspace root>/x/java/y/java/z, jego ścieżka będzie miała postać y/java/z). Heurystyki nie można zastąpić, ale atrybutu resource_strip_prefix można użyć do określenia alternatywnego katalogu dla plików zasobów.

add_exports

Lista ciągów tekstowych; wartość domyślna to []

Zezwól tej bibliotece na dostęp do określonych elementów module lub package.

Odpowiada to flagom javac i JVM --add-exports=.

add_opens

Lista ciągów tekstowych; wartość domyślna to []

Zezwól tej bibliotece na dostęp do danych module lub package.

Odpowiada to flagom javac i JVM --add-opens=.

bootclasspath

Etykieta, wartość domyślna to None

Interfejs API z ograniczeniami – nie używać!
generates_api

Wartość logiczna; wartość domyślna to False

Ten atrybut oznacza procesory adnotacji, które generują kod API.

Jeśli reguła korzysta z procesora adnotacji generującego interfejs API, inne reguły w zależności od niego mogą odwoływać się do wygenerowanego kodu tylko wtedy, gdy ich działania kompilacji są zaplanowane po wygenerowaniu reguły. Ten atrybut instruuje Bazel, aby wprowadził ograniczenia harmonogramu, gdy włączona jest opcja --java_header_compilation.

OSTRZEŻENIE: ten atrybut wpływa na wydajność kompilacji. Używaj go tylko wtedy, gdy to konieczne.

javabuilder_jvm_flags

Lista ciągów tekstowych; wartość domyślna to []

Interfejs API z ograniczeniami – nie używać!
javacopts

Lista ciągów tekstowych; wartość domyślna to []

Dodatkowe opcje kompilatora dla tej biblioteki. Podlega zastępowaniu „Utwórz zmienną” i tokenizacji powłoki Bourne'a.

Te opcje kompilatora są przekazywane do javac po opcjach globalnego kompilatora.

Wartość logiczna; wartość domyślna to False

Określa, czy ta biblioteka ma być używana tylko do kompilacji, a nie w czasie działania. Ta opcja jest przydatna, jeśli biblioteka zostanie udostępniona przez środowisko wykonawcze w trakcie wykonywania. Przykładami takich bibliotek są interfejsy API IDE dla wtyczek IDE lub tools.jar dla wszystkich elementów działających na standardowym JDK.

Pamiętaj, że neverlink = 1 nie blokuje kompilatora wbudowywania materiału z tej biblioteki do zależnych od niej celów kompilacji, zgodnie ze specyfikacją języka Java (np. stałe typu static final String lub typów podstawowych). Preferowanym przypadkiem użycia jest więc biblioteka środowiska wykonawczego, która jest identyczna z biblioteką kompilacji.

Jeśli biblioteka środowiska wykonawczego różni się od biblioteki kompilacji, musisz się upewnić, że różni się ona tylko tam, gdzie JLS zabrania umieszczania kompilatorów w tekście (i musi on dotyczyć wszystkich przyszłych wersji JLS).

output_licenses

Lista ciągów tekstowych; wartość domyślna to []

plugins

Lista etykiet; wartość domyślna to []

Wtyczki kompilatora Java, które będą uruchamiane w czasie kompilowania. Każdy element java_plugin określony w tym atrybucie będzie uruchamiany przy każdym utworzeniu tej reguły. Biblioteka może też dziedziczyć wtyczki z zależności, które korzystają z exported_plugins. Zasoby wygenerowane przez wtyczkę zostaną umieszczone w wynikowym pliku jar tej reguły.
processor_class

Ciąg znaków; wartość domyślna to ""

Klasa procesora to pełny i jednoznaczny typ klasy, której kompilator Java powinien używać jako punktu wejścia do procesora adnotacji. Jeśli jej nie określisz, nie będzie ona dodawać procesora adnotacji do przetwarzania adnotacji kompilatora Java, ale jego ścieżka klasy w czasie działania będzie nadal dołączona do ścieżki procesora adnotacji w kompilatorze. Jest ona przeznaczona głównie do wtyczek podatnych na błędy, które są ładowane ze ścieżki procesora adnotacji przy użyciu metody java.util.ServiceLoader.
proguard_specs

Lista etykiet; wartość domyślna to []

Pliki, które mają być używane jako specyfikacja Proguard. Będą one opisywały zestaw specyfikacji, których ma używać ProGuard. Jeśli określisz ich typ, zostaną one dodane do dowolnego miejsca docelowego android_binary w zależności od tej biblioteki. Uwzględnione tutaj pliki mogą mieć tylko reguły idempotentne, czyli -dontnote, -dontwarn, assumenosideeffects i reguły zaczynające się od -keep. Inne opcje mogą pojawiać się tylko w parametrach Proard_specs android_binary, aby umożliwić scalenie nietautologiczne.
resource_strip_prefix

Ciąg znaków; wartość domyślna to ""

Prefiks ścieżki do usunięcia z zasobów Javy.

Jeśli zostanie podany, będzie usuwany z każdego pliku w atrybucie resources. Jeśli plik zasobów nie znajduje się w tym katalogu, jest to błąd. Jeśli nie zostanie określona (domyślnie), ścieżka do pliku zasobów jest określana zgodnie z tą samą logiką co w przypadku pakietu plików źródłowych w języku Java. Na przykład plik źródłowy stuff/java/foo/bar/a.txt będzie znajdować się w lokalizacji foo/bar/a.txt.

java_runtime

Wyświetl źródło reguł
java_runtime(name, srcs, compatible_with, default_cds, deprecation, distribs, exec_compatible_with, exec_properties, features, hermetic_srcs, hermetic_static_libs, java, java_home, lib_ct_sym, lib_modules, output_licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, version, visibility)

Określa konfigurację środowiska wykonawczego Java.

Przykład:



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


Argumenty

Atrybuty
name

Nazwa; wymagana

Unikalna nazwa celu.

srcs

Lista etykiet; wartość domyślna to []

Wszystkie pliki w środowisku wykonawczym.
default_cds

Etykieta, wartość domyślna to None

Domyślne archiwum CDS dla hermetycznych elementów java_runtime. Gdy w miejscu docelowym java_binary jest włączona funkcja hermetyczna, a cel nie udostępnia własnego archiwum CDS przez określenie atrybutu classlist, domyślny kod CDS java_runtime jest pakowany do pliku JAR do wdrożenia hermetycznego.
hermetic_srcs

Lista etykiet; wartość domyślna to []

Pliki w środowisku wykonawczym potrzebne do wdrożeń hermetycznych.
hermetic_static_libs

Lista etykiet; wartość domyślna to []

Biblioteki statycznie połączone z programem uruchamiającym na potrzeby wdrożeń hermetycznych
java

Etykieta, wartość domyślna to None

Ścieżka do pliku wykonywalnego Java.
java_home

Ciąg znaków; wartość domyślna to ""

Ścieżka do katalogu głównego środowiska wykonawczego. Podlega zastępowaniu zmiennej „Make”. Jeśli ta ścieżka jest bezwzględna, reguła oznacza niehermetyczne środowisko wykonawcze Java ze dobrze znaną ścieżką. W takim przypadku atrybuty srcs i java muszą być puste.
lib_ct_sym

Etykieta, wartość domyślna to None

Plik lib/ct.sym potrzebny do skompilowania za pomocą --release. Jeśli go nie podasz, a w srcs jest dokładnie 1 plik, którego ścieżka kończy się na /lib/ct.sym, zostanie użyty ten plik.
lib_modules

Etykieta, wartość domyślna to None

Plik lib/modules potrzebny na potrzeby wdrożeń hermetycznych.
output_licenses

Lista ciągów tekstowych; wartość domyślna to []

version

Liczba całkowita; wartość domyślna to 0

Wersja funkcji środowiska wykonawczego Java. Liczba całkowita zwrócona przez funkcję Runtime.version().feature().

java_toolchain

Wyświetl źródło reguł
java_toolchain(name, android_lint_data, android_lint_jvm_opts, android_lint_opts, android_lint_package_configuration, android_lint_runner, bootclasspath, compatible_javacopts, compatible_with, deprecation, deps_checker, distribs, exec_compatible_with, exec_properties, features, forcibly_disable_header_compilation, genclass, header_compiler, header_compiler_builtin_processors, header_compiler_direct, ijar, jacocorunner, java_runtime, javabuilder, javabuilder_data, javabuilder_jvm_opts, javac_supports_multiplex_workers, javac_supports_worker_cancellation, javac_supports_worker_multiplex_sandboxing, javac_supports_workers, javacopts, jspecify_implicit_deps, jspecify_javacopts, jspecify_packages, jspecify_processor, jspecify_processor_class, jspecify_stubs, jvm_opts, licenses, misc, oneversion, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, proguard_allowlister, reduced_classpath_incompatible_processors, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, toolchains, tools, turbine_data, turbine_jvm_opts, visibility, xlint)

Określa konfigurację kompilatora Java. Użyty łańcuch narzędzi można zmienić za pomocą argumentu --java_toolchain. Zwykle nie należy tworzyć takich reguł, chyba że chcesz dostroić kompilator Java.

Przykłady

Prosty przykład to:



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",
)

Argumenty

Atrybuty
name

Nazwa; wymagana

Unikalna nazwa celu.

android_lint_data

Lista etykiet; wartość domyślna to []

Etykiety narzędzi dostępnych do rozwijania etykiet w systemie android_lint_jvm_opts.
android_lint_jvm_opts

Lista ciągów tekstowych; wartość domyślna to []

Lista argumentów JVM podczas wywoływania funkcji Android Lint.
android_lint_opts

Lista ciągów tekstowych; wartość domyślna to []

Lista argumentów Android Lint.
android_lint_package_configuration

Lista etykiet; wartość domyślna to []

Konfiguracja Android Lint, która powinna zostać zastosowana do określonych grup pakietów.
android_lint_runner

Etykieta, wartość domyślna to None

Etykieta programu uruchamiającego Android Lint (jeśli istnieje).
bootclasspath

Lista etykiet; wartość domyślna to []

Docelowe wpisy bootclasspath w Javie. Odpowiada flagie -bootclasspath w javac.
compatible_javacopts

null; default is {}

Wewnętrzny interfejs API – nie używać
deps_checker

Etykieta, wartość domyślna to None

Etykieta pliku jar wdrożenia ImportDepsChecker.
forcibly_disable_header_compilation

Wartość logiczna; wartość domyślna to False

Zastępuje polecenie --java_header_compilation, aby wyłączyć kompilację nagłówków na platformach, które jej nie obsługują, np. na JDK 7 Bazel.
genclass

Etykieta, wartość domyślna to None

Etykieta pliku jar wdrożenia GenClass.
header_compiler

Etykieta, wartość domyślna to None

Etykieta kompilatora nagłówków. Wymagane, jeśli włączona jest opcja --java_header_compilation.
header_compiler_builtin_processors

Lista ciągów tekstowych; wartość domyślna to []

Wewnętrzny interfejs API – nie używać
header_compiler_direct

Etykieta, wartość domyślna to None

Opcjonalna etykieta kompilatora nagłówków używana na potrzeby bezpośrednich działań ścieżki klasy, które nie obejmują procesorów adnotacji generujących interfejsy API.

To narzędzie nie obsługuje przetwarzania adnotacji.

ijar

Etykieta, wartość domyślna to None

Etykieta pliku wykonywalnego ijar.
jacocorunner

Etykieta, wartość domyślna to None

Etykieta pliku jar wdrożenia JacocoZasięgRunner.
java_runtime

Etykieta, wartość domyślna to None

Biblioteka java_runtime do użycia z tym łańcuchem narzędzi. Domyślnie w konfiguracji wykonywania jest java_runtime.
javabuilder

Etykieta, wartość domyślna to None

Etykieta pliku jar wdrożenia JavaBuilder.
javabuilder_data

Lista etykiet; wartość domyślna to []

Etykiety danych dostępnych do rozwijania etykiet w pliku javabuilder_jvm_opts.
javabuilder_jvm_opts

Lista ciągów tekstowych; wartość domyślna to []

Lista argumentów JVM podczas wywoływania obiektu JavaBuilder.
javac_supports_multiplex_workers

Wartość logiczna; wartość domyślna to True

Wartość prawda, jeśli komponent JavaBuilder obsługuje uruchamianie jako stała instancja robocza multipleksu, jeśli tak nie jest, ma wartość false.
javac_supports_worker_cancellation

Wartość logiczna; wartość domyślna to True

Wartość to „prawda”, jeśli JavaBuilder obsługuje anulowanie trwałych instancji roboczych, lub „false”, jeśli nie jest.
javac_supports_worker_multiplex_sandboxing

Wartość logiczna; wartość domyślna to False

Wartość prawda, jeśli komponent JavaBuilder obsługuje uruchamianie jako stałej instancji roboczej multipleksu z piaskownicą. Jeśli tak nie jest, ma wartość false.
javac_supports_workers

Wartość logiczna; wartość domyślna to True

Prawda, jeśli JavaBuilder obsługuje uruchamianie jako trwałą instancję roboczą, lub false, jeśli nie jest.
javacopts

Lista ciągów tekstowych; wartość domyślna to []

Lista dodatkowych argumentów kompilatora Java. Obszerną listę możliwych flag kompilatora Java znajdziesz w dokumentacji kompilatora Java.
jspecify_implicit_deps

Etykieta, wartość domyślna to None

Funkcja eksperymentalna, nie należy jej używać.
jspecify_javacopts

Lista ciągów tekstowych; wartość domyślna to []

Funkcja eksperymentalna, nie należy jej używać.
jspecify_packages

Lista etykiet; wartość domyślna to []

Funkcja eksperymentalna, nie należy jej używać.
jspecify_processor

Etykieta, wartość domyślna to None

Funkcja eksperymentalna, nie należy jej używać.
jspecify_processor_class

Ciąg znaków; wartość domyślna to ""

Funkcja eksperymentalna, nie należy jej używać.
jspecify_stubs

Lista etykiet; wartość domyślna to []

Funkcja eksperymentalna, nie należy jej używać.
jvm_opts

Lista ciągów tekstowych; wartość domyślna to []

Lista argumentów JVM podczas wywoływania kompilatora Java. Obszerną listę możliwych flag tej opcji znajdziesz w dokumentacji maszyny wirtualnej Java.
misc

Lista ciągów tekstowych; wartość domyślna to []

Wycofano: zamiast tego użyj javacopts
oneversion

Etykieta, wartość domyślna to None

Etykieta pliku binarnego wymuszania tylko jednej wersji.
oneversion_allowlist_for_tests

Etykieta, wartość domyślna to None

Etykieta listy dozwolonych dla 1 wersji na potrzeby testów.
oneversion_whitelist

Etykieta, wartość domyślna to None

Etykieta listy dozwolonych dla jednej wersji.
package_configuration

Lista etykiet; wartość domyślna to []

Konfiguracja, która powinna zostać zastosowana do określonych grup pakietów.
proguard_allowlister

Etykieta, wartość domyślna to "@bazel_tools//tools/jdk:proguard_whitelister"

Etykieta listy dozwolonych ProGuard.
reduced_classpath_incompatible_processors

Lista ciągów tekstowych; wartość domyślna to []

Wewnętrzny interfejs API – nie używać
singlejar

Etykieta, wartość domyślna to None

Etykieta pliku jar wdrożenia SingleJar.
source_version

Ciąg znaków; wartość domyślna to ""

Wersja źródłowa środowiska Java (np. „6” lub „7”). Określa ona, jakie struktury kodu są dozwolone w kodzie źródłowym Javy.
target_version

Ciąg znaków; wartość domyślna to ""

Wersja docelowa środowiska Java (np. „6” lub „7”). Określa ona, dla którego środowiska wykonawczego Java powinna być skompilowana klasa.
timezone_data

Etykieta, wartość domyślna to None

Etykieta kontenera zasobów zawierającego dane strefy czasowej. Jeśli jest ustawione, dane o strefie czasowej są dodawane jako zależność środowiska wykonawczego od wszystkich reguł java_binary.
tools

Lista etykiet; wartość domyślna to []

Etykiety narzędzi dostępnych do rozwijania etykiet w pliku jvm_opts.
turbine_data

Lista etykiet; wartość domyślna to []

Etykiety danych dostępnych do rozwijania etykiet w pliku turbine_jvm_opts.
turbine_jvm_opts

Lista ciągów tekstowych; wartość domyślna to []

Lista argumentów JVM podczas wywoływania turbiny.
xlint

Lista ciągów tekstowych; wartość domyślna to []

Lista ostrzeżeń, które należy dodać do listy domyślnej lub z niej usunąć. poprzedza go myślnikiem, aby go usunąć. Więcej informacji znajdziesz w dokumentacji języka Javac na temat opcji -Xlint.