BazelCon 2022 מגיע בין 16 ל-17 בנובמבר לניו יורק באינטרנט.
הירשמו עוד היום!

כללי Java

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

כללים

Java_binary

java_binary(name, deps, srcs, data, resources, args, classpath_resources, compatible_with, create_executable, deploy_env, deploy_manifest_lines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, javacopts, jvm_flags, launcher, licenses, main_class, output_licenses, plugins, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, stamp, tags, target_compatible_with, testonly, toolchains, use_launcher, use_testrunner, visibility)

בונה ארכיון Java ("tar&") וסקריפט מעטפת של wrapper עם אותו שם כמו הכלל. הסקריפט של Wrapper משתמש בנתיב הכיתה שכולל, בין היתר, קובץ צנצנת לכל ספרייה שבה הקובץ הבינארי תלוי.

סקריפט wrapper מקבל מספר סימונים ייחודיים. יש לעיין ב-//src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt כדי לראות רשימה של התרעות שאפשר להגדיר על ידי wrapper.

יעדי פלט מרומזים

  • name.jar: ארכיון של Java, שמכיל את קובצי הכיתות ומשאבים אחרים שתואמים לתלויות הבינאריות הישירות של הקובץ.
  • name-src.jar: ארכיון שמכיל את המקורות ("source tar").
  • name_deploy.jar: ארכיון של Java שמתאים לפריסה (רק אם נשלחה בקשה מפורשת לכך).

    יצירת היעד <name>_deploy.jar לכלל שלך יוצרת קובץ כלי עצמאי שמכיל מניפסט שמאפשר לו לפעול עם הפקודה java -jar או עם האפשרות --singlejar wrapper של הסקריפט. השימוש בסקריפט wrapper מועדף על פני java -jar כי הוא גם מעביר את התרעות JVM ואת האפשרויות לטעינת ספריות מקוריות.

    צנצנת הפריסה מכילה את כל הכיתות שיופיעו על ידי מנהל מערכת של הכיתה שחיפשו את נתיב הכיתה מהסקריפט wrapper של הקובץ הבינארי מההתחלה ועד הסוף. היא גם מכילה את הספריות המותאמות הנדרשות לתלויות. הקבצים האלה נטענים אוטומטית אל ה-JVM בזמן הריצה.

    אם היעד שלך מציין מאפיין של מרכז האפליקציות, במקום שהקובץ יהיה קובץ JAR רגיל, הקובץ _deploy.tar יהיה בינארי. הפעולה הזו כוללת את מרכז האפליקציות ואת כל המשתנים המקומיים (++C) שמקושרים לקובץ בינארי סטטי. הבייטים של קובץ ה-cookie בפועל יתווספו לקובץ הבינארי המקורי הזה, ויוצרים blob בינארי אחד שמכיל גם את קובץ ההפעלה וגם את קוד Java. אפשר להפעיל את קובץ המאגר ישירות כמו כל קובץ בינארי מקורי.

  • name_deploy-src.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

Name; required

שם ייחודי ליעד הזה.


מומלץ להשתמש בשם קובץ המקור שהוא נקודת הכניסה הראשית של האפליקציה (פחות התוסף). לדוגמה, אם נקודת הכניסה היא Main.java, השם שלך יכול להיות Main.
deps

List of labels; optional

רשימת הספריות האחרות שיש לקשר ליעד. אפשר לעיין בתגובות כלליות על deps במאפיינים אופייניים שמוגדרים על ידי רוב כללי הבנייה.
srcs

List of labels; optional

רשימת קובצי המקור שמעובדים כדי ליצור את היעד. המאפיין הזה כמעט תמיד נחוץ. אתם יכולים לראות את רשימת החריגים בהמשך.

הידור של קובצי המקור מסוג .java. במקרה של קובצי .java שנוצרו, מומלץ בדרך כלל להוסיף כאן את השם של כלל היצירה במקום את שם הקובץ עצמו. הפעולה הזו לא רק משפרת את הקריאוּת אלא גם הופכת את הכלל לגמיש יותר לשינויים עתידיים: אם הכלל שנוצר יוצר קבצים שונים בעתיד, צריך לתקן רק מקום אחד: outs מתוך כלל היצירה. אין ליצור כלל ליצירת כלל ב-deps כי הוא לא פעיל.

קובצי המקור מסוג .srcjar לא ארוזים ומעובדים. (כדאי להשתמש באפשרות הזו אם צריך ליצור קבוצה של קובצי .java עם מנחה).

כללים: אם הכלל (בדרך כלל genrule או filegroup) יוצר קובץ כלשהו מבין הקבצים שלמעלה, ייעשה בו שימוש בדיוק כמו שמתואר בקובצי מקור.

הארגומנט הזה כמעט תמיד נדרש, אלא אם המאפיין main_class מציין מחלקה בנתיב הריצה של הכיתה או אם מציינים את הארגומנט runtime_deps.

resources

List of labels; optional

רשימה של קובצי נתונים שצריך לכלול במאגר של Java.

אם מציינים משאבים, הם מקובצים במאגר ויחד עם קובצי .class הרגילים שנוצרו על ידי האוסף. מיקום המשאבים בתוך קובץ המאגר נקבע על-ידי מבנה הפרויקט. בשלב הראשון, Bazel מחפשת את Maven's פריסת ספרייה רגילה, ( "src" ספרייה ואחריה "resources" Directory הצאצא). אם לא מוצאים את הרכיב הזה, לא ניתן לעקוף את הכלל הזה, אבל ניתן להשתמש במאפיין resource_strip_prefix כדי לציין ספרייה חלופית ספציפית לקובצי משאבים.

המשאבים יכולים להיות קובצי מקור או קבצים שנוצרים.

classpath_resources

List of labels; optional

אין להשתמש באפשרות הזו, אלא אם אין אפשרות אחרת)

רשימה של משאבים שצריכים להיות בבסיס עץ ה-JavaScript. המטרה של המאפיין הזה היא לתמוך רק בספריות של צד שלישי שמחייבות מציאת משאבים בנתיב של הכיתה בדיוק כמו "myconfig.xml". מותר להשתמש רק בקבצים בינאריים ולא בספריות, עקב הסכנה של מחלוקות במרחב שמות.

create_executable

Boolean; optional; nonconfigurable; default is True

אם הקובץ הבינארי הוא קובץ הפעלה. קבצים בינאריים שאינם ניתנים להפעלה אוספים נתונים שתלויים בזמן הרצת Java בצנצנת, אך לא ניתן להפעיל אותם ישירות. לא נוצר סקריפט wrapper אם המאפיין הזה מוגדר. אם נקבעים המאפיינים launcher או main_class , מומלץ להגדיר את הערך הזה ל-0.
deploy_env

List of labels; optional

רשימה של יעדים אחרים של java_binary שמייצגים את סביבת הפריסה של הקובץ הבינארי הזה. יש להגדיר את המאפיין הזה בזמן בניית פלאגין שייטען מחדש על ידי java_binary אחר.
הגדרת המאפיין הזה מחריגה את כל התלות מהנתיב של זמן הריצה (וממאגר הפריסה) של הקובץ הבינארי הזה, ששותפו בין הקובץ הבינארי הזה לבין היעדים שצוינו ב-deploy_env.
deploy_manifest_lines

List of strings; optional

רשימת שורות שיש להוסיף לקובץ META-INF/manifest.mf שנוצר עבור היעד *_deploy.jar. התוכן של המאפיין הזה לא כפוף ל"יצירת משתנה".
javacopts

List of strings; optional

אפשרויות מהדר נוסף לספרייה הזו. כפופים ל- "Make variable" ולהחלפת אסימון מעטפת.

אפשרויות המהדר הזה עוברות ל-JavaScript אחרי האפשרויות של המהדר הגלובלי.

jvm_flags

List of strings; optional

רשימת סימונים להטמעה בסקריפט wrapper שנוצר להפעלת הקובץ הבינארי הזה. בכפוף ל-$(location) ו-"Make variable", ואסימונים של מעטפת בונאית.

סקריפט ה-wrapper עבור קובץ בינארי של Java כולל הגדרה של ONIXPATH (כדי למצוא את כל הצנצנות התלויות) והוא מפעיל את תרגום ה-Java הנכון. שורת הפקודה שנוצרה על ידי הסקריפט wrapper כוללת את השם של הכיתה הראשית ואחריה "$@", כדי שניתן יהיה להעביר ארגומנטים אחרים אחרי שם הכיתה. עם זאת, חובה לציין ארגומנטים לפני ניתוח לפי ה-JVM לפני שם הכיתה בשורת הפקודה. התוכן של jvm_flags יתווסף לסקריפט wrapper לפני ששם הכיתה יופיע.

לתשומת ליבך, למאפיין הזה אין השפעה על פלט *_deploy.jar.

launcher

Label; optional

יש לציין קובץ בינארי שישמש להפעלת תוכנית Java במקום תוכנית bin/java הרגילה הכלולה ב-JDK. היעד חייב להיות cc_binary. ניתן לציין כל cc_binary שמטמיע את Java Invocation API כערך של המאפיין הזה.

כברירת מחדל, Bazel תשתמש במפעיל JDK הרגיל (bin/JavaScript או Java.exe).

הדגל --java_launcher הקשור ל-Bazel משפיע רק על היעדים java_binary ו-java_test שלא לא ציינו מאפיין launcher.

שימו לב שהתלויים המקומיים (C++, SWIG, JNI) יהיו שונים בהתאם לשימוש שלכם במרכז האפליקציות של JDK או במפעיל אפליקציות אחר:

  • אם בחרת להשתמש במפעיל האפליקציות הרגיל של JDK (ברירת המחדל), תלויות המקוריות נבנו כספרייה משותפת בשם {name}_nativedeps.so, כאשר {name} הוא המאפיין name של כלל JavaScript_binary זה. קוד שאינו בשימוש לא הוסר על ידי המקשר בתצורה הזו.
  • אם משתמשים במפעיל אחר, תלויות (C++ ) מקושרות באופן סטטי לקובץ בינארי בשם {name}_nativedeps, כאשר {name} הוא המאפיין name של הכלל JavaScript_binary. במקרה כזה, המקשר יסיר כל קוד שלדעתו אינו בשימוש מהקובץ הבינארי שיתקבל. המשמעות היא שכל קוד C++ שהגישה אליו היא רק דרך JNI, עשוי להיות לא מקושר אליו, אלא אם היעד cc_library מציין alwayslink = 1.

בעת שימוש במפעיל שאינו מרכז האפליקציות של JDK המוגדר כברירת מחדל, הפורמט של פלט *_deploy.jar משתנה. לקבלת פרטים, יש לעיין במסמכים הראשיים של JavaScript_binary.

main_class

String; optional

שם הכיתה עם השיטה main() לשימוש כנקודת כניסה. אם כלל מסוים משתמש באפשרות הזו, אין צורך ברשימת srcs=[...]. לכן, באמצעות המאפיין הזה אפשר לבצע הפעלה מספריית Java שכבר מכילה שיטה אחת או יותר מסוג main().

הערך של המאפיין הזה הוא שם מחלקה, ולא קובץ מקור. הכיתה צריכה להיות זמינה בזמן הריצה: היא מבוססת על הכלל הזה (srcs) או סופק על ידי יחסי תלות ישירים או זמניים (באמצעות runtime_deps או deps). אם הכיתה לא זמינה, הקובץ הבינארי ייכשל בזמן הריצה. אין בדיקת זמן בנייה.

plugins

List of labels; optional

יישומי פלאגין של מהדר Java שניתן להפעיל בזמן הידור. כל java_plugin שצוין במאפיין הזה יופעל בכל פעם שהכלל הזה נוצר. ספרייה יכולה גם לקבל בירושה יישומי פלאגין מתלויים שמשתמשים ב-exported_plugins. משאבים שנוצרו על ידי הפלאגין ייכללו בתרשים שנוצר כתוצאה מהכלל הזה.
resource_jars

List of labels; optional

הוצא משימוש: במקום זאת, יש להשתמש ב-Java_Import ו-Deps או ב-runtime_deps.
resource_strip_prefix

String; optional

הקידומת של הנתיב להוצאת משאבי Java.

אם מציינים את קידומת הנתיב, היא תוסר מכל הקבצים במאפיין resources. שגיאה היא שקובץ משאב לא יהיה בספרייה הזו. אם לא מוגדר (ברירת המחדל), הנתיב של קובץ המשאבים נקבע לפי אותה לוגיקה של חבילת קובצי ה-Java של קובצי המקור. לדוגמה, קובץ המקור יהיה stuff/java/foo/bar/a.txt בכתובת foo/bar/a.txt.

runtime_deps

List of labels; optional

ספריות שיהיו זמינות לקובץ הבינארי הסופי או לבדיקה בזמן ריצה בלבד. כמו deps הרגיל, הם יופיעו במסלול הריצה בזמן הריצה, אבל בניגוד אליהם, לא בנתיב הנתיב בזמן ההרכב. כאן אפשר לראות את התלות הנדרשות רק בזמן הריצה. כלים לניתוח נתונים תלויים צריכים להתעלם מיעדים שמופיעים בruntime_deps וגם בdeps.
stamp

Integer; optional; default is -1

אם מקודדים מידע על build בתוך הקובץ הבינארי. ערכים אפשריים:
  • stamp = 1: תמיד יש להכניס את פרטי ה-build לבינארי, גם ב---nostamp. אין להגדיר את ההגדרה הזו, כי היא עלולה להשבית את השמירה במטמון של הקובץ הבינארי ואת כל הפעולות שקשורות אליו, שתלויות בהמשך.
  • stamp = 0: תמיד להחליף את פרטי ה-build בערכים קבועים. הפעולה הזו עוזרת לשמור במטמון תוצאות חיפוש טובות.
  • stamp = -1: הטמעת פרטי build נשלטת על ידי הסימון --[no]stamp.

קבצים בינאריים עם חותמות לא נוצרים מחדש, אלא אם תלויות בהם.

use_launcher

Boolean; optional; default is True

אם הקובץ הבינארי צריך להשתמש במפעיל מותאם אישית.

אם המאפיין הזה מוגדר כ-false, המערכת תתעלם ממאפיין מרכז האפליקציות ומהסימון --java_launcher הקשור ליעד הזה.

use_testrunner

Boolean; optional; default is False

יש להשתמש ברכיב 'הרצת בדיקה' (ברירת המחדל com.google.testing.junit.runner.BazelTestRunner) כנקודת הכניסה העיקרית לתוכנית Java, ולציין את סיווג הבדיקה להרצת הבדיקה בתור ערך המערכת של bazel.test_suite. ניתן להשתמש באפשרות הזו כדי לשנות את התנהגות ברירת המחדל, כלומר, להשתמש בשיטת הרצת הבדיקה עבור כללי java_test, ולא להשתמש בכללי java_binary. סביר להניח שלא תרצו לעשות זאת. שימוש אחד מיועד לAllTest כללים שמופעלים על ידי כלל אחר (לדוגמה, הגדרת מסד נתונים לפני הפעלת בדיקות). יש להצהיר על הכלל AllTest כ-java_binary, אבל עדיין יש להשתמש ברכיב המפעיל כנקודת הכניסה העיקרית. אפשר לשנות את השם של מחלקת ריצה באמצעות מאפיין main_class.

Java_Import

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

הכלל הזה מאפשר שימוש בקובצי .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

Name; required

שם ייחודי ליעד הזה.

deps

List of labels; optional

רשימת הספריות האחרות שיש לקשר ליעד. יש לעיין בכתובת JavaScript_library.deps.
constraints

List of strings; optional; nonconfigurable

אילוצים נוספים שחלים על כלל זה כספריית Java.
exports

List of labels; optional

יעדים שיהיו זמינים למשתמשים בכלל הזה. יש לעיין בכתובת JavaScript_library.exports.
jars

List of labels; required

רשימת קובצי ה-JAR שסופקו ליעדי Java שתלויים ביעד הזה.

Boolean; optional; default is False

יש להשתמש בספרייה הזו רק לצורך אוסף ולא בזמן ריצה. שימושי אם הספרייה מסופקת על ידי סביבת זמן הריצה במהלך ההפעלה. דוגמאות לספריות כאלה הן IDE APIs עבור יישומי פלאגין של IDE או tools.jar לכל מה שפועל ב-JDK רגיל.
proguard_specs

List of labels; optional

קבצים שישמשו כמפרט של Proguard. המפרט הזה מתאר את קבוצת המפרטים שישמשו את Proguard. אם מציינים אותם, הם יתווספו לכל יעד של android_binary בהתאם לספרייה הזו. לקבצים הכלולים כאן צריכים להיות רק כללים ללא זהויות, כלומר, -dontnote, --dontwarn, תופעות לוואי וכללים שמתחילים ב--keep. אפשרויות נוספות יכולות להופיע רק ב-android_binary's Proguard_specs כדי להבטיח שהמיזוגים לא יהיו טקטיים.
runtime_deps

List of labels; optional

ספריות שיהיו זמינות לקובץ הבינארי הסופי או לבדיקה בזמן ריצה בלבד. יש לעיין ב-JavaScript_library.runtime_deps.
srcjar

Label; optional

קובץ JAR שמכיל את קוד המקור של קובצי ה-JAR הנערכים.

Java_library_

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

הכלל הזה הידור ומקשרת מקורות לקובץ .jar.

יעדי פלט מרומזים

  • libname.jar: ארכיון Java המכיל את קובצי הכיתות.
  • libname-src.jar: ארכיון שמכיל את המקורות ("source tar").

ארגומנטים

מאפיינים
name

Name; required

שם ייחודי ליעד הזה.

deps

List of labels; optional

רשימת הספריות שיש לקשר לספרייה הזו. אפשר לעיין בתגובות כלליות על deps במאפיינים אופייניים שמוגדרים על ידי רוב כללי הבנייה.

הצנצנות שנוצרו על ידי java_library כללים המפורטים ב-deps יופיעו בנתיב המחלקה של כלל הביצוע בזמן הזה. בנוסף, ייסגרו החסימות העקיפות של deps, runtime_deps ו-exports במסלול זמן הריצה.

לעומת זאת, יעדים במאפיין data נכללים בקובצי הריצה אבל לא במסלול הנתיב של 'זמן הביצוע' או ב'זמן הריצה'.

srcs

List of labels; optional

רשימת קובצי המקור שמעובדים כדי ליצור את היעד. המאפיין הזה כמעט תמיד נחוץ. אתם יכולים לראות את רשימת החריגים בהמשך.

הידור של קובצי המקור מסוג .java. במקרה של קובצי .java שנוצרו, מומלץ בדרך כלל להוסיף כאן את השם של כלל היצירה במקום את שם הקובץ עצמו. הפעולה הזו לא רק משפרת את הקריאוּת אלא גם הופכת את הכלל לגמיש יותר לשינויים עתידיים: אם הכלל שנוצר יוצר קבצים שונים בעתיד, צריך לתקן רק מקום אחד: outs מתוך כלל היצירה. אין ליצור כלל ליצירת כלל ב-deps כי הוא לא פעיל.

קובצי המקור מסוג .srcjar לא ארוזים ומעובדים. (כדאי להשתמש באפשרות הזו אם צריך ליצור קבוצה של קובצי .java עם מנחה).

כללים: אם הכלל (בדרך כלל genrule או filegroup) יוצר קובץ כלשהו מבין הקבצים שלמעלה, ייעשה בו שימוש בדיוק כמו שמתואר בקובצי מקור.

הארגומנט הזה כמעט תמיד נדרש, אלא אם המאפיין main_class מציין מחלקה בנתיב הריצה של הכיתה או אם מציינים את הארגומנט runtime_deps.

data

List of labels; optional

רשימת הקבצים הדרושים לספרייה הזו בזמן הריצה. אפשר לעיין בתגובות כלליות על data במאפיינים אופייניים שמוגדרים על ידי רוב כללי הבנייה.

בעת בניית הקובץ java_library, חברת Bazel לא מציבה את הקבצים האלו בשום מקום. אם הקבצים data נוצרים, סימן ש-Bazel יוצר אותם. בעת יצירת בדיקה שתלויה ב-java_library Bazel הזה, היא מעתיקה או מקשרת את קובצי data לאזור Runruns.

resources

List of labels; optional

רשימה של קובצי נתונים שצריך לכלול במאגר של Java.

אם מציינים משאבים, הם מקובצים במאגר ויחד עם קובצי .class הרגילים שנוצרו על ידי האוסף. מיקום המשאבים בתוך קובץ המאגר נקבע על-ידי מבנה הפרויקט. בשלב הראשון, Bazel מחפשת את Maven's פריסת ספרייה רגילה, ( "src" ספרייה ואחריה "resources" Directory הצאצא). אם לא מוצאים את הרכיב הזה, לא ניתן לעקוף את הכלל הזה, אבל ניתן להשתמש במאפיין resource_strip_prefix כדי לציין ספרייה חלופית ספציפית לקובצי משאבים.

המשאבים יכולים להיות קובצי מקור או קבצים שנוצרים.

exported_plugins

List of labels; optional

רשימת java_plugin (לדוגמה, מעבדי הערות) לייצוא לייצוא לספריות שתלויות ישירות בספרייה.

הרשימה שצוינה של java_plugin תחול על כל ספרייה שתלויה ישירות בספרייה הזו, כאילו שהספרייה הזו הצהירה במפורש על התוויות האלה ב-plugins.

exports

List of labels; optional

ייצוא הספריות.

כללי הרישום כאן יהיו זמינים בכללים להורים, כאילו ההורים התבססו במפורש על הכללים האלה. הדבר לא נכון לגבי deps רגילים (לא מיוצאים).

סיכום: כלל X יכול לגשת לקוד ב-Y אם קיים נתיב תלות ביניהם שמתחיל ב-deps, ואחריו אפס או יותר הקצוות של exports. הנה כמה דוגמאות להמחשה זו.

נניח ש-A תלוי ב-B ו-B תלוי ב-C. במקרה זה ג' היא תלות חלופית א', לכן שינוי המקורות של אתר ובנייתו מחדש יבנה מחדש את כל הנכסים באופן תקין. עם זאת, א' לא יוכל להשתמש בכיתות ב'. כדי לאפשר זאת, A צריך להצהיר על C בdeps, או ש-B יכולה להקל על A (וכל דבר שעשוי להיות תלוי ב-A) על ידי הצהרת C במאפייני ה-B&#39 של exports.

סגירת הספריות המיוצאות זמינה לכל כללי ההורה הישירים. דוגמה שונה במקצת: א' תלוי ב-ב', ב' תלוי ב-ג' וב-ד' וגם מייצא את ג' אבל לא את ד'. עכשיו ל-A יש גישה ל-C אבל לא ל-D. עכשיו, אם C ו-D ייצאו ספריות מסוימות, C' ו-D' בהתאמה, A יכולה לגשת רק ל-C' אבל לא ל-D'.

חשוב: כלל שמיוצא אינו תלות רגילה. בדוגמה הקודמת, אם B מייצאת את C ורוצה להשתמש גם ב-C, צריך לרשום אותו גם ב-deps שלו.

javacopts

List of strings; optional

אפשרויות מהדר נוסף לספרייה הזו. כפופים ל-"Make variable" ולהחלפת אסימון מעטפת.

אפשרויות המהדר הזה עוברות ל-JavaScript אחרי האפשרויות של המהדר הגלובלי.

Boolean; optional; default is False

אם יש להשתמש בספרייה הזו רק לאיסוף ולא בזמן ריצה. שימושי אם הספרייה מסופקת על ידי סביבת זמן הריצה במהלך ההפעלה. דוגמאות לספריות כאלה הן ממשקי API של IDE עבור יישומי פלאגין של IDE או tools.jar לכל מה שפועל ב-JDK רגיל.

חשוב לשים לב שהמדיניות neverlink = 1 לא מונעת מהדר להופיע תוכן מהספרייה הזו ליעדי אוסף שתלויים בה, כפי שמותר במפרט השפה של Java (למשל static final קבועים מתוך String או סוגים מהדור הישן. לכן, מצב השימוש המועדף הוא כאשר ספריית זמן הריצה זהה לספריית האוסף.

אם ספריית זמן הריצה שונה מספריית האיסוף, צריך לוודא שהיא שונה רק במקומות שבהם ה-JLS אוסר על מהדרים מוטבע (ועליה להישמר בכל הגרסאות העתידיות של ה-JLS).

plugins

List of labels; optional

יישומי פלאגין של מהדר Java שניתן להפעיל בזמן הידור. כל java_plugin שצוין במאפיין הזה יופעל בכל פעם שהכלל הזה נוצר. ספרייה יכולה גם לקבל בירושה יישומי פלאגין מתלויים שמשתמשים ב-exported_plugins. משאבים שנוצרו על ידי הפלאגין ייכללו בתרשים שנוצר כתוצאה מהכלל הזה.
proguard_specs

List of labels; optional

קבצים שישמשו כמפרט של Proguard. המפרט הזה מתאר את קבוצת המפרטים שישמשו את Proguard. אם מציינים אותם, הם יתווספו לכל יעד של android_binary בהתאם לספרייה הזו. לקבצים הכלולים כאן צריכים להיות רק כללים ללא זהויות, כלומר, -dontnote, --dontwarn, תופעות לוואי וכללים שמתחילים ב--keep. אפשרויות נוספות יכולות להופיע רק ב-android_binary's Proguard_specs כדי להבטיח שהמיזוגים לא יהיו טקטיים.
resource_jars

List of labels; optional

הוצא משימוש: במקום זאת, יש להשתמש ב-Java_Import ו-Deps או ב-runtime_deps.
resource_strip_prefix

String; optional

הקידומת של הנתיב להוצאת משאבי Java.

אם מציינים את קידומת הנתיב, היא תוסר מכל הקבצים במאפיין resources. שגיאה היא שקובץ משאב לא יהיה בספרייה הזו. אם לא מוגדר (ברירת המחדל), הנתיב של קובץ המשאבים נקבע לפי אותה לוגיקה של חבילת קובצי ה-Java של קובצי המקור. לדוגמה, קובץ המקור יהיה stuff/java/foo/bar/a.txt בכתובת foo/bar/a.txt.

runtime_deps

List of labels; optional

ספריות שיהיו זמינות לקובץ הבינארי הסופי או לבדיקה בזמן ריצה בלבד. כמו deps הרגיל, הם יופיעו במסלול הריצה בזמן הריצה, אבל בניגוד אליהם, לא בנתיב הנתיב בזמן ההרכב. כאן אפשר לראות את התלות הנדרשות רק בזמן הריצה. כלים לניתוח נתונים תלויים צריכים להתעלם מיעדים שמופיעים בruntime_deps וגם בdeps.

Java_lite_proto_library

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

java_lite_proto_library יוצר קוד Java מתוך .proto קבצים.

deps חייב להפנות אל הכללים של proto_library .

דוגמה:

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

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

proto_library(
    name = "bar",
)

ארגומנטים

מאפיינים
name

Name; required

שם ייחודי ליעד הזה.

deps

List of labels; optional

רשימת הכללים של proto_library ליצירת קוד Java.

Java_proto_library

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

java_proto_library יוצר קוד Java מתוך .proto קבצים.

deps חייב להפנות אל הכללים של proto_library .

דוגמה:

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

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

proto_library(
    name = "foo_proto",
)

ארגומנטים

מאפיינים
name

Name; required

שם ייחודי ליעד הזה.

deps

List of labels; optional

רשימת הכללים של proto_library ליצירת קוד Java.

Java_test

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

כלל java_test() מבצע בדיקת Java. בדיקה היא wrapper בינארי מסביב לקוד הבדיקה. השיטה הראשית של המריץ מופעלת במקום הכיתה הראשית.

יעדי פלט מרומזים

  • name.jar: ארכיון של Java.
  • name_deploy.jar: ארכיון של Java שמתאים לפריסה. (נוצר רק אם התבקשה במפורש). לפרטים נוספים, יש לעיין בתיאור הפלט של name_deploy.jar מתוך JavaScript_binary.

צפייה בקטע בארגומנטים של JavaScript_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

Name; required

שם ייחודי ליעד הזה.

deps

List of labels; optional

רשימת הספריות האחרות שיש לקשר ליעד. אפשר לעיין בתגובות כלליות על deps במאפיינים אופייניים שמוגדרים על ידי רוב כללי הבנייה.
srcs

List of labels; optional

רשימת קובצי המקור שמעובדים כדי ליצור את היעד. המאפיין הזה כמעט תמיד נחוץ. אתם יכולים לראות את רשימת החריגים בהמשך.

הידור של קובצי המקור מסוג .java. במקרה של קובצי .java שנוצרו, מומלץ בדרך כלל להוסיף כאן את השם של כלל היצירה במקום את שם הקובץ עצמו. הפעולה הזו לא רק משפרת את הקריאוּת אלא גם הופכת את הכלל לגמיש יותר לשינויים עתידיים: אם הכלל שנוצר יוצר קבצים שונים בעתיד, צריך לתקן רק מקום אחד: outs מתוך כלל היצירה. אין ליצור כלל ליצירת כלל ב-deps כי הוא לא פעיל.

קובצי המקור מסוג .srcjar לא ארוזים ומעובדים. (כדאי להשתמש באפשרות הזו אם צריך ליצור קבוצה של קובצי .java עם מנחה).

כללים: אם הכלל (בדרך כלל genrule או filegroup) יוצר קובץ כלשהו מבין הקבצים שלמעלה, ייעשה בו שימוש בדיוק כמו שמתואר בקובצי מקור.

הארגומנט הזה כמעט תמיד נדרש, אלא אם המאפיין main_class מציין מחלקה בנתיב הריצה של הכיתה או אם מציינים את הארגומנט runtime_deps.

resources

List of labels; optional

רשימה של קובצי נתונים שצריך לכלול במאגר של Java.

אם מציינים משאבים, הם מקובצים במאגר ויחד עם קובצי .class הרגילים שנוצרו על ידי האוסף. מיקום המשאבים בתוך קובץ המאגר נקבע על-ידי מבנה הפרויקט. בשלב הראשון, Bazel מחפשת את Maven's פריסת ספרייה רגילה, ( "src" ספרייה ואחריה "resources" Directory הצאצא). אם לא מוצאים את הרכיב הזה, לא ניתן לעקוף את הכלל הזה, אבל ניתן להשתמש במאפיין resource_strip_prefix כדי לציין ספרייה חלופית ספציפית לקובצי משאבים.

המשאבים יכולים להיות קובצי מקור או קבצים שנוצרים.

classpath_resources

List of labels; optional

אין להשתמש באפשרות הזו, אלא אם אין אפשרות אחרת)

רשימה של משאבים שצריכים להיות בבסיס עץ ה-JavaScript. המטרה של המאפיין הזה היא לתמוך רק בספריות של צד שלישי שמחייבות מציאת משאבים בנתיב של הכיתה בדיוק כמו "myconfig.xml". מותר להשתמש רק בקבצים בינאריים ולא בספריות, עקב הסכנה של מחלוקות במרחב שמות.

create_executable

Boolean; optional; nonconfigurable; default is True

אם הקובץ הבינארי הוא קובץ הפעלה. קבצים בינאריים שאינם ניתנים להפעלה אוספים נתונים שתלויים בזמן הרצת Java בצנצנת, אך לא ניתן להפעיל אותם ישירות. לא נוצר סקריפט wrapper אם המאפיין הזה מוגדר. אם נקבעים המאפיינים launcher או main_class , מומלץ להגדיר את הערך הזה ל-0.
deploy_manifest_lines

List of strings; optional

רשימת שורות שיש להוסיף לקובץ META-INF/manifest.mf שנוצר עבור היעד *_deploy.jar. התוכן של המאפיין הזה לא כפוף ל"יצירת משתנה".
javacopts

List of strings; optional

אפשרויות מהדר נוסף לספרייה הזו. כפופים ל- "Make variable" ולהחלפת אסימון מעטפת.

אפשרויות המהדר הזה עוברות ל-JavaScript אחרי האפשרויות של המהדר הגלובלי.

jvm_flags

List of strings; optional

רשימת סימונים להטמעה בסקריפט wrapper שנוצר להפעלת הקובץ הבינארי הזה. בכפוף ל-$(location) ו-"Make variable", ואסימונים של מעטפת בונאית.

סקריפט ה-wrapper עבור קובץ בינארי של Java כולל הגדרה של ONIXPATH (כדי למצוא את כל הצנצנות התלויות) והוא מפעיל את תרגום ה-Java הנכון. שורת הפקודה שנוצרה על ידי הסקריפט wrapper כוללת את השם של הכיתה הראשית ואחריה "$@", כדי שניתן יהיה להעביר ארגומנטים אחרים אחרי שם הכיתה. עם זאת, חובה לציין ארגומנטים לפני ניתוח לפי ה-JVM לפני שם הכיתה בשורת הפקודה. התוכן של jvm_flags יתווסף לסקריפט wrapper לפני ששם הכיתה יופיע.

לתשומת ליבך, למאפיין הזה אין השפעה על פלט *_deploy.jar.

launcher

Label; optional

יש לציין קובץ בינארי שישמש להפעלת תוכנית Java במקום תוכנית bin/java הרגילה הכלולה ב-JDK. היעד חייב להיות cc_binary. ניתן לציין כל cc_binary שמטמיע את Java Invocation API כערך של המאפיין הזה.

כברירת מחדל, Bazel תשתמש במפעיל JDK הרגיל (bin/JavaScript או Java.exe).

הדגל --java_launcher הקשור ל-Bazel משפיע רק על היעדים java_binary ו-java_test שלא לא ציינו מאפיין launcher.

שימו לב שהתלויים המקומיים (C++, SWIG, JNI) יהיו שונים בהתאם לשימוש שלכם במרכז האפליקציות של JDK או במפעיל אפליקציות אחר:

  • אם בחרת להשתמש במפעיל האפליקציות הרגיל של JDK (ברירת המחדל), תלויות המקוריות נבנו כספרייה משותפת בשם {name}_nativedeps.so, כאשר {name} הוא המאפיין name של כלל JavaScript_binary זה. קוד שאינו בשימוש לא הוסר על ידי המקשר בתצורה הזו.
  • אם משתמשים במפעיל אחר, תלויות (C++ ) מקושרות באופן סטטי לקובץ בינארי בשם {name}_nativedeps, כאשר {name} הוא המאפיין name של הכלל JavaScript_binary. במקרה כזה, המקשר יסיר כל קוד שלדעתו אינו בשימוש מהקובץ הבינארי שיתקבל. המשמעות היא שכל קוד C++ שהגישה אליו היא רק דרך JNI, עשוי להיות לא מקושר אליו, אלא אם היעד cc_library מציין alwayslink = 1.

בעת שימוש במפעיל שאינו מרכז האפליקציות של JDK המוגדר כברירת מחדל, הפורמט של פלט *_deploy.jar משתנה. לקבלת פרטים, יש לעיין במסמכים הראשיים של JavaScript_binary.

main_class

String; optional

שם הכיתה עם השיטה main() לשימוש כנקודת כניסה. אם כלל מסוים משתמש באפשרות הזו, אין צורך ברשימת srcs=[...]. לכן, באמצעות המאפיין הזה אפשר לבצע הפעלה מספריית Java שכבר מכילה שיטה אחת או יותר מסוג main().

הערך של המאפיין הזה הוא שם מחלקה, ולא קובץ מקור. הכיתה צריכה להיות זמינה בזמן הריצה: היא מבוססת על הכלל הזה (srcs) או סופק על ידי יחסי תלות ישירים או זמניים (באמצעות runtime_deps או deps). אם הכיתה לא זמינה, הקובץ הבינארי ייכשל בזמן הריצה. אין בדיקת זמן בנייה.

plugins

List of labels; optional

יישומי פלאגין של מהדר Java שניתן להפעיל בזמן הידור. כל java_plugin שצוין במאפיין הזה יופעל בכל פעם שהכלל הזה נוצר. ספרייה יכולה גם לקבל בירושה יישומי פלאגין מתלויים שמשתמשים ב-exported_plugins. משאבים שנוצרו על ידי הפלאגין ייכללו בתרשים שנוצר כתוצאה מהכלל הזה.
resource_jars

List of labels; optional

הוצא משימוש: במקום זאת, יש להשתמש ב-Java_Import ו-Deps או ב-runtime_deps.
resource_strip_prefix

String; optional

הקידומת של הנתיב להוצאת משאבי Java.

אם מציינים את קידומת הנתיב, היא תוסר מכל הקבצים במאפיין resources. שגיאה היא שקובץ משאב לא יהיה בספרייה הזו. אם לא מוגדר (ברירת המחדל), הנתיב של קובץ המשאבים נקבע לפי אותה לוגיקה של חבילת קובצי ה-Java של קובצי המקור. לדוגמה, קובץ המקור יהיה stuff/java/foo/bar/a.txt בכתובת foo/bar/a.txt.

runtime_deps

List of labels; optional

ספריות שיהיו זמינות לקובץ הבינארי הסופי או לבדיקה בזמן ריצה בלבד. כמו deps הרגיל, הם יופיעו במסלול הריצה בזמן הריצה, אבל בניגוד אליהם, לא בנתיב הנתיב בזמן ההרכב. כאן אפשר לראות את התלות הנדרשות רק בזמן הריצה. כלים לניתוח נתונים תלויים צריכים להתעלם מיעדים שמופיעים בruntime_deps וגם בdeps.
stamp

Integer; optional; default is 0

אם מקודדים מידע על build בתוך הקובץ הבינארי. ערכים אפשריים:
  • stamp = 1: תמיד יש להכניס את פרטי ה-build לבינארי, גם ב---nostamp. אין להגדיר את ההגדרה הזו, כי היא עלולה להשבית את השמירה במטמון של הקובץ הבינארי ואת כל הפעולות שקשורות אליו, שתלויות בהמשך.
  • stamp = 0: תמיד להחליף את פרטי ה-build בערכים קבועים. הפעולה הזו עוזרת לשמור במטמון תוצאות חיפוש טובות.
  • stamp = -1: הטמעת פרטי build נשלטת על ידי הסימון --[no]stamp.

קבצים בינאריים עם חותמות לא נוצרים מחדש, אלא אם תלויות בהם.

test_class

String; optional

מחלקת Java שיש לטעון על ידי מפעיל הבדיקה.

כברירת מחדל, אם לא הוגדר ארגומנט זה, ייעשה שימוש במצב 'הדור הקודם' וגם נעשה שימוש בארגומנטים לבדיקה. הגדרת הסימון --nolegacy_bazel_java_test כחלופה לארגומנט הראשון.

המאפיין הזה מציין את השם של מחלקת Java שיש להריץ באמצעות הבדיקה הזו. לעיתים רחוקות יש צורך להגדיר זאת. אם הארגומנט הזה יושמט, המערכת תסיק אותו לפי יעד היעד name והנתיב יחסי לשורש המקור. אם הבדיקה נמצאת מחוץ לשורש ידוע, Bazel תדווח על שגיאה אם test_class לא מוגדר.

עבור JUNIT3, קבוצת הבדיקה צריכה להיות מחלקת משנה של junit.framework.TestCase, או שנדרשת עבורה שיטת suite() סטטית סטטית שמחזירה junit.framework.Test (או מחלקת משנה של Test). עבור JUNIT4, יש להוסיף הערה לגבי הכיתה באמצעות org.junit.runner.RunWith.

המאפיין הזה מאפשר למספר כללי java_test לשתף את אותו Test (TestCase, TestSuite, ...). בדרך כלל מועבר אליו מידע נוסף (למשל, באמצעות jvm_flags=['-Dkey=value']), כך שההתנהגות שלו תהיה שונה בכל מקרה, למשל להפעלת קבוצת משנה שונה של הבדיקות. המאפיין הזה מאפשר גם להשתמש בבדיקות Java מחוץ לעץ של javatests.

use_launcher

Boolean; optional; default is True

אם הקובץ הבינארי צריך להשתמש במפעיל מותאם אישית.

אם המאפיין הזה מוגדר כ-false, המערכת תתעלם ממאפיין מרכז האפליקציות ומהסימון --java_launcher הקשור ליעד הזה.

use_testrunner

Boolean; optional; default is True

יש להשתמש ברכיב 'הרצת בדיקה' (ברירת המחדל com.google.testing.junit.runner.BazelTestRunner) כנקודת הכניסה העיקרית לתוכנית Java, ולציין את סיווג הבדיקה להרצת הבדיקה בתור ערך המערכת של bazel.test_suite. ניתן להשתמש באפשרות הזו כדי לשנות את התנהגות ברירת המחדל, כלומר, להשתמש בשיטת הרצת הבדיקה עבור כללי java_test, ולא להשתמש בכללי java_binary. סביר להניח שלא תרצו לעשות זאת. שימוש אחד מיועד לAllTest כללים שמופעלים על ידי כלל אחר (לדוגמה, הגדרת מסד נתונים לפני הפעלת בדיקות). יש להצהיר על הכלל AllTest כ-java_binary, אבל עדיין יש להשתמש ברכיב המפעיל כנקודת הכניסה העיקרית. אפשר לשנות את השם של מחלקת ריצה באמצעות מאפיין main_class.

Java_package_Configuration

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

הגדרה שיחולו על חבילת חבילות. ניתן להוסיף הגדרות לקבוצות של 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

Name; required

שם ייחודי ליעד הזה.

data

List of labels; optional

רשימת הקבצים התצורה הזו נדרשת בזמן ריצה.
javacopts

List of strings; optional

התרעות של מהדר Java.
packages

List of labels; optional

הקבוצה של package_group ההגדרה צריכה לחול.

פלאגין_JavaScript

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

java_plugin מגדיר יישומי פלאגין עבור מהדר Java שהופעל על ידי Bazel. בשלב זה, סוג הפלאגין היחיד שנתמך הוא מעבדי הערות. כלל java_library או java_binary יכול להפעיל יישומי פלאגין בהתאם אליהם באמצעות המאפיין plugins. ל-java_library יש גם אפשרות לייצא באופן אוטומטי יישומי פלאגין לספריות שתלויות ישירות בנושא באמצעות exported_plugins.

יעדי פלט מרומזים

  • libname.jar: ארכיון של Java.

הארגומנטים זהים ל-java_library, למעט ההוספה של הארגומנט processor_class.

ארגומנטים

מאפיינים
name

Name; required

שם ייחודי ליעד הזה.

deps

List of labels; optional

רשימת הספריות שיש לקשר לספרייה הזו. אפשר לעיין בתגובות כלליות על deps במאפיינים אופייניים שמוגדרים על ידי רוב כללי הבנייה.

הצנצנות שנוצרו על ידי java_library כללים המפורטים ב-deps יופיעו בנתיב המחלקה של כלל הביצוע בזמן הזה. בנוסף, ייסגרו החסימות העקיפות של deps, runtime_deps ו-exports במסלול זמן הריצה.

לעומת זאת, יעדים במאפיין data נכללים בקובצי הריצה אבל לא במסלול הנתיב של 'זמן הביצוע' או ב'זמן הריצה'.

srcs

List of labels; optional

רשימת קובצי המקור שמעובדים כדי ליצור את היעד. המאפיין הזה כמעט תמיד נחוץ. אתם יכולים לראות את רשימת החריגים בהמשך.

הידור של קובצי המקור מסוג .java. במקרה של קובצי .java שנוצרו, מומלץ בדרך כלל להוסיף כאן את השם של כלל היצירה במקום את שם הקובץ עצמו. הפעולה הזו לא רק משפרת את הקריאוּת אלא גם הופכת את הכלל לגמיש יותר לשינויים עתידיים: אם הכלל שנוצר יוצר קבצים שונים בעתיד, צריך לתקן רק מקום אחד: outs מתוך כלל היצירה. אין ליצור כלל ליצירת כלל ב-deps כי הוא לא פעיל.

קובצי המקור מסוג .srcjar לא ארוזים ומעובדים. (כדאי להשתמש באפשרות הזו אם צריך ליצור קבוצה של קובצי .java עם מנחה).

כללים: אם הכלל (בדרך כלל genrule או filegroup) יוצר קובץ כלשהו מבין הקבצים שלמעלה, ייעשה בו שימוש בדיוק כמו שמתואר בקובצי מקור.

הארגומנט הזה כמעט תמיד נדרש, אלא אם המאפיין main_class מציין מחלקה בנתיב הריצה של הכיתה או אם מציינים את הארגומנט runtime_deps.

data

List of labels; optional

רשימת הקבצים הדרושים לספרייה הזו בזמן הריצה. אפשר לעיין בתגובות כלליות על data במאפיינים אופייניים שמוגדרים על ידי רוב כללי הבנייה.

בעת בניית הקובץ java_library, חברת Bazel לא מציבה את הקבצים האלו בשום מקום. אם הקבצים data נוצרים, סימן ש-Bazel יוצר אותם. בעת יצירת בדיקה שתלויה ב-java_library Bazel הזה, היא מעתיקה או מקשרת את קובצי data לאזור Runruns.

resources

List of labels; optional

רשימה של קובצי נתונים שצריך לכלול במאגר של Java.

אם מציינים משאבים, הם מקובצים במאגר ויחד עם קובצי .class הרגילים שנוצרו על ידי האוסף. מיקום המשאבים בתוך קובץ המאגר נקבע על-ידי מבנה הפרויקט. בשלב הראשון, Bazel מחפשת את Maven's פריסת ספרייה רגילה, ( "src" ספרייה ואחריה "resources" Directory הצאצא). אם לא מוצאים את הרכיב הזה, לא ניתן לעקוף את הכלל הזה, אבל ניתן להשתמש במאפיין resource_strip_prefix כדי לציין ספרייה חלופית ספציפית לקובצי משאבים.

המשאבים יכולים להיות קובצי מקור או קבצים שנוצרים.

generates_api

Boolean; optional; default is False

מאפיין זה מעבד מעבדי מידע שמייצרים קוד API.

אם כלל משתמש במעבד הערות שנוצר על ידי API, כללים אחרים שתלויים בו יכולים להתייחס לקוד שנוצר רק אם פעולות האיסוף שלו מתוזמנות אחרי כלל היצירה. המאפיין הזה מורה ל-Bazel להפעיל אילוצי תזמון כשההגדרה --JavaScript_header_compilation מופעלת.

אזהרה: המאפיין הזה משפיע על ביצועי build, יש להשתמש בו רק אם יש צורך.

javacopts

List of strings; optional

אפשרויות מהדר נוסף לספרייה הזו. כפופים ל- "Make variable" ולהחלפת אסימון מעטפת.

אפשרויות המהדר הזה עוברות ל-JavaScript אחרי האפשרויות של המהדר הגלובלי.

Boolean; optional; default is False

אם יש להשתמש בספרייה הזו רק לאיסוף ולא בזמן ריצה. שימושי אם הספרייה מסופקת על ידי סביבת זמן הריצה במהלך ההפעלה. דוגמאות לספריות כאלה הן ממשקי API של IDE עבור יישומי פלאגין של IDE או tools.jar לכל מה שפועל ב-JDK רגיל.

חשוב לשים לב שהמדיניות neverlink = 1 לא מונעת מהדר להופיע תוכן מהספרייה הזו ליעדי אוסף שתלויים בה, כפי שמותר במפרט השפה של Java (למשל static final קבועים מתוך String או סוגים מהדור הישן. לכן, מצב השימוש המועדף הוא כאשר ספריית זמן הריצה זהה לספריית האוסף.

אם ספריית זמן הריצה שונה מספריית האיסוף, צריך לוודא שהיא שונה רק במקומות שבהם ה-JLS אוסר על מהדרים מוטבע (ועליה להישמר בכל הגרסאות העתידיות של ה-JLS).

output_licenses

Licence type; optional

הצגת common attributes
plugins

List of labels; optional

יישומי פלאגין של מהדר Java שניתן להפעיל בזמן הידור. כל java_plugin שצוין במאפיין הזה יופעל בכל פעם שהכלל הזה נוצר. ספרייה יכולה גם לקבל בירושה יישומי פלאגין מתלויים שמשתמשים ב-exported_plugins. משאבים שנוצרו על ידי הפלאגין ייכללו בתרשים שנוצר כתוצאה מהכלל הזה.
processor_class

String; optional

סוג המעבד הוא הסוג המלא של המחלקה שהמהדר של Java צריך להשתמש בה כנקודת הכניסה למעבד ההערות. אם לא צוין, הכלל הזה לא יתרום לעיבוד מעבד הערות בתהליך העיבוד של הערות Java מהדר, אבל נתיב הריצה של זמן הריצה עדיין ייכלל בנתיב של מעבד ההערות של המהדר. (האפשרות הזו מיועדת בעיקר לשימוש באמצעות יישומי פלאגין לשגיאות שגיאה, שנטענים מהנתיב של מעבד ההערות באמצעות javascript.util.ServiceLoader).
proguard_specs

List of labels; optional

קבצים שישמשו כמפרט של Proguard. המפרט הזה מתאר את קבוצת המפרטים שישמשו את Proguard. אם מציינים אותם, הם יתווספו לכל יעד של android_binary בהתאם לספרייה הזו. לקבצים הכלולים כאן צריכים להיות רק כללים ללא זהויות, כלומר, -dontnote, --dontwarn, תופעות לוואי וכללים שמתחילים ב--keep. אפשרויות נוספות יכולות להופיע רק ב-android_binary's Proguard_specs כדי להבטיח שהמיזוגים לא יהיו טקטיים.
resource_jars

List of labels; optional

הוצא משימוש: במקום זאת, יש להשתמש ב-Java_Import ו-Deps או ב-runtime_deps.
resource_strip_prefix

String; optional

הקידומת של הנתיב להוצאת משאבי Java.

אם מציינים את קידומת הנתיב, היא תוסר מכל הקבצים במאפיין resources. שגיאה היא שקובץ משאב לא יהיה בספרייה הזו. אם לא מוגדר (ברירת המחדל), הנתיב של קובץ המשאבים נקבע לפי אותה לוגיקה של חבילת קובצי ה-Java של קובצי המקור. לדוגמה, קובץ המקור יהיה stuff/java/foo/bar/a.txt בכתובת foo/bar/a.txt.

JavaScript_runtime

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

המדיניות הזו מציינת את ההגדרה של זמן ריצה של Java.

דוגמה:

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

ארגומנטים

מאפיינים
name

Name; required

שם ייחודי ליעד הזה.

srcs

List of labels; optional

כל הקבצים בזמן הריצה.
hermetic_srcs

List of labels; optional

הקבצים בזמן הריצה דרושים לפריסות ארמטיות.
java

Label; optional

הנתיב לקובץ ההרצה של Java.
java_home

String; optional

הנתיב לשורש של זמן הריצה. כפוף להחלפת "Make" variable. אם הנתיב הזה מוחלט, הכלל מציין זמן ריצה לא הררי של Java עם נתיב ידוע. במקרה כזה, המאפיינים srcs ו-java חייבים להיות ריקים.
lib_modules

Label; optional

קובץ Lib/modules הנדרש לפריסות הרמטיות.

Java_toolschain

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

מציין את התצורה של המהדר Java. ניתן לשנות את הכלי שבו אפשר להשתמש בכלי כדי להשתמש בארגומנט --JavaScript_toolschain. בדרך כלל אין לכתוב כללים כאלה, אלא אם רוצים להתאים את מהדר 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

Name; required

שם ייחודי ליעד הזה.

android_lint_data

List of labels; optional

תוויות של כלים הזמינים להרחבת תוויות ב-android_lint_jvm_opts.
android_lint_jvm_opts

List of strings; optional

רשימת הארגומנטים של JVM בעת הפעלה של Android Lite.
android_lint_opts

List of strings; optional

רשימת הארגומנטים של Android Lite.
android_lint_package_configuration

List of labels; optional

הגדרת מוך Android שיש להחיל על קבוצות החבילות שצוינו.
android_lint_runner

Label; optional

התווית של מפעיל ה-Android Lite, אם יש.
bootclasspath

List of labels; optional

הערכים ב-Javaclasspath לטירגוט של Java. תואם לסימון Javac's -bootclasspath.
deps_checker

List of labels; optional

תווית של פריסת פריסת ImportDepsChecker.
forcibly_disable_header_compilation

Boolean; optional; default is False

עקיפה – JavaScript_header_compilation כדי להשבית את הידור הכותרת בפלטפורמות שאינן תומכות בו, למשל JDK 7 Bazel.
genclass

List of labels; required

תווית של פריסת פריסת GenClass.
header_compiler

List of labels; optional

התווית של מהדר כותרת. נדרש אם --JavaScript_header_compilation מופעל.
header_compiler_direct

List of labels; optional

תווית אופציונלית של מהדר כותרת עבור פעולות ישירות של נתיב בכיתה שלא כוללות מעבדי הערות שיוצרי API.

הכלי הזה לא תומך בעיבוד הערות.

ijar

List of labels; required

תווית קובץ ההפעלה של אייג'ר.
jacocorunner

Label; optional

תווית של פריסת פריסת JacocoCoverageRunner.
java_runtime

Label; required

ה-JavaScript_runtime לשימוש עם Toolchain זה. ברירת המחדל היא JavaScript_runtime בהגדרת הפעלה.
javabuilder

List of labels; required

תווית של פריסת JavaBuilder.
javabuilder_data

List of labels; optional

תוויות של נתונים הזמינים להרחבת תוויות ב-JavaScriptbuilder_jvm_opts.
javabuilder_jvm_opts

List of strings; optional

רשימת הארגומנטים של JVM בעת הפעלת JavaBuilder.
javac_supports_multiplex_workers

Boolean; optional; default is True

True אם JavaBuilder תומך בריצה כעובד זמני של Multiplex, לא נכון אם הוא't.
javac_supports_workers

Boolean; optional; default is True

True אם JavaBuilder תומך בריצה כעובד קבוע, False אם אין לו'
javacopts

List of strings; optional

רשימת הארגומנטים הנוספים של המהדר Java. יש לעיין בתיעוד של מהדר Java לקבלת הרשימה המקיפה של התרעות המהדרות האפשריות של Java.
jvm_opts

List of strings; optional

רשימת הארגומנטים של JVM בעת ההפעלה של המהדר Java. לקבלת דוגמאות נרחבות של סימונים אפשריים לאפשרות הזו, יש לעיין בתיעוד של המכונה הווירטואלית של Java.
oneversion

Label; optional

תווית של הקובץ הבינארי של גרסה אחת.
oneversion_whitelist

Label; optional

תווית של רשימת ההיתרים לגרסה אחת.
package_configuration

List of labels; optional

הגדרה שצריכה לחול על קבוצות החבילות שצוינו.
proguard_allowlister

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

התווית של רשימת ההיתרים של Proguard.
resourcejar

List of labels; optional

תווית של קובץ ההפעלה של הכלי להגדרת צנצנת משאבים.
singlejar

List of labels; required

תווית של פריסת ה-SingleJar לפריסה.
source_version

String; optional

גרסת המקור של Java (למשל '6' או '7'). היא מציינת איזו קבוצה של מבני קוד מותרת בקוד המקור של Java.
target_version

String; optional

גרסת היעד של Java (למשל '6' או '7'). היא מציינת עבור אילו סוגים של שיעורי ריצה יש ליצור את JavaScript של Java.
timezone_data

Label; optional

תווית של צנצנת משאבים המכילה נתונים של אזור זמן. אם המדיניות מוגדרת, הנתונים של אזור הזמן מתווספים לתלות בזמן ריצה מרומזת של כל הכללים של JavaScript_binary.
tools

List of labels; optional

תוויות של כלים הזמינים להרחבת תוויות ב-jvm_opts.
turbine_data

List of labels; optional

תוויות של נתונים הזמינים להרחבת תוויות ב-turbine_jvm_opts.
turbine_jvm_opts

List of strings; optional

רשימת הארגומנטים של ה-JVM בעת הפעלת הטורבינה.
xlint

List of strings; optional

רשימת האזהרה שיש להוסיף או להסיר מרשימת ברירת המחדל. המספר הזה מקווקו מראש במקף כדי להסיר אותו. מידע נוסף זמין בתיעוד של Javac באפשרויות -Xlint.