이 페이지에서는 Maven에서 Bazel로 마이그레이션하는 방법을 설명합니다. 기본 요건 및 설치 단계를 완료합니다. Maven의 차이점을 설명합니다. 하고 Guava 프로젝트를 사용한 이전 예를 제공합니다.
빌드 도구에서 Bazel로 마이그레이션할 때는 두 빌드 도구를 모두 사용하는 것이 가장 좋습니다. 개발팀을 완전히 마이그레이션할 때까지 동시에 실행하여 기타 관련 시스템을 관리합니다 Maven 및 Bazel을 동일한 저장소
시작하기 전에
- 아직 설치되지 않은 경우 Bazel을 설치합니다.
- Bazel을 처음 사용하는 경우 Bazel 소개: 마이그레이션을 시작하기 전에 Java를 빌드하세요. 이 가이드에서는 Bazel의 개념, 구조, 라벨 문법
Maven과 Bazel의 차이점
- Maven에서는 최상위 수준의
pom.xml
파일을 사용합니다. Bazel에서 여러 빌드 파일 지원BUILD
파일당 여러 개의 타겟이 있어서 Maven보다 증분식일 수 있습니다 - Maven이 배포 프로세스의 단계를 담당합니다. Bazel은 배포를 자동화할 수 있습니다
- Bazel을 사용하면 언어 간 종속 항목을 표현할 수 있습니다.
- Bazel을 사용하면 프로젝트에 새 섹션을 추가할 때
BUILD
파일. 권장사항은 각각의 새로운 자바에BUILD
파일을 추가하는 것입니다. 패키지에서 찾을 수 있습니다.
Maven에서 Bazel로 마이그레이션
아래 단계에서는 프로젝트를 Bazel로 마이그레이션하는 방법을 설명합니다.
다음은 Guava 이전에서 가져온 예시입니다.
프로젝트를 Maven에서 Bazel로 변경할 수 있습니다. 이
사용된 Guava 프로젝트는 v31.1
릴리스입니다. Guava를 사용한 예시는
마이그레이션의 각 단계를 확인할 수 있지만, 마이그레이션에 필요한 파일과
수동으로 생성하거나 추가할 수 있습니다
$ git clone https://github.com/google/guava.git && cd guava
$ git checkout v31.1
1. MODULE.bazel 파일 만들기
프로젝트 루트에 MODULE.bazel
라는 파일을 만듭니다. 프로젝트가
에 외부 종속 항목이 없으면 이 파일은 비어 있어도 됩니다.
프로젝트가
MODULE.bazel에 외부 종속 항목을 지정합니다.
파일에서 참조됩니다. rules_jvm_external
을 사용하여 Maven의 종속 항목을 관리할 수 있습니다. 대상
자세한 내용은
README
에서 자세한 내용을 확인하실 수 있습니다.
Guava 프로젝트 예시: 외부 종속 항목
이 명령어를 사용해 Guava의 외부 종속 항목을
프로젝트를
rules_jvm_external
합니다.
MODULE.bazel
파일에 다음 스니펫을 추가합니다.
bazel_dep(name = "rules_jvm_external", version = "6.2")
maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
maven.install(
artifacts = [
"com.google.code.findbugs:jsr305:3.0.2",
"com.google.errorprone:error_prone_annotations:2.11.0",
"com.google.j2objc:j2objc-annotations:1.3",
"org.codehaus.mojo:animal-sniffer-annotations:1.20",
"org.checkerframework:checker-qual:3.12.0",
],
repositories = [
"https://repo1.maven.org/maven2",
],
)
use_repo(maven, "maven")
2. BUILD 파일 1개 만들기
이제 작업공간이 정의되었고 외부 종속 항목 (예:
BUILD
파일을 만들어
빌드해야 합니다 pom.xml
파일이 하나인 Maven과 달리 Bazel은
여러 BUILD
파일을 포함하여 프로젝트를 빌드합니다. 이 파일은 여러 빌드를 지정합니다.
대상을 지정하여 증분 빌드를 생성할 수 있습니다.
BUILD
파일을 단계별로 추가합니다. 먼저 다음 루트에 BUILD
파일을 하나 추가합니다.
Bazel을 사용하여 초기 빌드를 수행하는 데 사용할 수 있습니다. 그런 다음
더 세분화된 타겟이 있는 BUILD
파일을 더 추가하여 빌드를 빌드합니다.
MODULE.bazel
파일과 동일한 디렉터리에서 텍스트 파일을 만들고 이름을BUILD
로 지정합니다.이
BUILD
파일에서 적절한 규칙을 사용하여 빌드할 대상을 하나 만듭니다. 살펴보겠습니다 다음은 몇 가지 팁입니다.적절한 규칙을 사용합니다.
단일 Maven 모듈로 프로젝트를 빌드하려면
java_library
규칙은 다음과 같습니다.java_library( name = "everything", srcs = glob(["src/main/java/**/*.java"]), resources = glob(["src/main/resources/**"]), deps = ["//:all-external-targets"], )
여러 Maven 모듈로 프로젝트를 빌드하려면
java_library
규칙은 다음과 같습니다.java_library( name = "everything", srcs = glob([ "Module1/src/main/java/**/*.java", "Module2/src/main/java/**/*.java", ... ]), resources = glob([ "Module1/src/main/resources/**", "Module2/src/main/resources/**", ... ]), deps = ["//:all-external-targets"], )
바이너리를 빌드하려면
java_binary
규칙을 사용합니다.java_binary( name = "everything", srcs = glob(["src/main/java/**/*.java"]), resources = glob(["src/main/resources/**"]), deps = ["//:all-external-targets"], main_class = "com.example.Main" )
속성을 지정합니다.
name
: 대상에 의미 있는 이름을 지정합니다. 예시 위에서는 타겟을 '전체'라고 합니다.srcs
: globbing을 사용하여 프로젝트의 모든 .java 파일을 나열합니다.resources
: globbing을 사용하여 프로젝트의 모든 리소스를 나열합니다.deps
: 어떤 외부 종속 항목을 사용할지 결정해야 합니다. 프로젝트 요구사항을 나타냅니다
아래에서 최상위 BUILD의 예를 살펴보세요. 파일을 복사합니다.
이제 프로젝트의 루트에
BUILD
파일이 있으므로 확인할 수 있습니다 작업공간의 명령줄에서 디렉터리에서bazel build //:everything
를 사용하여 Bazel로 프로젝트를 빌드합니다.이제 Bazel을 사용하여 프로젝트가 성공적으로 빌드되었습니다. 먼저 프로젝트의 증분 빌드를 허용하기 위한 추가
BUILD
파일
Guava 프로젝트 예시: BUILD 파일 1개로 시작
Guava 프로젝트를 Bazel로 마이그레이션할 때는 처음에는 하나의 BUILD
파일이
전체 프로젝트를 빌드할 수 있습니다 이 초기 BUILD
파일의 콘텐츠는 다음과 같습니다.
새 작업공간 디렉터리:
java_library(
name = "everything",
srcs = glob([
"guava/src/**/*.java",
"futures/failureaccess/src/**/*.java",
]),
javacopts = ["-XepDisableAllChecks"],
deps = [
"@maven//:com_google_code_findbugs_jsr305",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_j2objc_j2objc_annotations",
"@maven//:org_checkerframework_checker_qual",
"@maven//:org_codehaus_mojo_animal_sniffer_annotations",
],
)
3. 추가 BUILD 파일 만들기 (선택사항)
Bazel은 BUILD file
를 하나만 사용하여 작업합니다.
첫 번째 빌드를 시작합니다. 여전히 빌드를 더 작은 청크로 분할하는 것이
세분화된 타겟으로 BUILD
파일을 더 추가합니다.
타겟이 여러 개인 BUILD
파일이 여러 개 있으면 빌드가 증가합니다.
다음과 같은 세부사항을 허용합니다.
- 프로젝트의 증분 빌드 증가
- 빌드의 병렬 실행이 늘어나고
- 향후 사용자를 위해 빌드의 유지 관리 용이성 개선
- 패키지 간 타겟의 공개 상태를 제어하여 구현 세부정보가 포함된 라이브러리와 같은 문제가 사용할 수 있습니다
BUILD
파일을 더 추가하기 위한 도움말:
- 각 자바 패키지에
BUILD
파일을 추가하여 시작할 수 있습니다. Java로 시작 종속 항목이 가장 적고 패키지까지만 작동하는 살펴보겠습니다 BUILD
파일을 추가하고 대상을 지정할 때 이러한 새 대상을 이를 사용하는 타겟의deps
섹션.glob()
는 함수는 패키지 경계를 넘지 않으므로glob()
와 일치하는 파일이 축소됩니다.BUILD
파일을main
디렉터리에 추가할 때마다BUILD
파일을 상응하는test
디렉터리에 복사합니다.- 패키지 간에 가시성을 적절하게 제한해야 합니다.
BUILD
파일 설정의 오류 문제를 간단하게 해결하려면 다음을 확인하세요. 각 빌드 파일을 추가할 때 프로젝트가 Bazel을 사용하여 계속 빌드됨을 의미합니다.bazel build //...
를 실행하여 모든 타겟이 계속 빌드되는지 확인합니다.
4. Bazel을 사용하여 빌드
설정 유효성을 검사하기 위해 BUILD
파일을 추가하면서 Bazel을 사용하여 빌드했습니다.
확인할 수 있습니다
원하는 세부사항으로 BUILD
파일이 있는 경우 Bazel을 사용하여 다음 작업을 할 수 있습니다.
모든 빌드를 생성합니다.