자바 규칙

<ph type="x-smartling-placeholder"></ph> <ph type="x-smartling-placeholder"></ph> 문제 신고 소스 보기 를 참조하세요. 1박 · 7.3 · 7.2 · 7.1 · 7.0 · 6.5 에 대해 자세히 알아보세요.

규칙

java_binary

<ph type="x-smartling-placeholder"></ph> 규칙 소스 보기
java_binary(name, deps, srcs, data, resources, args, classpath_resources, compatible_with, create_executable, deploy_env, deploy_manifest_lines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, javacopts, jvm_flags, launcher, licenses, main_class, output_licenses, plugins, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, stamp, tags, target_compatible_with, testonly, toolchains, use_launcher, use_testrunner, visibility)

Java 보관 파일('jar 파일')과 규칙과 동일한 이름의 래퍼 셸 스크립트를 빌드합니다. 래퍼 셸 스크립트는 무엇보다도 각 포드에 대한 jar 파일을 포함하는 클래스 경로를 사용합니다. 바이너리가 종속된 라이브러리를 사용합니다 래퍼 셸 스크립트를 실행할 때 비어 있지 않은 모든 코드는 JAVABIN 환경 변수가 다음을 통해 지정된 버전보다 우선합니다. Bazel의 --java_runtime_version 플래그

래퍼 스크립트는 여러 고유한 플래그를 허용합니다. 다음을 참고하세요. //src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt 를 참조하세요.

암시적 출력 타겟

  • name.jar: 클래스 파일 및 기타 항목이 포함된 Java 보관 파일 리소스를 배포합니다
  • name-src.jar: 소스('소스')가 포함된 보관 파일 jar')를 입력합니다.
  • name_deploy.jar: 배포에 적합한 Java 보관 파일 (단, 명시적으로 요청될 경우 빌드됩니다.

    규칙에 맞는 <name>_deploy.jar 대상 빌드 는 java -jar 명령어 또는 래퍼 스크립트의 --singlejar 사용 옵션을 선택합니다. 래퍼 스크립트를 사용하는 것이 java -jar보다 선호되는 이유는 다음과 같습니다. 또한 JVM 플래그 및 네이티브 라이브러리를 로드합니다.

    배포 jar에는 클래스 로더가 찾을 수 있는 모든 클래스가 포함되어 있습니다. 바이너리의 래퍼 스크립트에서 클래스 경로를 처음부터 끝까지 검색했습니다. 또한 종속 항목에 필요한 네이티브 라이브러리가 포함되어 있습니다. 이러한 항목은 자동으로 로드되고 런타임 시 JVM에 접근할 수 있습니다

    타겟에서 런처를 지정하는 경우 속성을 사용하면 일반 JAR 파일이 아니라 _deploy.jar가 네이티브 바이너리입니다. 여기에는 런처와 모두 정적 바이너리로 연결되어 있습니다. 실제 jar 파일의 바이트는 해당 네이티브 바이너리에 추가되어, Java 코드 및 실행 파일이 있습니다. 생성된 jar 파일을 직접 실행할 수 있습니다. 네이티브 바이너리를 실행하는 것처럼 말입니다.

  • name_deploy-src.jar: 소스가 포함된 보관 파일 타겟의 임시 폐쇄로부터 수집된 데이터 이러한 항목은 jar에 일치하는 소스 jar가 없는 경우를 제외하고 deploy.jar입니다.

deps 속성은 다음 항목이 없는 java_binary 규칙에서 허용되지 않습니다. srcs 이러한 규칙은 main_class 제공: runtime_deps를 탭합니다.

다음 코드 스니펫은 일반적인 실수를 보여줍니다.

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

대신 다음 단계를 따르세요.

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

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.


파일의 기본 진입점인 소스 파일의 이름을 애플리케이션 (확장자 제외)을 선택합니다. 예를 들어 진입점이 Main.java인 경우 이름은 Main일 수 있습니다.
deps

라벨 목록 기본값은 []입니다.

타겟에 연결할 다른 라이브러리의 목록입니다. 다음에서 deps에 대한 일반적인 댓글을 확인하세요. 일반적인 속성 대부분의 빌드 규칙에 대해 자세히 알아보세요.
srcs

라벨 목록 기본값은 []입니다.

대상을 만들기 위해 처리된 소스 파일의 목록입니다. 이 속성은 거의 항상 필수입니다. 아래 예외를 참고하세요.

.java 유형의 소스 파일이 컴파일됩니다. 생성된 .java 파일에는 일반적으로 생성 규칙의 이름을 포함하는 것이 좋습니다. 를 입력합니다. 이렇게 하면 가독성이 향상될 뿐만 아니라 향후 변경에 대한 규칙을 더 탄력적으로 만듭니다. 생성 규칙이 생성되는 경우 다른 파일이 있을 경우 한 위치만 수정하면 됩니다. outs 확인할 수 있습니다. 생성 규칙을 deps에 나열해서는 안 됩니다. 이는 노옵스(no-ops)이기 때문입니다.

.srcjar 유형의 소스 파일은 압축이 해제되고 컴파일됩니다. (이는 genrule을 사용하여 .java 파일 세트를 생성해야 합니다.)

규칙: 규칙 (일반적으로 genrule 또는 filegroup)이 생성하는 경우 위에 나열된 파일 중 일부라도 할 수 있습니다.

이 인수는 main_class 속성은 클래스를 호출하거나 runtime_deps 인수를 지정할 수 있습니다.

resources

라벨 목록 기본값은 []입니다.

Java jar에 포함할 데이터 파일의 목록입니다.

리소스가 지정되면 일반적인 컴파일을 통해 생성된 .class 파일 내부 리소스 위치 프로젝트 구조에 따라 결정됩니다 Bazel은 먼저 Maven의 표준 디렉터리 레이아웃 ('src' 디렉터리 뒤에 나오는 'resources' 디렉터리 하위 요소) 그렇지 않은 경우 Bazel이 'java'라는 최상위 디렉터리를 또는 'javatests' (따라서 예를 들어 리소스가 <workspace root>/x/java/y/java/z에 있으면 리소스의 경로는 y/java/z입니다. 이 휴리스틱은 재정의할 수 없습니다. 하지만 resource_strip_prefix 속성을 사용하여 리소스 파일의 특정 대체 디렉터리를 확인할 수 있습니다

리소스는 소스 파일 또는 생성된 파일일 수 있습니다.

classpath_resources

라벨 목록 기본값은 []입니다.

다른 방법이 없다면 이 옵션을 사용하지 마세요.)

자바 트리의 루트에 있어야 하는 리소스 목록입니다. 이 속성의 유일한 목적은 리소스가 필요한 서드 파티 라이브러리를 지원하는 것입니다. 클래스 경로에서 정확히 "myconfig.xml"로 발견되었습니다. 바이너리를 사용해야 합니다.

create_executable

부울; 구성 불가 기본값은 True입니다.

지원 중단되었으므로 대신 java_single_jar을 사용하세요.
deploy_env

라벨 목록 기본값은 []입니다.

배포를 나타내는 다른 java_binary 대상 목록 이 바이너리를 위한 환경입니다 다른 개발자가 로드할 플러그인을 빌드할 때 이 속성을 설정합니다. java_binary
이 속성을 설정하면 이 바이너리에서 공유하는 런타임 클래스 경로 (및 jar 배포)를 바이너리 및 deploy_env에 지정된 타겟.
deploy_manifest_lines

문자열 목록 기본값은 []입니다.

생성된 META-INF/manifest.mf 파일에 추가할 행 목록입니다. *_deploy.jar 타겟. 이 속성의 내용은 주제가 아닙니다. "Makevariable"로 대체되었습니다.
javacopts

문자열 목록 기본값은 []입니다.

이 라이브러리의 추가 컴파일러 옵션입니다. 'Make 변수' 대체 적용 Bourne 셸 토큰화.

이러한 컴파일러 옵션은 전역 컴파일러 옵션 다음에 javac로 전달됩니다.

jvm_flags

문자열 목록 기본값은 []입니다.

이 바이너리를 실행하기 위해 생성된 래퍼 스크립트에 포함할 플래그 목록입니다. $(location) 적용 및 "Make 변수" 대체 Bourne 셸 토큰화.

Java 바이너리의 래퍼 스크립트에 CLASSPATH 정의가 포함됨 (종속된 모든 jar를 찾기 위해) 올바른 Java 인터프리터를 호출합니다. 래퍼 스크립트에 의해 생성된 명령줄에는 기본 클래스 다음에 "$@"가 와야 하므로 다른 클래스를 인수를 사용합니다. 그러나 명령어에서 클래스 이름 앞에 지정해야 합니다. 행입니다. jvm_flags의 콘텐츠가 래퍼에 추가됨 스크립트를 추가합니다.

이 속성은 *_deploy.jar영향을 미치지 않습니다. 출력됩니다.

launcher

라벨 기본값은 None입니다.

Java 프로그램을 실행하는 데 사용할 바이너리를 일반 bin/java 프로그램이 JDK에 포함되어 있습니다. 타겟은 cc_binary이어야 합니다. 다음과 같은 모든 cc_binary 는 <ph type="x-smartling-placeholder"></ph> Java Invocation API를 이 속성의 값으로 지정할 수 있습니다.

기본적으로 Bazel은 일반 JDK 런처 (bin/java 또는 java.exe)를 사용합니다.

관련 --java_launcher Bazel 플래그는 이러한 플래그에만 영향을 미칩니다. 다음과 같은 java_binaryjava_test 타겟 launcher 속성을 지정하지 않았습니다.

네이티브 (C++, SWIG, JNI) 종속 항목은 다르게 빌드됩니다. JDK 런처를 사용하는지 다른 런처를 사용하는지에 따라 다음 명령어를 실행합니다.

  • 일반 JDK 런처 (기본값)를 사용하는 경우 네이티브 종속 항목은 다음과 같습니다. {name}_nativedeps.so라는 공유 라이브러리로 빌드되었습니다. 여기서 {name}는 이 java_binary 규칙의 name 속성입니다. 사용하지 않는 코드는 이 구성의 링커에 의해 삭제되지 않습니다.
  • 다른 런처를 사용하는 경우 네이티브 (C++) 종속 항목이 정적으로 {name}_nativedeps라는 바이너리에 연결됩니다. 여기서 {name}는 는 이 java_binary 규칙의 name 속성입니다. 이 경우 링커는 결과 바이너리에서 사용되지 않는다고 생각되는 모든 코드를 삭제합니다. 즉, JNI를 통해서만 액세스되는 C++ 코드는 cc_library 타겟이 alwayslink = 1를 지정합니다.

기본 JDK 런처 이외의 런처를 사용하는 경우 *_deploy.jar 출력이 변경됩니다. 주요 java_binary 문서를 참조하세요.

main_class

String; 기본값은 ""입니다.

진입점으로 사용할 main() 메서드가 있는 클래스 이름입니다. 규칙에서 이 옵션을 사용하는 경우에는 srcs=[...] 목록이 필요하지 않습니다. 따라서 이 특성을 사용하면 이미 실행 중인 Java 라이브러리로부터 하나 이상의 main() 메서드를 포함합니다.

이 속성의 값은 소스 파일이 아니라 클래스 이름입니다. 클래스는 런타임 시 사용 가능: srcs에서 이 규칙으로 컴파일할 수 있습니다. 직접 또는 전이 종속 항목에서 제공 (runtime_deps 또는 deps)을 입력합니다. 클래스를 사용할 수 없는 경우 런타임에서 바이너리가 실패합니다. 거기 빌드 시간 검사가 아닙니다.

plugins

라벨 목록 기본값은 []입니다.

컴파일 시간에 실행할 Java 컴파일러 플러그인입니다. 이 규칙이 적용될 때마다 이 속성에 지정된 모든 java_plugin이(가) 실행됩니다. 빌드됩니다 라이브러리는 또한 종속 항목으로부터 플러그인을 상속할 수 있습니다. exported_plugins 리소스 이 규칙의 결과 jar에 포함됩니다.
resource_jars

라벨 목록 기본값은 []입니다.

지원 중단됨: 대신 java_import 및 deps 또는runtime_deps를 사용하세요.
resource_strip_prefix

String; 기본값은 ""입니다.

Java 리소스에서 삭제할 경로 프리픽스입니다.

지정된 경우 이 경로 접두어는 resources의 모든 파일에서 제거됩니다. 속성의 값을 제공합니다. 리소스 파일이 이 디렉터리에 없으면 오류입니다. 그렇지 않은 경우 기본값인 경우 리소스 파일의 경로는 소스 파일의 Java 패키지로 로직을 사용합니다. 예를 들어 stuff/java/foo/bar/a.txt 위치는 foo/bar/a.txt입니다.

runtime_deps

라벨 목록 기본값은 []입니다.

런타임 시에만 최종 바이너리 또는 테스트에 사용할 수 있는 라이브러리입니다. 일반 deps와 마찬가지로 런타임 클래스 경로에 표시되지만 컴파일 시간 클래스 경로가 아닌 이들을 사용합니다. 런타임에만 필요한 종속 항목은 확인하시기 바랍니다. 종속 항목 분석 툴은 runtime_depsdeps
stamp

정수; 기본값은 -1입니다.

빌드 정보를 바이너리로 인코딩할지 여부입니다. 가능한 값은 다음과 같습니다. <ph type="x-smartling-placeholder">
    </ph>
  • stamp = 1: --nostamp 빌드 이 사용하지 않는 것이 좋습니다. 그러면 원격 캐싱이 중단될 가능성이 있기 때문입니다. 바이너리 및 여기에 종속된 모든 다운스트림 작업을 처리합니다.
  • stamp = 0: 빌드 정보를 항상 상수 값으로 바꿉니다. 이 빌드 결과 캐싱이 잘 되고
  • stamp = -1: 빌드 정보의 삽입은 --[no]stamp 플래그

스탬프 처리된 바이너리는 종속 항목이 변경되지 않는 한 다시 빌드되지 않습니다.

use_launcher

부울; 기본값은 True입니다.

바이너리가 맞춤 런처를 사용해야 하는지 여부입니다.

이 속성을 false로 설정하면 launcher 속성 및 관련 --java_launcher 플래그 이 타겟에서 무시됩니다.

use_testrunner

부울; 기본값은 False입니다.

테스트 실행기 사용 (기본적으로 com.google.testing.junit.runner.BazelTestRunner) 클래스를 기본 진입점을 만들고 테스트 클래스를 제공합니다. bazel.test_suite 값으로 테스트 실행기에 추가 system 속성입니다. 이를 사용하여 기본 테스트 실행기를 사용하여 규칙 java_test개, java_binary 규칙에는 사용하지 않습니다. 가능성 낮음 이렇게 하는 것이 좋습니다 1회용: AllTest 다른 규칙에서 호출하는 규칙 (데이터베이스를 설정하기 위해) 테스트 실행 전)가 있는지 확인합니다. AllTest 규칙을 java_binary로 선언해야 하지만 여전히 테스트 실행기를 주 진입점으로 사용합니다. 테스트 실행기 클래스의 이름은 main_class 속성으로 재정의할 수 있습니다.

java_import

<ph type="x-smartling-placeholder"></ph> 규칙 소스 보기
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)

이 규칙을 사용하면 사전 컴파일된 .jar 파일을 다음과 같이 사용할 수 있습니다. java_library 및 규칙 java_binary


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

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

deps

라벨 목록 기본값은 []입니다.

타겟에 연결할 다른 라이브러리의 목록입니다. java_library.deps를 참고하세요.
data

라벨 목록 기본값은 []입니다.

런타임 시 이 규칙에 필요한 파일의 목록입니다.
add_exports

문자열 목록 기본값은 []입니다.

이 라이브러리가 지정된 module 또는 package에 액세스하도록 허용합니다.

이는 javac 및 JVM --add-exports= 플래그에 해당합니다.

add_opens

문자열 목록 기본값은 []입니다.

이 라이브러리가 지정된 module에 반사적으로 액세스하도록 허용합니다. 또는 package입니다.

이는 javac 및 JVM --add-opens= 플래그에 해당합니다.

constraints

문자열 목록 기본값은 []입니다.

Java 라이브러리로 이 규칙에 적용되는 추가 제약 조건입니다.
exports

라벨 목록 기본값은 []입니다.

이 규칙의 사용자가 사용할 수 있는 대상입니다. java_library.exports를 참고하세요.
jars

라벨 목록 필수

이 타겟에 종속되는 Java 타겟에 제공된 JAR 파일 목록입니다.

부울; 기본값은 False입니다.

런타임이 아닌 컴파일에만 이 라이브러리를 사용합니다. 라이브러리가 런타임 환경에서 제공되는 경우 유용함 실행할 수 있습니다 이러한 라이브러리의 예는 IDE API입니다. IDE 플러그인의 경우 또는 tools.jar에서 실행 중인 모든 앱의 경우 사용할 수 있습니다
proguard_specs

라벨 목록 기본값은 []입니다.

Proguard 사양으로 사용할 파일입니다. 이는 Proguard에서 사용할 사양 집합을 설명합니다. 지정된 경우 이 라이브러리에 따라 모든 android_binary 타겟에 추가됩니다. 여기에 포함된 파일에는 멱등적 규칙, 즉 -dontnote, -dontwarn, -keep으로 시작하는 규칙을 가정합니다. 다른 옵션은 android_binary의 proguard_specs를 사용하여 자동 논리가 아닌 병합을 보장해야 합니다.
runtime_deps

라벨 목록 기본값은 []입니다.

런타임 시에만 최종 바이너리 또는 테스트에 사용할 수 있는 라이브러리입니다. java_library.runtime_deps를 참고하세요.
srcjar

라벨 기본값은 None입니다.

컴파일된 JAR 파일의 소스 코드가 포함된 JAR 파일

java_library

<ph type="x-smartling-placeholder"></ph> 규칙 소스 보기
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)

이 규칙은 소스를 .jar 파일로 컴파일하고 연결합니다.

암시적 출력

  • libname.jar: 클래스 파일이 포함된 Java 보관 파일
  • libname-src.jar: 소스('소스')가 포함된 보관 파일 jar')를 입력합니다.

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

deps

라벨 목록 기본값은 []입니다.

이 라이브러리에 연결할 라이브러리 목록입니다. 다음에서 deps에 대한 일반적인 댓글을 확인하세요. 일반적인 속성 대부분의 빌드 규칙에 대해 자세히 알아보세요.

deps에 나열된 java_library 규칙으로 빌드된 jar이 사용 설정됩니다. 이 규칙의 컴파일 시간 클래스 경로입니다. 또한 고객의 임시 폐쇄는 deps, runtime_deps, exports이(가) 예정되어 있습니다. 런타임 클래스 경로에 있습니다.

반대로 data 속성의 대상은 실행 파일에 포함되지만 컴파일 시간 또는 런타임 클래스 경로에서 호출되지 않습니다.

srcs

라벨 목록 기본값은 []입니다.

대상을 만들기 위해 처리된 소스 파일의 목록입니다. 이 속성은 거의 항상 필수입니다. 아래 예외를 참고하세요.

.java 유형의 소스 파일이 컴파일됩니다. 생성된 .java 파일에는 일반적으로 생성 규칙의 이름을 포함하는 것이 좋습니다. 를 입력합니다. 이렇게 하면 가독성이 향상될 뿐만 아니라 향후 변경에 대한 규칙을 더 탄력적으로 만듭니다. 생성 규칙이 생성되는 경우 다른 파일이 있을 경우 한 위치만 수정하면 됩니다. outs 확인할 수 있습니다. 생성 규칙을 deps에 나열해서는 안 됩니다. 이는 노옵스(no-ops)이기 때문입니다.

.srcjar 유형의 소스 파일은 압축이 해제되고 컴파일됩니다. (이는 genrule을 사용하여 .java 파일 세트를 생성해야 합니다.)

규칙: 규칙 (일반적으로 genrule 또는 filegroup)이 생성하는 경우 위에 나열된 파일 중 일부라도 할 수 있습니다.

.properties 유형의 소스 파일은 리소스로 취급됩니다.

다른 모든 파일은 파일 형식을 선택합니다. 그렇지 않으면 오류가 발생합니다.

이 인수는 runtime_deps 인수를 지정하는 경우를 제외하고 거의 항상 필요합니다.

data

라벨 목록 기본값은 []입니다.

런타임 시 이 라이브러리에서 필요로 하는 파일 목록입니다. 다음에서 data에 대한 일반적인 댓글을 확인하세요. 일반적인 속성 대부분의 빌드 규칙에 대해 자세히 알아보세요.

java_library를 빌드할 때 Bazel은 이러한 파일을 어디에도 배치하지 않습니다. 만약 data 파일이 생성되면 Bazel에서 파일을 생성합니다. GCP 콘솔에서 이 java_library Bazel 사본에 종속되거나 data 파일을 실행 파일 영역으로 푸시합니다.

resources

라벨 목록 기본값은 []입니다.

Java jar에 포함할 데이터 파일의 목록입니다.

리소스는 소스 파일 또는 생성된 파일일 수 있습니다.

리소스가 지정되면 일반적인 컴파일을 통해 생성된 .class 파일 내부 리소스 위치 프로젝트 구조에 따라 결정됩니다 Bazel은 먼저 Maven의 표준 디렉터리 레이아웃 ('src' 디렉터리 뒤에 나오는 'resources' 디렉터리 하위 요소) 그렇지 않은 경우 Bazel이 'java'라는 최상위 디렉터리를 또는 'javatests' (따라서 예를 들어 리소스가 <workspace root>/x/java/y/java/z에 있으면 리소스의 경로는 y/java/z입니다. 이 휴리스틱은 재정의할 수 없습니다. 하지만 resource_strip_prefix 속성을 사용하여 리소스 파일의 특정 대체 디렉터리를 확인할 수 있습니다

add_exports

문자열 목록 기본값은 []입니다.

이 라이브러리가 지정된 module 또는 package에 액세스하도록 허용합니다.

이는 javac 및 JVM --add-exports= 플래그에 해당합니다.

add_opens

문자열 목록 기본값은 []입니다.

이 라이브러리가 지정된 module에 반사적으로 액세스하도록 허용합니다. 또는 package입니다.

이는 javac 및 JVM --add-opens= 플래그에 해당합니다.

bootclasspath

라벨 기본값은 None입니다.

제한된 API입니다. 사용하지 마세요.
exported_plugins

라벨 목록 기본값은 []입니다.

java_plugin 목록 (예: 주석) 프로세서)가 포함되어 있습니다.

지정된 java_plugin 목록이 마치 라이브러리가 명시적으로 이 라이브러리를 선언한 것처럼 이 라이브러리에 직접 종속됩니다. plugins의 라벨

exports

라벨 목록 기본값은 []입니다.

내보낸 라이브러리

여기에 규칙을 나열하면 상위 규칙에서 이를 명시적으로 사용할 수 있게 됩니다. 이 규칙에 따라 처리했습니다. 하지만 내보내지 않은 일반 deps의 경우는 예외입니다.

요약: 종속 항목이 있는 경우 규칙 XY의 코드에 액세스할 수 있습니다. deps 가장자리로 시작하고 그 뒤에 0 이상이 되는 둘 사이의 경로 exports 가장자리 이해를 돕기 위해 몇 가지 예를 살펴보겠습니다.

AB에 종속되고 BC에 종속된다고 가정합니다. 이 경우에는 C는 A의 전이적 종속 항목이므로 C의 소스를 변경하고 A를 다시 빌드하면 모든 것을 올바르게 다시 빌드합니다. 그러나 A는 C의 클래스를 사용할 수 없습니다. 허용 즉, A가 deps에서 C를 선언해야 하며, 그렇지 않으면 B가 A가 좀 더 쉽게 (B의 exports에서 C를 선언하여) (및 A에 종속될 수 있는 모든 것) 속성의 값을 제공합니다.

내보낸 라이브러리의 클로저는 모든 직접 상위 규칙에서 사용할 수 있습니다. 천천히 다른 예: A는 B에 종속되고 B는 C와 D에 종속되며 C도 내보내지만 D는 내보내지 않습니다. 이제 A는 C에는 액세스할 수 있지만 D에는 액세스할 수 없습니다. 이제 C와 D가 일부 라이브러리를 내보내면 C'는 및 D' 각각 A는 C'에만 액세스할 수 있고 D'는 제외하세요.

중요: 내보낸 규칙은 일반적인 종속 항목이 아닙니다. 이전 예를 계속 살펴보면, B가 C를 내보내고 C도 사용하려는 경우 자체 deps

javabuilder_jvm_flags

문자열 목록 기본값은 []입니다.

제한된 API입니다. 사용하지 마세요.
javacopts

문자열 목록 기본값은 []입니다.

이 라이브러리의 추가 컴파일러 옵션입니다. 'Make 변수' 대체 적용 Bourne 셸 토큰화.

이러한 컴파일러 옵션은 전역 컴파일러 옵션 다음에 javac로 전달됩니다.

부울; 기본값은 False입니다.

이 라이브러리를 런타임이 아닌 컴파일에만 사용해야 하는지를 나타냅니다. 실행 중에 런타임 환경에서 라이브러리가 제공되는 경우에 유용합니다. 예 IDE 플러그인용 IDE API 또는 무엇이든 사용할 수 있는 tools.jar를 예로 들 수 있습니다. 표준 JDK에서 실행됩니다.

neverlink = 1는 컴파일러가 머티리얼을 인라인 처리하는 것을 방지하지 않습니다. 이 라이브러리에 종속된 컴파일 타겟으로 전달할 수 있습니다. 이는 Java 언어 사양 (예: String의 상수 static final개 또는 기본 유형)를 포함할 수 없습니다. 따라서 선호되는 사용 사례는 런타임 라이브러리가 컴파일 라이브러리와 동일합니다.

런타임 라이브러리가 컴파일 라이브러리와 다른 경우 런타임 라이브러리가 컴파일되도록 해야 합니다. JLS가 컴파일러를 인라인으로 금지하는 위치에서만 다르고 JLS의 모든 향후 버전)에 적용됩니다.

plugins

라벨 목록 기본값은 []입니다.

컴파일 시간에 실행할 Java 컴파일러 플러그인입니다. 이 규칙이 적용될 때마다 이 속성에 지정된 모든 java_plugin이(가) 실행됩니다. 빌드됩니다 라이브러리는 또한 종속 항목으로부터 플러그인을 상속할 수 있습니다. exported_plugins 리소스 이 규칙의 결과 jar에 포함됩니다.
proguard_specs

라벨 목록 기본값은 []입니다.

Proguard 사양으로 사용할 파일입니다. 이는 Proguard에서 사용할 사양 집합을 설명합니다. 지정된 경우 이 라이브러리에 따라 모든 android_binary 타겟에 추가됩니다. 여기에 포함된 파일에는 멱등적 규칙, 즉 -dontnote, -dontwarn, -keep으로 시작하는 규칙을 가정합니다. 다른 옵션은 android_binary의 proguard_specs를 사용하여 자동 논리가 아닌 병합을 보장해야 합니다.
resource_strip_prefix

String; 기본값은 ""입니다.

Java 리소스에서 삭제할 경로 프리픽스입니다.

지정된 경우 이 경로 접두어는 resources의 모든 파일에서 제거됩니다. 속성의 값을 제공합니다. 리소스 파일이 이 디렉터리에 없으면 오류입니다. 그렇지 않은 경우 기본값인 경우 리소스 파일의 경로는 소스 파일의 Java 패키지로 로직을 사용합니다. 예를 들어 stuff/java/foo/bar/a.txt 위치는 foo/bar/a.txt입니다.

runtime_deps

라벨 목록 기본값은 []입니다.

런타임 시에만 최종 바이너리 또는 테스트에 사용할 수 있는 라이브러리입니다. 일반 deps와 마찬가지로 런타임 클래스 경로에 표시되지만 컴파일 시간 클래스 경로가 아닌 이들을 사용합니다. 런타임에만 필요한 종속 항목은 확인하시기 바랍니다. 종속 항목 분석 툴은 runtime_depsdeps

java_lite_proto_library

<ph type="x-smartling-placeholder"></ph> 규칙 소스 보기
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.proto 파일에서 Java 코드를 생성합니다.

deps은(는) proto_library 규칙을 가리켜야 합니다.

예:


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

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

proto_library(
    name = "bar",
)

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

deps

라벨 목록 기본값은 []입니다.

proto_library 목록 코드를 생성할 수 있습니다.

java_proto_library

<ph type="x-smartling-placeholder"></ph> 규칙 소스 보기
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.proto 파일에서 Java 코드를 생성합니다.

deps은(는) proto_library 규칙을 가리켜야 합니다.

예:


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

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

proto_library(
    name = "foo_proto",
)

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

deps

라벨 목록 기본값은 []입니다.

proto_library 목록 코드를 생성할 수 있습니다.

java_test

<ph type="x-smartling-placeholder"></ph> 규칙 소스 보기
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)

java_test() 규칙은 자바 테스트를 컴파일합니다. 테스트는 애플리케이션의 테스트할 수 있습니다 컴파일되는 메인 클래스 대신 테스트 실행기의 기본 메서드가 호출됩니다.

암시적 출력 타겟

  • name.jar: Java 보관 파일입니다.
  • name_deploy.jar: 적합한 Java 보관 파일 kube-APIserver입니다 (명시적으로 요청된 경우에만 빌드됩니다.) 자세한 내용은 다음의 name_deploy.jar 출력 java_binary를 참조하세요.

java_binary() 인수에 관한 섹션을 참고하세요. 이 규칙 또한 공통적인 속성을 모두 지원합니다. 모든 테스트 규칙 (*_test)에 적용됩니다.



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

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

deps

라벨 목록 기본값은 []입니다.

타겟에 연결할 다른 라이브러리의 목록입니다. 다음에서 deps에 대한 일반적인 댓글을 확인하세요. 일반적인 속성 대부분의 빌드 규칙에 대해 자세히 알아보세요.
srcs

라벨 목록 기본값은 []입니다.

대상을 만들기 위해 처리된 소스 파일의 목록입니다. 이 속성은 거의 항상 필수입니다. 아래 예외를 참고하세요.

.java 유형의 소스 파일이 컴파일됩니다. 생성된 .java 파일에는 일반적으로 생성 규칙의 이름을 포함하는 것이 좋습니다. 를 입력합니다. 이렇게 하면 가독성이 향상될 뿐만 아니라 향후 변경에 대한 규칙을 더 탄력적으로 만듭니다. 생성 규칙이 생성되는 경우 다른 파일이 있을 경우 한 위치만 수정하면 됩니다. outs 확인할 수 있습니다. 생성 규칙을 deps에 나열해서는 안 됩니다. 이는 노옵스(no-ops)이기 때문입니다.

.srcjar 유형의 소스 파일은 압축이 해제되고 컴파일됩니다. (이는 genrule을 사용하여 .java 파일 세트를 생성해야 합니다.)

규칙: 규칙 (일반적으로 genrule 또는 filegroup)이 생성하는 경우 위에 나열된 파일 중 일부라도 할 수 있습니다.

이 인수는 main_class 속성은 클래스를 호출하거나 runtime_deps 인수를 지정할 수 있습니다.

data

라벨 목록 기본값은 []입니다.

런타임 시 이 라이브러리에서 필요로 하는 파일 목록입니다. data에 대한 일반적인 댓글 보기 at 대부분의 빌드 규칙에 대해 자세히 알아보세요.
resources

라벨 목록 기본값은 []입니다.

Java jar에 포함할 데이터 파일의 목록입니다.

리소스는 소스 파일 또는 생성된 파일일 수 있습니다.

리소스가 지정되면 일반적인 컴파일을 통해 생성된 .class 파일 내부 리소스 위치 프로젝트 구조에 따라 결정됩니다 Bazel은 먼저 Maven의 표준 디렉터리 레이아웃 ('src' 디렉터리 뒤에 나오는 'resources' 디렉터리 하위 요소) 그렇지 않은 경우 Bazel이 'java'라는 최상위 디렉터리를 또는 'javatests' (따라서 예를 들어 리소스가 <workspace root>/x/java/y/java/z에 있으면 리소스의 경로는 y/java/z입니다. 이 휴리스틱은 재정의할 수 없습니다. 하지만 resource_strip_prefix 속성을 사용하여 리소스 파일의 특정 대체 디렉터리를 확인할 수 있습니다

add_exports

문자열 목록 기본값은 []입니다.

이 라이브러리가 지정된 module 또는 package에 액세스하도록 허용합니다.

이는 javac 및 JVM --add-exports= 플래그에 해당합니다.

add_opens

문자열 목록 기본값은 []입니다.

이 라이브러리가 지정된 module에 반사적으로 액세스하도록 허용합니다. 또는 package입니다.

이는 javac 및 JVM --add-opens= 플래그에 해당합니다.

bootclasspath

라벨 기본값은 None입니다.

제한된 API입니다. 사용하지 마세요.
classpath_resources

라벨 목록 기본값은 []입니다.

다른 방법이 없다면 이 옵션을 사용하지 마세요.)

자바 트리의 루트에 있어야 하는 리소스 목록입니다. 이 속성의 유일한 목적은 리소스가 필요한 서드 파티 라이브러리를 지원하는 것입니다. 클래스 경로에서 정확히 "myconfig.xml"로 발견되었습니다. 바이너리를 사용해야 합니다.

create_executable

부울; 기본값은 True입니다.

지원 중단되었으므로 대신 java_single_jar을 사용하세요.
deploy_manifest_lines

문자열 목록 기본값은 []입니다.

생성된 META-INF/manifest.mf 파일에 추가할 행 목록입니다. *_deploy.jar 타겟. 이 속성의 내용은 주제가 아닙니다. "Makevariable"로 대체되었습니다.
javacopts

문자열 목록 기본값은 []입니다.

이 바이너리의 추가 컴파일러 옵션입니다. 'Make 변수' 대체 적용 Bourne 셸 토큰화.

이러한 컴파일러 옵션은 전역 컴파일러 옵션 다음에 javac로 전달됩니다.

jvm_flags

문자열 목록 기본값은 []입니다.

이 바이너리를 실행하기 위해 생성된 래퍼 스크립트에 포함할 플래그 목록입니다. $(location) 적용 및 "Make 변수" 대체 Bourne 셸 토큰화.

Java 바이너리의 래퍼 스크립트에 CLASSPATH 정의가 포함됨 (종속된 모든 jar를 찾기 위해) 올바른 Java 인터프리터를 호출합니다. 래퍼 스크립트에 의해 생성된 명령줄에는 기본 클래스 다음에 "$@"가 와야 하므로 다른 클래스를 인수를 사용합니다. 그러나 명령어에서 클래스 이름 앞에 지정해야 합니다. 행입니다. jvm_flags의 콘텐츠가 래퍼에 추가됨 스크립트를 추가합니다.

이 속성은 *_deploy.jar영향을 미치지 않습니다. 출력됩니다.

launcher

라벨 기본값은 None입니다.

Java 프로그램을 실행하는 데 사용할 바이너리를 일반 bin/java 프로그램이 JDK에 포함되어 있습니다. 타겟은 cc_binary이어야 합니다. 다음과 같은 모든 cc_binary 는 <ph type="x-smartling-placeholder"></ph> Java Invocation API를 이 속성의 값으로 지정할 수 있습니다.

기본적으로 Bazel은 일반 JDK 런처 (bin/java 또는 java.exe)를 사용합니다.

관련 --java_launcher Bazel 플래그는 이러한 플래그에만 영향을 미칩니다. 다음과 같은 java_binaryjava_test 타겟 launcher 속성을 지정하지 않았습니다.

네이티브 (C++, SWIG, JNI) 종속 항목은 다르게 빌드됩니다. JDK 런처를 사용하는지 다른 런처를 사용하는지에 따라 다음 명령어를 실행합니다.

  • 일반 JDK 런처 (기본값)를 사용하는 경우 네이티브 종속 항목은 다음과 같습니다. {name}_nativedeps.so라는 공유 라이브러리로 빌드되었습니다. 여기서 {name}는 이 java_binary 규칙의 name 속성입니다. 사용하지 않는 코드는 이 구성의 링커에 의해 삭제되지 않습니다.
  • 다른 런처를 사용하는 경우 네이티브 (C++) 종속 항목이 정적으로 {name}_nativedeps라는 바이너리에 연결됩니다. 여기서 {name}는 는 이 java_binary 규칙의 name 속성입니다. 이 경우 링커는 결과 바이너리에서 사용되지 않는다고 생각되는 모든 코드를 삭제합니다. 즉, JNI를 통해서만 액세스되는 C++ 코드는 cc_library 타겟이 alwayslink = 1를 지정합니다.

기본 JDK 런처 이외의 런처를 사용하는 경우 *_deploy.jar 출력이 변경됩니다. 주요 java_binary 문서를 참조하세요.

main_class

String; 기본값은 ""입니다.

진입점으로 사용할 main() 메서드가 있는 클래스 이름입니다. 규칙에서 이 옵션을 사용하는 경우에는 srcs=[...] 목록이 필요하지 않습니다. 따라서 이 특성을 사용하면 이미 실행 중인 Java 라이브러리로부터 하나 이상의 main() 메서드를 포함합니다.

이 속성의 값은 소스 파일이 아니라 클래스 이름입니다. 클래스는 런타임 시 사용 가능: srcs에서 이 규칙으로 컴파일할 수 있습니다. 직접 또는 전이 종속 항목에서 제공 (runtime_deps 또는 deps)을 입력합니다. 클래스를 사용할 수 없는 경우 런타임에서 바이너리가 실패합니다. 거기 빌드 시간 검사가 아닙니다.

부울; 기본값은 False입니다.

plugins

라벨 목록 기본값은 []입니다.

컴파일 시간에 실행할 Java 컴파일러 플러그인입니다. 이 규칙이 적용될 때마다 이 속성에 지정된 모든 java_plugin이(가) 실행됩니다. 빌드됩니다 라이브러리는 또한 종속 항목으로부터 플러그인을 상속할 수 있습니다. exported_plugins 리소스 이 규칙의 결과 jar에 포함됩니다.
resource_strip_prefix

String; 기본값은 ""입니다.

Java 리소스에서 삭제할 경로 프리픽스입니다.

지정된 경우 이 경로 접두어는 resources의 모든 파일에서 제거됩니다. 속성의 값을 제공합니다. 리소스 파일이 이 디렉터리에 없으면 오류입니다. 그렇지 않은 경우 기본값인 경우 리소스 파일의 경로는 소스 파일의 Java 패키지로 로직을 사용합니다. 예를 들어 stuff/java/foo/bar/a.txt 위치는 foo/bar/a.txt입니다.

runtime_deps

라벨 목록 기본값은 []입니다.

런타임 시에만 최종 바이너리 또는 테스트에 사용할 수 있는 라이브러리입니다. 일반 deps와 마찬가지로 런타임 클래스 경로에 표시되지만 컴파일 시간 클래스 경로가 아닌 이들을 사용합니다. 런타임에만 필요한 종속 항목은 확인하시기 바랍니다. 종속 항목 분석 툴은 runtime_depsdeps
stamp

정수; 기본값은 0입니다.

빌드 정보를 바이너리로 인코딩할지 여부입니다. 가능한 값은 다음과 같습니다. <ph type="x-smartling-placeholder">
    </ph>
  • stamp = 1: --nostamp 빌드 이 사용하지 않는 것이 좋습니다. 그러면 원격 캐싱이 중단될 가능성이 있기 때문입니다. 바이너리 및 여기에 종속된 모든 다운스트림 작업을 처리합니다.
  • stamp = 0: 빌드 정보를 항상 상수 값으로 바꿉니다. 이 빌드 결과 캐싱이 잘 되고
  • stamp = -1: 빌드 정보의 삽입은 --[no]stamp 플래그

스탬프 처리된 바이너리는 종속 항목이 변경되지 않는 한 다시 빌드되지 않습니다.

test_class

String; 기본값은 ""입니다.

테스트 실행기가 로드할 Java 클래스입니다.

기본적으로 이 인수가 정의되지 않으면 레거시 모드가 사용되고 테스트 인수가 대신 사용됩니다. --nolegacy_bazel_java_test 플래그 설정 첫 번째 인수에서 대체하지 않습니다.

이 속성은 실행할 Java 클래스의 이름을 지정합니다. 확인할 수 있습니다 이 설정은 매우 드뭅니다. 이 인수를 생략하면 대상의 name 및 대상의 소스-루트 상대 경로입니다. 테스트가 알려진 소스 루트를 사용하고 있다면 test_class이면 Bazel이 오류를 보고합니다. 이 설정되지 않았습니다.

JUnit3의 경우 테스트 클래스는 다음 서브클래스 중 하나여야 합니다. junit.framework.TestCase 또는 공개 다음을 반환하는 정적 suite() 메서드 junit.framework.Test (또는 Test의 서브클래스). JUnit4의 경우 클래스에 다음과 같은 주석을 달아야 합니다. org.junit.runner.RunWith입니다.

이 속성을 사용하면 여러 java_test 규칙을 통해 동일한 Test 공유 (TestCase, TestSuite, ...) 보통 추가 정보가 전달되면 (예: jvm_flags=['-Dkey=value']를 통해) 각각에 따라 다르게 작동해야 하는 테스트 하위 집합으로 구성되어 있습니다 또한 이 속성을 사용하면 javatests 트리 외부의 Java 테스트

use_launcher

부울; 기본값은 True입니다.

바이너리가 맞춤 런처를 사용해야 하는지 여부입니다.

이 속성을 false로 설정하면 launcher 속성 및 관련 --java_launcher 플래그 이 타겟에서 무시됩니다.

use_testrunner

부울; 기본값은 True입니다.

테스트 실행기 사용 (기본적으로 com.google.testing.junit.runner.BazelTestRunner) 클래스를 기본 진입점을 만들고 테스트 클래스를 제공합니다. bazel.test_suite 값으로 테스트 실행기에 추가 system 속성입니다.
이를 사용하여 기본 테스트 실행기를 사용하여 규칙 java_test개, java_binary 규칙에는 사용하지 않습니다. 가능성 낮음 이렇게 하는 것이 좋습니다 1회용: AllTest 다른 규칙에서 호출하는 규칙 (데이터베이스를 설정하기 위해) 테스트 실행 전)가 있는지 확인합니다. AllTest 규칙을 java_binary로 선언해야 하지만 여전히 테스트 실행기를 주 진입점으로 사용합니다. 테스트 실행기 클래스의 이름은 main_class 속성으로 재정의할 수 있습니다.

java_package_configuration

<ph type="x-smartling-placeholder"></ph> 규칙 소스 보기
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)

패키지 집합에 적용할 구성입니다. 구성을 추가할 수 있는 java_toolchain.javacopts

예:



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


인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

data

라벨 목록 기본값은 []입니다.

런타임 시 이 구성에 필요한 파일 목록입니다.
javacopts

문자열 목록 기본값은 []입니다.

Java 컴파일러 플래그입니다.
output_licenses

문자열 목록 기본값은 []입니다.

packages

라벨 목록 기본값은 []입니다.

package_group 집합 구성을 적용해야 합니다

java_plugin

<ph type="x-smartling-placeholder"></ph> 규칙 소스 보기
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은 Bazel에서 실행하는 Java 컴파일러용 플러그인을 정의합니다. 이 지원되는 종류의 플러그인만 주석 프로세서입니다. java_library 또는 java_binary 규칙은 plugins를 통해 플러그인을 실행하여 플러그인을 실행할 수 있습니다. 속성의 값을 제공합니다. java_library는 또한 다음과 같은 라이브러리로 플러그인을 자동으로 내보낼 수 있습니다. 이를 사용하여 exported_plugins입니다.

암시적 출력 타겟

  • libname.jar: Java 보관 파일입니다.

인수는 다음을 제외하면 java_library와 동일합니다. (processor_class 인수의 추가를 위해)

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

deps

라벨 목록 기본값은 []입니다.

이 라이브러리에 연결할 라이브러리 목록입니다. 다음에서 deps에 대한 일반적인 댓글을 확인하세요. 일반적인 속성 대부분의 빌드 규칙에 대해 자세히 알아보세요.

deps에 나열된 java_library 규칙으로 빌드된 jar이 사용 설정됩니다. 이 규칙의 컴파일 시간 클래스 경로입니다. 또한 고객의 임시 폐쇄는 deps, runtime_deps, exports이(가) 예정되어 있습니다. 런타임 클래스 경로에 있습니다.

반대로 data 속성의 대상은 실행 파일에 포함되지만 컴파일 시간 또는 런타임 클래스 경로에서 호출되지 않습니다.

srcs

라벨 목록 기본값은 []입니다.

대상을 만들기 위해 처리된 소스 파일의 목록입니다. 이 속성은 거의 항상 필수입니다. 아래 예외를 참고하세요.

.java 유형의 소스 파일이 컴파일됩니다. 생성된 .java 파일에는 일반적으로 생성 규칙의 이름을 포함하는 것이 좋습니다. 를 입력합니다. 이렇게 하면 가독성이 향상될 뿐만 아니라 향후 변경에 대한 규칙을 더 탄력적으로 만듭니다. 생성 규칙이 생성되는 경우 다른 파일이 있을 경우 한 위치만 수정하면 됩니다. outs 확인할 수 있습니다. 생성 규칙을 deps에 나열해서는 안 됩니다. 이는 노옵스(no-ops)이기 때문입니다.

.srcjar 유형의 소스 파일은 압축이 해제되고 컴파일됩니다. (이는 genrule을 사용하여 .java 파일 세트를 생성해야 합니다.)

규칙: 규칙 (일반적으로 genrule 또는 filegroup)이 생성하는 경우 위에 나열된 파일 중 일부라도 할 수 있습니다.

.properties 유형의 소스 파일은 리소스로 취급됩니다.

다른 모든 파일은 파일 형식을 선택합니다. 그렇지 않으면 오류가 발생합니다.

이 인수는 runtime_deps 인수를 지정하는 경우를 제외하고 거의 항상 필요합니다.

data

라벨 목록 기본값은 []입니다.

런타임 시 이 라이브러리에서 필요로 하는 파일 목록입니다. 다음에서 data에 대한 일반적인 댓글을 확인하세요. 일반적인 속성 대부분의 빌드 규칙에 대해 자세히 알아보세요.

java_library를 빌드할 때 Bazel은 이러한 파일을 어디에도 배치하지 않습니다. 만약 data 파일이 생성되면 Bazel에서 파일을 생성합니다. GCP 콘솔에서 이 java_library Bazel 사본에 종속되거나 data 파일을 실행 파일 영역으로 푸시합니다.

resources

라벨 목록 기본값은 []입니다.

Java jar에 포함할 데이터 파일의 목록입니다.

리소스는 소스 파일 또는 생성된 파일일 수 있습니다.

리소스가 지정되면 일반적인 컴파일을 통해 생성된 .class 파일 내부 리소스 위치 프로젝트 구조에 따라 결정됩니다 Bazel은 먼저 Maven의 표준 디렉터리 레이아웃 ('src' 디렉터리 뒤에 나오는 'resources' 디렉터리 하위 요소) 그렇지 않은 경우 Bazel이 'java'라는 최상위 디렉터리를 또는 'javatests' (따라서 예를 들어 리소스가 <workspace root>/x/java/y/java/z에 있으면 리소스의 경로는 y/java/z입니다. 이 휴리스틱은 재정의할 수 없습니다. 하지만 resource_strip_prefix 속성을 사용하여 리소스 파일의 특정 대체 디렉터리를 확인할 수 있습니다

add_exports

문자열 목록 기본값은 []입니다.

이 라이브러리가 지정된 module 또는 package에 액세스하도록 허용합니다.

이는 javac 및 JVM --add-exports= 플래그에 해당합니다.

add_opens

문자열 목록 기본값은 []입니다.

이 라이브러리가 지정된 module에 반사적으로 액세스하도록 허용합니다. 또는 package입니다.

이는 javac 및 JVM --add-opens= 플래그에 해당합니다.

bootclasspath

라벨 기본값은 None입니다.

제한된 API입니다. 사용하지 마세요.
generates_api

부울; 기본값은 False입니다.

이 속성은 API 코드를 생성하는 주석 프로세서를 표시합니다.

규칙이 API 생성 주석 프로세서를 사용하는 경우 다른 규칙은 생성된 코드를 참조하기 위해서는 컴파일 작업은 규칙을 생성한 후에 예약됩니다. 이 속성은 Bazel이 스케줄링 제약 조건을 적용할 때 --java_header_compile이 사용 설정됩니다.

경고: 이 속성은 빌드에 영향을 미칩니다. 필요한 경우에만 사용하세요

javabuilder_jvm_flags

문자열 목록 기본값은 []입니다.

제한된 API입니다. 사용하지 마세요.
javacopts

문자열 목록 기본값은 []입니다.

이 라이브러리의 추가 컴파일러 옵션입니다. 'Make 변수' 대체 적용 Bourne 셸 토큰화.

이러한 컴파일러 옵션은 전역 컴파일러 옵션 다음에 javac로 전달됩니다.

부울; 기본값은 False입니다.

이 라이브러리를 런타임이 아닌 컴파일에만 사용해야 하는지를 나타냅니다. 실행 중에 런타임 환경에서 라이브러리가 제공되는 경우에 유용합니다. 예 IDE 플러그인용 IDE API 또는 무엇이든 사용할 수 있는 tools.jar를 예로 들 수 있습니다. 표준 JDK에서 실행됩니다.

neverlink = 1는 컴파일러가 머티리얼을 인라인 처리하는 것을 방지하지 않습니다. 이 라이브러리에 종속된 컴파일 타겟으로 전달할 수 있습니다. 이는 Java 언어 사양 (예: String의 상수 static final개 또는 기본 유형)를 포함할 수 없습니다. 따라서 선호되는 사용 사례는 런타임 라이브러리가 컴파일 라이브러리와 동일합니다.

런타임 라이브러리가 컴파일 라이브러리와 다른 경우 런타임 라이브러리가 컴파일되도록 해야 합니다. JLS가 컴파일러를 인라인으로 금지하는 위치에서만 다르고 JLS의 모든 향후 버전)에 적용됩니다.

output_licenses

문자열 목록 기본값은 []입니다.

plugins

라벨 목록 기본값은 []입니다.

컴파일 시간에 실행할 Java 컴파일러 플러그인입니다. 이 규칙이 적용될 때마다 이 속성에 지정된 모든 java_plugin이(가) 실행됩니다. 빌드됩니다 라이브러리는 또한 종속 항목으로부터 플러그인을 상속할 수 있습니다. exported_plugins 리소스 이 규칙의 결과 jar에 포함됩니다.
processor_class

String; 기본값은 ""입니다.

프로세서 클래스는 자바 컴파일러가 제공해야 하는 클래스의 정규화된 유형입니다. 주석 프로세서의 진입점으로 사용됩니다. 지정하지 않으면 이 규칙이 적용되지 않습니다. 주석 프로세서를 Java 컴파일러의 주석 처리에 기여하지만 런타임 클래스 경로는 컴파일러의 주석 프로세서 경로에 계속 포함됩니다. 이 주로 다음에 사용하기 위한 용도: Error Prone 플러그인(로드됨) 주석 프로세서 경로에서 <ph type="x-smartling-placeholder"></ph> java.util.ServiceLoader.)
proguard_specs

라벨 목록 기본값은 []입니다.

Proguard 사양으로 사용할 파일입니다. 이는 Proguard에서 사용할 사양 집합을 설명합니다. 지정된 경우 이 라이브러리에 따라 모든 android_binary 타겟에 추가됩니다. 여기에 포함된 파일에는 멱등적 규칙, 즉 -dontnote, -dontwarn, -keep으로 시작하는 규칙을 가정합니다. 다른 옵션은 android_binary의 proguard_specs를 사용하여 자동 논리가 아닌 병합을 보장해야 합니다.
resource_strip_prefix

String; 기본값은 ""입니다.

Java 리소스에서 삭제할 경로 프리픽스입니다.

지정된 경우 이 경로 접두어는 resources의 모든 파일에서 제거됩니다. 속성의 값을 제공합니다. 리소스 파일이 이 디렉터리에 없으면 오류입니다. 그렇지 않은 경우 기본값인 경우 리소스 파일의 경로는 소스 파일의 Java 패키지로 로직을 사용합니다. 예를 들어 stuff/java/foo/bar/a.txt 위치는 foo/bar/a.txt입니다.

java_runtime

<ph type="x-smartling-placeholder"></ph> 규칙 소스 보기
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)

Java 런타임의 구성을 지정합니다.

예:



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


인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

srcs

라벨 목록 기본값은 []입니다.

런타임의 모든 파일입니다.
default_cds

라벨 기본값은 None입니다.

밀폐 java_runtime의 기본 CDS 보관 파일입니다. 밀폐 시 타겟이 java_binary 타겟에 사용 설정되어 있고 타겟이 자체 CDS 보관 파일을 제공하도록 classlist 속성 java_runtime 기본 CDS는 밀폐 배포 JAR에 패키징됩니다.
hermetic_srcs

라벨 목록 기본값은 []입니다.

밀폐 배포에 필요한 런타임 파일
hermetic_static_libs

라벨 목록 기본값은 []입니다.

밀폐식 배포를 위해 런처와 정적으로 연결되는 라이브러리
java

라벨 기본값은 None입니다.

자바 실행 파일의 경로입니다.
java_home

String; 기본값은 ""입니다.

런타임 루트의 경로입니다. 'Make' 적용 변수 대체를 지원합니다. 이 경로가 절대 경로라면 규칙은 잘 알려진 있습니다. 이 경우 srcs 속성과 java 속성이 비어 있어야 합니다.
lib_ct_sym

라벨 기본값은 None입니다.

--release로 컴파일하는 데 필요한 lib/ct.sym 파일 지정하지 않고 srcs에 경로가 /lib/ct.sym 파일을 사용하면 해당 파일이 사용됩니다.
lib_modules

라벨 기본값은 None입니다.

밀폐 배포에 필요한 lib/modules 파일
output_licenses

문자열 목록 기본값은 []입니다.

version

정수; 기본값은 0입니다.

Java 런타임의 기능 버전입니다. 즉, Runtime.version().feature()

java_toolchain

<ph type="x-smartling-placeholder"></ph> 규칙 소스 보기
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)

Java 컴파일러의 구성을 지정합니다. 사용할 도구 모음은 --java_툴체인 인수 일반적으로 이러한 종류의 규칙은 Java 컴파일러를 조정해야 합니다

간단한 예는 다음과 같습니다.



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

인수

속성
name

이름 필수

이 대상의 고유한 이름입니다.

android_lint_data

라벨 목록 기본값은 []입니다.

android_lint_jvm_opts에서 label-expansion에 사용할 수 있는 도구의 라벨입니다.
android_lint_jvm_opts

문자열 목록 기본값은 []입니다.

Android 린트를 호출할 때 JVM의 인수 목록입니다.
android_lint_opts

문자열 목록 기본값은 []입니다.

Android 린트 인수의 목록입니다.
android_lint_package_configuration

라벨 목록 기본값은 []입니다.

지정된 패키지 그룹에 적용해야 하는 Android 린트 구성입니다.
android_lint_runner

라벨 기본값은 None입니다.

Android 린트 실행기의 라벨(있는 경우)
bootclasspath

라벨 목록 기본값은 []입니다.

Java 타겟 bootclasspath 항목입니다. javac의 -bootclasspath 플래그에 해당합니다.
compatible_javacopts

null; 기본값은 {}입니다.

내부 API, 사용 금지
deps_checker

라벨 기본값은 None입니다.

ImportDepsChecker 배포 jar의 라벨입니다.
forcibly_disable_header_compilation

부울; 기본값은 False입니다.

그렇지 않은 플랫폼에서 헤더 컴파일을 사용 중지하도록 --java_header_compile을 재정의합니다. 지원합니다(예: JDK 7 Bazel
genclass

라벨 기본값은 None입니다.

GenClass 배포 jar의 라벨입니다.
header_compiler

라벨 기본값은 None입니다.

헤더 컴파일러의 라벨입니다. --java_header_compile이 사용 설정된 경우 필요합니다.
header_compiler_builtin_processors

문자열 목록 기본값은 []입니다.

내부 API, 사용 금지
header_compiler_direct

라벨 기본값은 None입니다.

일치하지 않는 직접 클래스 경로 작업에 사용할 헤더 컴파일러의 라벨(선택사항) API를 생성하는 주석 프로세서를 포함할 수 없습니다.

이 도구는 주석 처리를 지원하지 않습니다.

ijar

라벨 기본값은 None입니다.

ijar 실행 파일의 라벨.
jacocorunner

라벨 기본값은 None입니다.

JacocoCoverageRunner 배포 jar의 라벨입니다.
java_runtime

라벨 기본값은 None입니다.

이 도구 모음과 함께 사용할 java_runtime입니다. 기본값은 java_runtime입니다. 실행할 수도 있습니다
javabuilder

라벨 기본값은 None입니다.

JavaBuilder 배포 jar의 라벨입니다.
javabuilder_data

라벨 목록 기본값은 []입니다.

javabuilder_jvm_opts에서 label-expansion에 사용할 수 있는 데이터의 라벨입니다.
javabuilder_jvm_opts

문자열 목록 기본값은 []입니다.

JavaBuilder를 호출할 때 JVM의 인수 목록입니다.
javac_supports_multiplex_workers

부울; 기본값은 True입니다.

JavaBuilder가 멀티플렉스 영구 작업자로 실행을 지원하면 true이고, 지원하지 않는 경우 false입니다.
javac_supports_worker_cancellation

부울; 기본값은 True입니다.

JavaBuilder가 영구 작업자 취소를 지원하는 경우 true, 지원하지 않는 경우 false입니다.
javac_supports_worker_multiplex_sandboxing

부울; 기본값은 False입니다.

JavaBuilder가 샌드박스와 함께 멀티플렉스 영구 작업자로 실행을 지원하는 경우 true, 지원하지 않는 경우 false입니다.
javac_supports_workers

부울; 기본값은 True입니다.

JavaBuilder가 영구 작업자로 실행을 지원하는 경우 true, 지원하지 않는 경우 false입니다.
javacopts

문자열 목록 기본값은 []입니다.

Java 컴파일러의 추가 인수 목록입니다. 자세한 내용은 Java 컴파일러를 가능한 Java 컴파일러 플래그의 광범위한 목록에 대한 문서를 참조하세요.
jspecify_implicit_deps

라벨 기본값은 None입니다.

실험용이므로 사용하지 마세요.
jspecify_javacopts

문자열 목록 기본값은 []입니다.

실험용이므로 사용하지 마세요.
jspecify_packages

라벨 목록 기본값은 []입니다.

실험용이므로 사용하지 마세요.
jspecify_processor

라벨 기본값은 None입니다.

실험용이므로 사용하지 마세요.
jspecify_processor_class

String; 기본값은 ""입니다.

실험용이므로 사용하지 마세요.
jspecify_stubs

라벨 목록 기본값은 []입니다.

실험용이므로 사용하지 마세요.
jvm_opts

문자열 목록 기본값은 []입니다.

Java 컴파일러를 호출할 때 JVM의 인수 목록입니다. 자세한 내용은 Java 가상 머신 문서를 참조하세요.
misc

문자열 목록 기본값은 []입니다.

지원 중단됨: 대신 javacopts 사용
oneversion

라벨 기본값은 None입니다.

단일 버전 적용 바이너리의 라벨입니다.
oneversion_allowlist_for_tests

라벨 기본값은 None입니다.

테스트용 단일 버전 허용 목록 라벨입니다.
oneversion_whitelist

라벨 기본값은 None입니다.

단일 버전 허용 목록 라벨입니다.
package_configuration

라벨 목록 기본값은 []입니다.

지정된 패키지 그룹에 적용해야 하는 구성입니다.
proguard_allowlister

라벨 기본값은 "@bazel_tools//tools/jdk:proguard_whitelister"입니다.

Proguard 허용 목록 라벨입니다.
reduced_classpath_incompatible_processors

문자열 목록 기본값은 []입니다.

내부 API, 사용 금지
singlejar

라벨 기본값은 None입니다.

SingleJar 배포 jar의 라벨입니다.
source_version

String; 기본값은 ""입니다.

Java 소스 버전 (예: '6' 또는 '7'). 이는 어떤 코드 구조 집합을 자바 소스 코드에서 허용됩니다.
target_version

String; 기본값은 ""입니다.

Java 타겟 버전 (예: '6' 또는 '7'). 클래스가 어떤 Java 런타임을 대상으로 하는지 지정합니다. 빌드되어야 합니다
timezone_data

라벨 기본값은 None입니다.

시간대 데이터가 포함된 리소스 jar의 라벨입니다. 설정된 경우 시간대 데이터가 암시적으로 런타임 종속 항목을 만듭니다.
tools

라벨 목록 기본값은 []입니다.

jvm_opts에서 label-expansion에 사용할 수 있는 도구의 라벨입니다.
turbine_data

라벨 목록 기본값은 []입니다.

turbine_jvm_opts에서 라벨 확장에 사용할 수 있는 데이터 라벨입니다.
turbine_jvm_opts

문자열 목록 기본값은 []입니다.

터빈을 호출할 때 JVM의 인수 목록입니다.
xlint

문자열 목록 기본값은 []입니다.

기본 목록에 추가하거나 기본 목록에서 삭제할 경고 목록입니다. 앞에 대시가 붙습니다. 삭제합니다. 자세한 내용은 -Xlint 옵션에 대한 Javac 문서를 참조하세요.