כללי 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 ('קובץ 'צנצ'ר'), יחד עם סקריפט מעטפת wrapper עם שם זהה לזה של הכלל. הסקריפט של מעטפת ה-wrapper משתמש בנתיב מחלקה שכולל, בין היתר, קובץ צנצנת לכל ספרייה שבה הקובץ הבינארי תלוי. כשמריצים את סקריפט המעטפת של ה-wrapper, כל משתנה סביבה JAVABIN שאינו ריק יקבל עדיפות על פני הגרסה שצוינה באמצעות הדגל --java_runtime_version של Bazel.

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

יעדי פלט משתמעים

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

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

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

    אם ביעד צוין מאפיין מרכז האפליקציות, אז במקום להיות קובץ JAR רגיל, הקובץ _deploy.jar יהיה קובץ בינארי מקורי. ההגדרה הזו תכלול את מרכז האפליקציות וגם את כל יחסי התלות המקומיים (C++ ) של הכלל, כולם מקושרים לקובץ בינארי סטטי. הבייטים של קובץ ה- הצ'אר עצמו יתווספו לאותו קובץ בינארי מקורי, וכך ייווצר 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

שם; שדה חובה

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


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

רשימת תוויות. ברירת המחדל היא []

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

רשימת תוויות. ברירת המחדל היא []

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

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

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

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

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

resources

רשימת תוויות. ברירת המחדל היא []

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

אם צוינו משאבים, הם יקובצו במאגר יחד עם הקבצים הרגילים של .class שנוצרים על ידי הידור. מיקום המשאבים בתוך קובץ המאגר נקבע לפי מבנה הפרויקט. קודם כל, מערכת Bazel מחפשת את הפריסה הסטנדרטית של הספרייה של Maven, (ספריית "src" ואחריה נכדה של ספריית "resources". אם הוא לא נמצא, מערכת Bazel מחפשת את הספרייה העליונה בשם 'Java' או 'Javatests' (כך, לדוגמה, אם משאב נמצא ב-<workspace root>/x/java/y/java/z, הנתיב של המשאב יהיה y/java/z. אי אפשר לשנות את היוריסטיקה הזאת, אבל עם זאת, אפשר להשתמש במאפיין resource_strip_prefix כדי לציין ספרייה חלופית ספציפית לקובצי משאבים.

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

classpath_resources

רשימת תוויות. ברירת המחדל היא []

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

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

create_executable

ערך בוליאני; nonconfigurable; ברירת המחדל היא True

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

רשימת תוויות. ברירת המחדל היא []

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

רשימת מחרוזות. ברירת המחדל היא []

רשימת שורות שצריך להוסיף לקובץ META-INF/manifest.mf, שנוצרה עבור היעד *_deploy.jar. התכנים של המאפיין לא כפופים להחלפה "Make variable" (יצירת משתנה).
javacopts

רשימת מחרוזות. ברירת המחדל היא []

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

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

jvm_flags

רשימת מחרוזות. ברירת המחדל היא []

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

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

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

launcher

תווית; ברירת המחדל היא None

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

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

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

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

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

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

main_class

מחרוזת; ברירת המחדל היא ""

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

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

plugins

רשימת תוויות. ברירת המחדל היא []

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

רשימת תוויות. ברירת המחדל היא []

הוצא משימוש: צריך להשתמש במקום זאת בפונקציות Java_Import ו-deps או runtime_deps.
resource_strip_prefix

מחרוזת; ברירת המחדל היא ""

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

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

runtime_deps

רשימת תוויות. ברירת המחדל היא []

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

מספר שלם. ברירת המחדל היא -1

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

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

use_launcher

ערך בוליאני. ברירת המחדל היא True

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

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

use_testrunner

ערך בוליאני. ברירת המחדל היא 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, 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

רשימת תוויות; חובה

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

ערך בוליאני. ברירת המחדל היא False

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

רשימת תוויות. ברירת המחדל היא []

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

רשימת תוויות. ברירת המחדל היא []

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

תווית; ברירת המחדל היא None

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

java_library

הצגת מקור הכלל
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: ארכיון שמכיל את המקורות ("מאגר מקור").

ארגומנטים

מאפיינים
name

שם; שדה חובה

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

deps

רשימת תוויות. ברירת המחדל היא []

רשימת הספריות שצריך לקשר לספרייה הזו. תוכלו לקרוא הערות כלליות על deps בקטע מאפיינים אופייניים שמוגדרים על ידי רוב כללי ה-build.

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

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

srcs

רשימת תוויות. ברירת המחדל היא []

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

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

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

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

קובצי מקור מסוג .properties יטופלו כמשאבים.

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

הארגומנט הזה נדרש כמעט תמיד, אלא אם מציינים את הארגומנט runtime_deps.

data

רשימת תוויות. ברירת המחדל היא []

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

כשיוצרים קובץ java_library, מערכת Bazel לא שומרת את הקבצים האלה בשום מקום. אם קובצי data נוצרו, מערכת Bazel יוצרת אותם. כשיוצרים בדיקה שתלויה בעותק הזה של java_library Bazel, או מקשרת את קובצי data לאזור של קובצי ההרצה.

resources

רשימת תוויות. ברירת המחדל היא []

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

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

אם מציינים משאבים, הם יקובצו במאגר יחד עם קובצי .class הרגילים שנוצרים על ידי הידור. מיקום המשאבים בתוך קובץ המאגר נקבע לפי מבנה הפרויקט. קודם כל, ב-Bazel מחפשים את הפריסה הסטנדרטית של הספרייה של Maven (ספריית ה-src, ואחריה נכדה של ספריית המשאבים). אם הוא לא נמצא, 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 רגיל (שלא מיוצא).

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

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

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

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

javabuilder_jvm_flags

רשימת מחרוזות. ברירת המחדל היא []

API מוגבל, לא להשתמש!
javacopts

רשימת מחרוזות. ברירת המחדל היא []

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

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

ערך בוליאני. ברירת המחדל היא False

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

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

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

plugins

רשימת תוויות. ברירת המחדל היא []

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

רשימת תוויות. ברירת המחדל היא []

קבצים שישמשו כמפרט ProGuard. בסעיפים האלה מתוארת קבוצת המפרטים שישמשו את ProGuard. אם תגדירו אותם, הם יתווספו לכל יעד של android_binary בהתאם לספרייה הזו. הקבצים הכלולים כאן צריכים להכיל רק כללים אידמפוטנטיים, כלומר -dontnote, -dontwarn, assumeno לוואי, וכללים שמתחילים ב-keep. אפשרויות אחרות יכולות להופיע רק ב-proGuard_spec של android_binary, כדי להבטיח מיזוגים לא טאוטולוגיים.
resource_strip_prefix

מחרוזת; ברירת המחדל היא ""

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

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

runtime_deps

רשימת תוויות. ברירת המחדל היא []

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

java_lite_proto_library

הצגת מקור הכלל
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 יוצר קוד Java מ-.proto קבצים.

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.

java_proto_library

הצגת מקור הכלל
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 יוצר קוד Java מ-.proto קבצים.

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.

java_test

הצגת מקור הכלל
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() יוצר בדיקת Java. בדיקה היא wrapper בינארי סביב קוד הבדיקה. השיטה הראשית של מפעיל הבדיקה מופעלת במקום הידור של המחלקה הראשית.

יעדי פלט משתמעים

  • name.jar: ארכיון Java.
  • name_deploy.jar: ארכיון Java שמתאים לפריסה. (נוצר רק אם מבקשים במפורש). לפרטים נוספים, אפשר לעיין בתיאור של הפלט 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 בקטע מאפיינים אופייניים שמוגדרים על ידי רוב כללי ה-build.
srcs

רשימת תוויות. ברירת המחדל היא []

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

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

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

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

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

data

רשימת תוויות. ברירת המחדל היא []

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

רשימת תוויות. ברירת המחדל היא []

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

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

אם מציינים משאבים, הם יקובצו במאגר יחד עם קובצי .class הרגילים שנוצרים על ידי הידור. מיקום המשאבים בתוך קובץ המאגר נקבע לפי מבנה הפרויקט. קודם כל, ב-Bazel מחפשים את הפריסה הסטנדרטית של הספרייה של Maven (ספריית ה-src, ואחריה נכדה של ספריית המשאבים). אם הוא לא נמצא, 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

רשימת תוויות. ברירת המחדל היא []

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

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

create_executable

ערך בוליאני. ברירת המחדל היא True

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

רשימת מחרוזות. ברירת המחדל היא []

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

רשימת מחרוזות. ברירת המחדל היא []

אפשרויות מהדר נוסף לקובץ הבינארי הזה. בכפוף להחלפה של "Make variable" וליצירת אסימונים של מעטפת Bourne.

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

jvm_flags

רשימת מחרוזות. ברירת המחדל היא []

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

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

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

launcher

תווית; ברירת המחדל היא None

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

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

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

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

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

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

main_class

מחרוזת; ברירת המחדל היא ""

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

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

ערך בוליאני. ברירת המחדל היא False

plugins

רשימת תוויות. ברירת המחדל היא []

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

מחרוזת; ברירת המחדל היא ""

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

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

runtime_deps

רשימת תוויות. ברירת המחדל היא []

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

מספר שלם. ברירת המחדל היא 0

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

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

test_class

מחרוזת; ברירת המחדל היא ""

מחלקה 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

ערך בוליאני. ברירת המחדל היא True

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

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

use_testrunner

ערך בוליאני. ברירת המחדל היא 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, 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

הצגת מקור הכלל
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 מגדיר יישומי פלאגין עבור מהדר Java שמופעל על ידי Bazel. בשלב זה, יישומי הפלאגין היחידים שנתמכים הם מעבדי הערות. כלל java_library או java_binary יכול להפעיל יישומי פלאגין על ידי ביצוע הפעולה הזו באמצעות המאפיין plugins. באמצעות exported_plugins, java_library יכול גם לייצא באופן אוטומטי יישומי פלאגין לספריות שתלויות בהן באופן ישיר.

יעדי פלט משתמעים

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

הארגומנטים זהים ל-java_library, מלבד הוספת הארגומנט processor_class.

ארגומנטים

מאפיינים
name

שם; שדה חובה

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

deps

רשימת תוויות. ברירת המחדל היא []

רשימת הספריות שצריך לקשר לספרייה הזו. תוכלו לקרוא הערות כלליות על deps בקטע מאפיינים אופייניים שמוגדרים על ידי רוב כללי ה-build.

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

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

srcs

רשימת תוויות. ברירת המחדל היא []

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

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

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

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

קובצי מקור מסוג .properties יטופלו כמשאבים.

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

הארגומנט הזה נדרש כמעט תמיד, אלא אם מציינים את הארגומנט runtime_deps.

data

רשימת תוויות. ברירת המחדל היא []

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

כשיוצרים קובץ java_library, מערכת Bazel לא שומרת את הקבצים האלה בשום מקום. אם קובצי data נוצרו, מערכת Bazel יוצרת אותם. כשיוצרים בדיקה שתלויה בעותק הזה של java_library Bazel, או מקשרת את קובצי data לאזור של קובצי ההרצה.

resources

רשימת תוויות. ברירת המחדל היא []

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

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

אם מציינים משאבים, הם יקובצו במאגר יחד עם קובצי .class הרגילים שנוצרים על ידי הידור. מיקום המשאבים בתוך קובץ המאגר נקבע לפי מבנה הפרויקט. קודם כל, ב-Bazel מחפשים את הפריסה הסטנדרטית של הספרייה של Maven (ספריית ה-src, ואחריה נכדה של ספריית המשאבים). אם הוא לא נמצא, 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_compilation מופעלת.

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

javabuilder_jvm_flags

רשימת מחרוזות. ברירת המחדל היא []

API מוגבל, לא להשתמש!
javacopts

רשימת מחרוזות. ברירת המחדל היא []

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

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

ערך בוליאני. ברירת המחדל היא False

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

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

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

output_licenses

רשימת מחרוזות. ברירת המחדל היא []

plugins

רשימת תוויות. ברירת המחדל היא []

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

מחרוזת; ברירת המחדל היא ""

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

רשימת תוויות. ברירת המחדל היא []

קבצים שישמשו כמפרט ProGuard. בסעיפים האלה מתוארת קבוצת המפרטים שישמשו את ProGuard. אם תגדירו אותם, הם יתווספו לכל יעד של android_binary בהתאם לספרייה הזו. הקבצים הכלולים כאן צריכים להכיל רק כללים אידמפוטנטיים, כלומר -dontnote, -dontwarn, assumeno לוואי, וכללים שמתחילים ב-keep. אפשרויות אחרות יכולות להופיע רק ב-proGuard_spec של android_binary, כדי להבטיח מיזוגים לא טאוטולוגיים.
resource_strip_prefix

מחרוזת; ברירת המחדל היא ""

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

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

java_runtime

הצגת מקור הכלל
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

ארכיון CDS המוגדר כברירת מחדל עבור java_runtime הרמטי. כשמפעילים את ההרמטיות ליעד java_binary, ואם היעד לא מספק ארכיון CDS משלו על ידי ציון המאפיין classlist, תקליטור ה-CDS שמוגדר כברירת מחדל java_runtime נארז ב-JAR הפריסה הרמטית.
hermetic_srcs

רשימת תוויות. ברירת המחדל היא []

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

רשימת תוויות. ברירת המחדל היא []

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

תווית; ברירת המחדל היא None

הנתיב לקובץ ההפעלה של Java.
java_home

מחרוזת; ברירת המחדל היא ""

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

תווית; ברירת המחדל היא None

קובץ lib/ct.sym הדרוש להידור עם --release. אם לא מציינים שום דבר ויש רק קובץ אחד ב-srcs שהנתיב שלו מסתיים ב-/lib/ct.sym, ייעשה שימוש בקובץ הזה.
lib_modules

תווית; ברירת המחדל היא None

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

רשימת מחרוזות. ברירת המחדל היא []

version

מספר שלם. ברירת המחדל היא 0

גרסת התכונה של סביבת זמן הריצה של Java. כלומר, המספר השלם שהוחזר על ידי Runtime.version().feature().

java_toolchain

הצגת מקור הכלל
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_toolchain. בדרך כלל לא כדאי לכתוב כללים כאלה, אלא אם רוצים לכוונן את מהדר ה-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.
android_lint_jvm_opts

רשימת מחרוזות. ברירת המחדל היא []

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

רשימת מחרוזות. ברירת המחדל היא []

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

רשימת תוויות. ברירת המחדל היא []

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

תווית; ברירת המחדל היא None

תווית של גרסת ההרצה של Androidlint, אם יש.
bootclasspath

רשימת תוויות. ברירת המחדל היא []

הערכים של נתיב האתחול של יעד Java. תואם לסימון -bootclasspath של Javac.
compatible_javacopts

null; default is {}

API פנימי, לא להשתמש!
deps_checker

תווית; ברירת המחדל היא None

תווית של צנצנת הפריסה של ImportDepsChecker.
forcibly_disable_header_compilation

ערך בוליאני. ברירת המחדל היא False

שינוי של --Java_header_compilation לצורך השבתה של הידור הכותרת בפלטפורמות שלא תומכות באפשרות הזו, למשל JDK 7 Bazel.
genclass

תווית; ברירת המחדל היא None

תווית של צנצנת הפריסה של GenClass.
header_compiler

תווית; ברירת המחדל היא None

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

רשימת מחרוזות. ברירת המחדל היא []

API פנימי, לא להשתמש!
header_compiler_direct

תווית; ברירת המחדל היא None

תווית אופציונלית של מהדר הכותרת לשימוש בפעולות ישירות של מחלקה (classpath) שלא כוללות מעבדי הערות שיוצרות API.

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

ijar

תווית; ברירת המחדל היא None

תווית של קובץ ההפעלה ijar.
jacocorunner

תווית; ברירת המחדל היא None

תווית של צנצנת הפריסה של JacocoCoverageRunner.
java_runtime

תווית; ברירת המחדל היא None

ערך Java_runtime לשימוש עם שרשרת הכלים הזו. ברירת המחדל של ההגדרה היא Java_runtime בהגדרת הביצוע.
javabuilder

תווית; ברירת המחדל היא None

התווית של צנצנת הפריסה של JavaBuilder.
javabuilder_data

רשימת תוויות. ברירת המחדל היא []

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

רשימת מחרוזות. ברירת המחדל היא []

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

ערך בוליאני. ברירת המחדל היא True

הערך הוא True אם JavaBuilder תומך בהרצה כ-Multix persistent worker, ו-FALSE אם לא.
javac_supports_worker_cancellation

ערך בוליאני. ברירת המחדל היא True

True אם JavaBuilder תומך בביטול של עובדים קבועים, ו-FALSE אם לא.
javac_supports_worker_multiplex_sandboxing

ערך בוליאני. ברירת המחדל היא False

הערך הוא True אם JavaBuilder תומך בהפעלה כ-worker עם מספר מעבדי Multiplex באמצעות הרצה בארגז חול (sandboxing), אבל מקבל את הערך False אם אין אפשרות כזו.
javac_supports_workers

ערך בוליאני. ברירת המחדל היא True

True אם JavaBuilder תומך בהרצה כעובד מתמיד, ו-FALSE אם לא.
javacopts

רשימת מחרוזות. ברירת המחדל היא []

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

תווית; ברירת המחדל היא None

ניסיוני, לא להשתמש!
jspecify_javacopts

רשימת מחרוזות. ברירת המחדל היא []

ניסיוני, לא להשתמש!
jspecify_packages

רשימת תוויות. ברירת המחדל היא []

ניסיוני, לא להשתמש!
jspecify_processor

תווית; ברירת המחדל היא None

ניסיוני, לא להשתמש!
jspecify_processor_class

מחרוזת; ברירת המחדל היא ""

ניסיוני, לא להשתמש!
jspecify_stubs

רשימת תוויות. ברירת המחדל היא []

ניסיוני, לא להשתמש!
jvm_opts

רשימת מחרוזות. ברירת המחדל היא []

רשימת הארגומנטים של ה-JVM בעת הפעלה של מהדר Java. תוכלו להיעזר במסמכי התיעוד של המכונה הווירטואלית של 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.
source_version

מחרוזת; ברירת המחדל היא ""

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

מחרוזת; ברירת המחדל היא ""

גרסת היעד של Java (למשל, '6' או '7'). היא מציינת את סביבת זמן הריצה של Java שהמחלקה צריכה לבנות.
timezone_data

תווית; ברירת המחדל היא None

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

רשימת תוויות. ברירת המחדל היא []

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

רשימת תוויות. ברירת המחדל היא []

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

רשימת מחרוזות. ברירת המחדל היא []

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

רשימת מחרוזות. ברירת המחדל היא []

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