BazelCon 2022 16-17 নভেম্বর নিউ ইয়র্ক এবং অনলাইনে আসছে।
নিবন্ধন আজ!

জাভা নিয়ম

সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।

নিয়ম

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)

একটি জাভা আর্কাইভ ("জার ফাইল") তৈরি করে, পাশাপাশি নিয়মের মতো একই নামের একটি র‍্যাপার শেল স্ক্রিপ্ট তৈরি করে৷ র্যাপার শেল স্ক্রিপ্ট একটি ক্লাসপাথ ব্যবহার করে যার মধ্যে অন্যান্য জিনিসের মধ্যে, প্রতিটি লাইব্রেরির জন্য একটি জার ফাইল রয়েছে যার উপর বাইনারি নির্ভর করে।

মোড়ক স্ক্রিপ্ট বেশ কয়েকটি অনন্য পতাকা গ্রহণ করে। র্যাপার দ্বারা গৃহীত কনফিগারযোগ্য পতাকা এবং পরিবেশ ভেরিয়েবলের তালিকার জন্য //src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt দেখুন।

অন্তর্নিহিত আউটপুট লক্ষ্য

  • name .jar : একটি জাভা সংরক্ষণাগার, যাতে ক্লাস ফাইল এবং বাইনারির সরাসরি নির্ভরতার সাথে সম্পর্কিত অন্যান্য সংস্থান রয়েছে।
  • name -src.jar : একটি আর্কাইভ যেখানে উৎস রয়েছে ("সোর্স জার")।
  • name _deploy.jar : একটি জাভা সংরক্ষণাগার স্থাপনের জন্য উপযুক্ত (শুধুমাত্র যদি স্পষ্টভাবে অনুরোধ করা হয়)।

    আপনার নিয়মের জন্য < name >_deploy.jar টার্গেট তৈরি করা একটি ম্যানিফেস্ট সহ একটি স্বয়ংসম্পূর্ণ জার ফাইল তৈরি করে যা এটিকে java -jar কমান্ড বা wrapper স্ক্রিপ্টের --singlejar বিকল্পের সাথে চালানোর অনুমতি দেয়। র্যাপার স্ক্রিপ্ট ব্যবহার করা java -jar এর জন্য পছন্দের কারণ এটি JVM ফ্ল্যাগ এবং নেটিভ লাইব্রেরি লোড করার বিকল্পগুলিও পাস করে।

    ডিপ্লোয় জারটিতে এমন সমস্ত ক্লাস রয়েছে যা একটি ক্লাসলোডার দ্বারা পাওয়া যাবে যেটি বাইনারির র্যাপার স্ক্রিপ্ট থেকে শুরু থেকে শেষ পর্যন্ত ক্লাসপথ অনুসন্ধান করে। এটিতে নির্ভরতার জন্য প্রয়োজনীয় নেটিভ লাইব্রেরিও রয়েছে। রানটাইমে এগুলি স্বয়ংক্রিয়ভাবে JVM-এ লোড হয়।

    যদি আপনার লক্ষ্য একটি লঞ্চার বৈশিষ্ট্য নির্দিষ্ট করে, তাহলে একটি সাধারণ JAR ফাইলের পরিবর্তে, _deploy.jar একটি নেটিভ বাইনারি হবে। এটিতে লঞ্চার এবং আপনার নিয়মের যেকোন নেটিভ (C++) নির্ভরতা থাকবে, সবগুলি একটি স্ট্যাটিক বাইনারিতে সংযুক্ত থাকবে। প্রকৃত জার ফাইলের বাইটগুলি সেই নেটিভ বাইনারিতে যুক্ত করা হবে, যা এক্সিকিউটেবল এবং জাভা কোড উভয়ই সমন্বিত একটি একক বাইনারি ব্লব তৈরি করবে। আপনি ফলস্বরূপ জার ফাইলটি সরাসরি চালাতে পারেন যেমন আপনি যেকোনো নেটিভ বাইনারি চালান।

  • name _deploy-src.jar : টার্গেটের ট্রানজিটিভ ক্লোজার থেকে সংগৃহীত উৎসগুলি সম্বলিত একটি সংরক্ষণাগার। এগুলি deploy.jar এর ক্লাসগুলির সাথে মিলবে যেখানে জারগুলির কোনও মিলিত উত্স জার নেই৷

srcs java_binary একটি deps বৈশিষ্ট্য অনুমোদিত নয়; এই ধরনের নিয়মের জন্য runtime_deps দ্বারা প্রদত্ত একটি main_class প্রয়োজন।

নিম্নলিখিত কোড স্নিপেট একটি সাধারণ ভুল চিত্রিত করে:

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

একটি জাভা জারে অন্তর্ভুক্ত করার জন্য ডেটা ফাইলগুলির একটি তালিকা৷

রিসোর্স নির্দিষ্ট করা থাকলে, সেগুলি কম্পাইলেশনের মাধ্যমে উত্পাদিত সাধারণ .class ফাইলগুলির সাথে জারে বান্ডিল করা হবে। জার ফাইলের ভিতরের সংস্থানগুলির অবস্থান প্রকল্পের কাঠামো দ্বারা নির্ধারিত হয়। Bazel প্রথমে Maven এর স্ট্যান্ডার্ড ডিরেক্টরি লেআউটের সন্ধান করে, (একটি "src" ডিরেক্টরির পরে একটি "রিসোর্স" ডিরেক্টরি নাতনি)। যদি এটি না পাওয়া যায়, Bazel তারপর "java" বা "javatests" নামের শীর্ষ ডিরেক্টরির সন্ধান করে (তাই, উদাহরণস্বরূপ, যদি একটি সংস্থান <workspace root>/x/java/y/java/z , এর পাথ রিসোর্সটি হবে y/java/z । এই হিউরিস্টিকটি ওভাররাইড করা যাবে না, তবে, resource_strip_prefix অ্যাট্রিবিউটটি রিসোর্স ফাইলের জন্য একটি নির্দিষ্ট বিকল্প ডিরেক্টরি নির্দিষ্ট করতে ব্যবহার করা যেতে পারে।

রিসোর্স হতে পারে সোর্স ফাইল বা জেনারেট করা ফাইল।

classpath_resources

List of labels ; optional

অন্য কোন উপায় না থাকলে এই বিকল্পটি ব্যবহার করবেন না)

সম্পদের একটি তালিকা যা অবশ্যই জাভা গাছের মূলে অবস্থিত। এই অ্যাট্রিবিউটের একমাত্র উদ্দেশ্য হল তৃতীয়-পক্ষের লাইব্রেরিগুলিকে সমর্থন করা যেগুলির জন্য তাদের সংস্থানগুলিকে ক্লাসপথে ঠিক "myconfig.xml" হিসাবে পাওয়া যেতে হবে। নামস্থান বিরোধের বিপদের কারণে এটি শুধুমাত্র বাইনারিগুলিতে অনুমোদিত এবং লাইব্রেরিতে নয়।

create_executable

Boolean; optional; nonconfigurable ; default is True

বাইনারি এক্সিকিউটেবল কিনা। নন-এক্সিকিউটেবল বাইনারিগুলি ট্রানজিটিভ রানটাইম জাভা নির্ভরতাগুলিকে ডিপ্লোয় জারে সংগ্রহ করে, কিন্তু সরাসরি চালানো যায় না। এই অ্যাট্রিবিউট সেট করা থাকলে কোনো র‍্যাপার স্ক্রিপ্ট তৈরি হয় না। launcher বা main_class এট্রিবিউট সেট করা থাকলে এটি 0 এ সেট করা একটি ত্রুটি।
deploy_env

List of labels ; optional

অন্যান্য java_binary লক্ষ্যগুলির একটি তালিকা যা এই বাইনারির জন্য স্থাপনার পরিবেশ উপস্থাপন করে। একটি প্লাগইন তৈরি করার সময় এই বৈশিষ্ট্যটি সেট করুন যা অন্য java_binary দ্বারা লোড করা হবে।
এই অ্যাট্রিবিউট সেট করার ফলে এই বাইনারিটির রানটাইম ক্লাসপথ (এবং ডিপ্লয় জার) থেকে সমস্ত নির্ভরতা বাদ দেওয়া হয় যা এই বাইনারি এবং deploy_env এ নির্দিষ্ট করা লক্ষ্যগুলির মধ্যে ভাগ করা হয়।
deploy_manifest_lines

List of strings; optional

*_deploy.jar টার্গেটের জন্য তৈরি করা META-INF/manifest.mf ফাইলে যোগ করার জন্য লাইনের একটি তালিকা। এই বৈশিষ্ট্যের বিষয়বস্তু "ভেরিয়েবল তৈরি করুন" প্রতিস্থাপনের বিষয় নয়
javacopts

List of strings; optional

এই লাইব্রেরির জন্য অতিরিক্ত কম্পাইলার অপশন। "ভেরিয়েবল তৈরি করুন" প্রতিস্থাপন এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে।

এই কম্পাইলার বিকল্পগুলি গ্লোবাল কম্পাইলার বিকল্পগুলির পরে javac-এ পাস করা হয়।

jvm_flags

List of strings; optional

এই বাইনারি চালানোর জন্য তৈরি করা র্যাপার স্ক্রিপ্টে এম্বেড করার জন্য পতাকার একটি তালিকা। $(অবস্থান) এবং "মেক ভেরিয়েবল" প্রতিস্থাপন, এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে

একটি জাভা বাইনারির জন্য র‍্যাপার স্ক্রিপ্টে একটি CLASSPATH সংজ্ঞা রয়েছে (সমস্ত নির্ভরশীল জার খুঁজে বের করার জন্য) এবং সঠিক জাভা দোভাষীকে আহ্বান করে। র‍্যাপার স্ক্রিপ্ট দ্বারা উত্পন্ন কমান্ড লাইনে একটি "$@" দ্বারা অনুসরণ করা প্রধান শ্রেণীর নাম অন্তর্ভুক্ত থাকে যাতে আপনি ক্লাসের নামের পরে অন্যান্য আর্গুমেন্টগুলি পাস করতে পারেন। যাইহোক, JVM দ্বারা পার্স করার উদ্দেশ্যে আর্গুমেন্টগুলি অবশ্যই কমান্ড লাইনে ক্লাসের নামের আগে নির্দিষ্ট করতে হবে। ক্লাসের নাম তালিকাভুক্ত হওয়ার আগে jvm_flags এর বিষয়বস্তু র্যাপার স্ক্রিপ্টে যোগ করা হয়।

মনে রাখবেন যে এই বৈশিষ্ট্যটি *_deploy.jar আউটপুটগুলিতে কোন প্রভাব ফেলে না

launcher

Label ; optional

একটি বাইনারি নির্দিষ্ট করুন যা JDK এর সাথে অন্তর্ভুক্ত সাধারণ bin/java প্রোগ্রামের পরিবর্তে আপনার জাভা প্রোগ্রাম চালানোর জন্য ব্যবহার করা হবে। লক্ষ্য অবশ্যই একটি cc_binary হতে হবে। যেকোন cc_binary যা Java Invocation API প্রয়োগ করে এই বৈশিষ্ট্যের জন্য একটি মান হিসাবে নির্দিষ্ট করা যেতে পারে।

ডিফল্টরূপে, Bazel সাধারণ JDK লঞ্চার (bin/java বা java.exe) ব্যবহার করবে।

সম্পর্কিত --java_launcher Bazel পতাকা শুধুমাত্র সেই java_binary এবং java_test লক্ষ্যগুলিকে প্রভাবিত করে যেগুলি একটি launcher বৈশিষ্ট্য নির্দিষ্ট করেনি

মনে রাখবেন যে আপনি JDK লঞ্চার বা অন্য লঞ্চার ব্যবহার করছেন কিনা তার উপর নির্ভর করে আপনার নেটিভ (C++, SWIG, JNI) নির্ভরতা ভিন্নভাবে তৈরি হবে:

  • আপনি যদি সাধারণ JDK লঞ্চার (ডিফল্ট) ব্যবহার করেন, তাহলে নেটিভ নির্ভরতাগুলিকে {name}_nativedeps.so নামে একটি শেয়ার্ড লাইব্রেরি হিসেবে তৈরি করা হয়, যেখানে {name} এই java_binary নিয়মের name বৈশিষ্ট্য। এই কনফিগারেশনে লিঙ্কার দ্বারা অব্যবহৃত কোড সরানো হয় না
  • আপনি যদি অন্য কোনো লঞ্চার ব্যবহার করেন, তাহলে নেটিভ (C++) নির্ভরতাগুলি স্ট্যাটিকভাবে {name}_nativedeps নামক একটি বাইনারিতে লিঙ্ক করা হয়, যেখানে {name} এই java_binary নিয়মের name বৈশিষ্ট্য। এই ক্ষেত্রে, লিঙ্কার ফলাফল বাইনারি থেকে অব্যবহৃত বলে মনে করে যেকোন কোড সরিয়ে দেবে, যার মানে শুধুমাত্র JNI-এর মাধ্যমে অ্যাক্সেস করা কোনও C++ কোড লিঙ্ক করা যাবে না যদি না সেই cc_library টার্গেট সর্বদা লিঙ্ক alwayslink = 1 নির্দিষ্ট করে।

ডিফল্ট JDK লঞ্চার ছাড়া অন্য কোনো লঞ্চার ব্যবহার করার সময়, *_deploy.jar আউটপুটের বিন্যাস পরিবর্তিত হয়। বিস্তারিত জানার জন্য প্রধান java_binary ডক্স দেখুন।

main_class

String; optional

এন্ট্রি পয়েন্ট হিসাবে ব্যবহার করার জন্য main() পদ্ধতি সহ ক্লাসের নাম। যদি একটি নিয়ম এই বিকল্পটি ব্যবহার করে, তাহলে এটির জন্য srcs=[...] তালিকার প্রয়োজন নেই। সুতরাং, এই অ্যাট্রিবিউটের সাহায্যে একজন জাভা লাইব্রেরি থেকে একটি এক্সিকিউটেবল তৈরি করতে পারে যাতে ইতিমধ্যে এক বা একাধিক main() পদ্ধতি রয়েছে।

এই বৈশিষ্ট্যের মান একটি শ্রেণীর নাম, একটি উৎস ফাইল নয়। ক্লাসটি রানটাইমে উপলব্ধ হতে হবে: এটি এই নিয়ম দ্বারা সংকলিত হতে পারে ( srcs থেকে) বা সরাসরি বা ট্রানজিটিভ নির্ভরতা ( runtime_deps বা deps মাধ্যমে) দ্বারা সরবরাহ করা যেতে পারে। ক্লাস অনুপলব্ধ হলে, বাইনারি রানটাইমে ব্যর্থ হবে; বিল্ড-টাইম চেক নেই।

plugins

List of labels ; optional

কম্পাইল-টাইমে চালানোর জন্য জাভা কম্পাইলার প্লাগইন। যখনই এই নিয়মটি তৈরি করা হবে তখন এই বৈশিষ্ট্যটিতে নির্দিষ্ট করা প্রতিটি java_plugin চালানো হবে৷ একটি লাইব্রেরি exported_plugins ব্যবহার করে এমন নির্ভরতা থেকে প্লাগইনগুলিও উত্তরাধিকার সূত্রে পেতে পারে। প্লাগইন দ্বারা উত্পন্ন সম্পদ এই নিয়মের ফলে জার মধ্যে অন্তর্ভুক্ত করা হবে.
resource_jars

List of labels ; optional

অপ্রচলিত: পরিবর্তে java_import এবং deps বা runtime_deps ব্যবহার করুন।
resource_strip_prefix

String; optional

জাভা রিসোর্স থেকে স্ট্রিপ করার জন্য পাথ প্রিফিক্স।

নির্দিষ্ট করা থাকলে, এই পাথ উপসর্গটি resources অ্যাট্রিবিউটের প্রতিটি ফাইল থেকে ছিনিয়ে নেওয়া হয়। এই ডিরেক্টরির অধীনে না থাকা একটি সংস্থান ফাইলের জন্য এটি একটি ত্রুটি। যদি নির্দিষ্ট না করা হয় (ডিফল্ট), রিসোর্স ফাইলের পাথ সোর্স ফাইলের জাভা প্যাকেজের মতো একই যুক্তি অনুসারে নির্ধারিত হয়। উদাহরণস্বরূপ, stuff/java/foo/bar/a.txt এ একটি উৎস ফাইল foo/bar/ foo/bar/a.txt এ অবস্থিত হবে।

runtime_deps

List of labels ; optional

লাইব্রেরিগুলি শুধুমাত্র রানটাইমে চূড়ান্ত বাইনারি বা পরীক্ষার জন্য উপলব্ধ করতে। সাধারণ deps মতো, এগুলি রানটাইম ক্লাসপথে প্রদর্শিত হবে, কিন্তু তাদের বিপরীতে, কম্পাইল-টাইম ক্লাসপথে নয়। শুধুমাত্র রানটাইমে প্রয়োজনীয় নির্ভরতা এখানে তালিকাভুক্ত করা উচিত। নির্ভরতা-বিশ্লেষণ সরঞ্জামের লক্ষ্যগুলি উপেক্ষা করা উচিত যা runtime_deps এবং deps উভয় ক্ষেত্রেই প্রদর্শিত হয়।
stamp

Integer; optional; default is -1

বাইনারিতে বিল্ড তথ্য এনকোড করা হবে কিনা। সম্ভাব্য মান:
  • stamp = 1 : সর্বদা বিল্ড তথ্যকে বাইনারিতে স্ট্যাম্প করুন, এমনকি --nostampএই সেটিংটি এড়ানো উচিত , কারণ এটি সম্ভাব্যভাবে বাইনারির জন্য দূরবর্তী ক্যাশিং এবং এর উপর নির্ভরশীল যেকোনো ডাউনস্ট্রিম অ্যাকশনকে মেরে ফেলে।
  • stamp = 0 : সর্বদা ধ্রুবক মান দ্বারা বিল্ড তথ্য প্রতিস্থাপন করুন। এটি ভাল বিল্ড ফলাফল ক্যাশিং দেয়।
  • stamp = -1 : বিল্ড তথ্যের এম্বেডিং --[no]stamp পতাকা দ্বারা নিয়ন্ত্রিত হয়।

স্ট্যাম্পযুক্ত বাইনারিগুলি পুনর্নির্মাণ করা হয় না যদি না তাদের নির্ভরতা পরিবর্তন হয়।

use_launcher

Boolean; optional; default is True

বাইনারি একটি কাস্টম লঞ্চার ব্যবহার করা উচিত কিনা।

যদি এই অ্যাট্রিবিউটটি মিথ্যাতে সেট করা থাকে, তাহলে লঞ্চার অ্যাট্রিবিউট এবং সম্পর্কিত --java_launcher পতাকা এই টার্গেটের জন্য উপেক্ষা করা হবে।

use_testrunner

Boolean; optional; default is False

একটি জাভা প্রোগ্রামের প্রধান এন্ট্রি পয়েন্ট হিসাবে টেস্ট রানার (ডিফল্টরূপে com.google.testing.junit.runner.BazelTestRunner ) ক্লাসটি ব্যবহার করুন এবং bazel.test_suite সিস্টেম সম্পত্তির মান হিসাবে টেস্ট রানারকে টেস্ট ক্লাস প্রদান করুন৷ আপনি ডিফল্ট আচরণকে ওভাররাইড করতে এটি ব্যবহার করতে পারেন, যা java_binary java_test জন্য এটি ব্যবহার না করা। এটা অসম্ভাব্য যে আপনি এটি করতে চান. একটি ব্যবহার হল 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)

এই নিয়মটি java_library এবং java_binary নিয়মের জন্য লাইব্রেরি হিসাবে precompiled .jar ফাইল ব্যবহার করার অনুমতি দেয়।

উদাহরণ

    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

অন্যান্য লাইব্রেরির তালিকা টার্গেটের সাথে সংযুক্ত করতে হবে। java_library.deps দেখুন।
constraints

List of strings; optional; nonconfigurable

জাভা লাইব্রেরি হিসাবে এই নিয়মের উপর আরোপিত অতিরিক্ত সীমাবদ্ধতা।
exports

List of labels ; optional

এই নিয়ম ব্যবহারকারীদের জন্য উপলব্ধ করা লক্ষ্য. java_library.exports দেখুন।
jars

List of labels ; required

জাভা টার্গেটে দেওয়া JAR ফাইলের তালিকা যা এই টার্গেটের উপর নির্ভর করে।

Boolean; optional; default is False

শুধুমাত্র সংকলনের জন্য এই লাইব্রেরিটি ব্যবহার করুন এবং রানটাইমে নয়। কার্যকরী করার সময় রানটাইম পরিবেশ দ্বারা লাইব্রেরি প্রদান করা হলে দরকারী। এই ধরনের লাইব্রেরির উদাহরণ হল IDE প্ল্যাগ-ইনগুলির জন্য IDE APIs বা একটি আদর্শ tools.jar তে চলমান যেকোনো কিছুর জন্য tools.jar।
proguard_specs

List of labels ; optional

Proguard স্পেসিফিকেশন হিসাবে ব্যবহার করা ফাইল. এগুলি Proguard দ্বারা ব্যবহৃত স্পেসিফিকেশনের সেট বর্ণনা করবে। নির্দিষ্ট করা থাকলে, এই লাইব্রেরির উপর নির্ভর করে যেকোন android_binary টার্গেটে সেগুলি যোগ করা হবে। এখানে অন্তর্ভুক্ত ফাইলগুলিতে শুধুমাত্র অদম্য বিধি থাকতে হবে, যেমন -dontnote, -dontwarn, assumenosidefects, এবং নিয়ম যা -keep দিয়ে শুরু হয়। অন্যান্য বিকল্পগুলি শুধুমাত্র android_binary এর proguard_specs-এ উপস্থিত হতে পারে, যাতে অ-টটলজিক্যাল মার্জ নিশ্চিত করা যায়।
runtime_deps

List of labels ; optional

লাইব্রেরিগুলি শুধুমাত্র রানটাইমে চূড়ান্ত বাইনারি বা পরীক্ষার জন্য উপলব্ধ করতে। java_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 ফাইলের সাথে উত্সগুলিকে কম্পাইল করে এবং লিঙ্ক করে।

অন্তর্নিহিত আউটপুট লক্ষ্য

  • lib name .jar : একটি জাভা আর্কাইভ যাতে ক্লাস ফাইল থাকে।
  • lib name -src.jar : একটি আর্কাইভ যেখানে উৎস রয়েছে ("সোর্স জার")।

যুক্তি

গুণাবলী
name

Name ; required

এই লক্ষ্যের জন্য একটি অনন্য নাম।

deps

List of labels ; optional

এই লাইব্রেরিতে লিঙ্ক করার জন্য লাইব্রেরির তালিকা। বেশিরভাগ বিল্ড নিয়ম দ্বারা সংজ্ঞায়িত সাধারণ বৈশিষ্ট্যগুলিতে deps সম্পর্কে সাধারণ মন্তব্যগুলি দেখুন।

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 ফাইলগুলি ফাইল তৈরি করা হয় তবে বেজেল সেগুলি তৈরি করে। এই java_library এর উপর নির্ভর করে এমন একটি পরীক্ষা তৈরি করার সময় Bazel data ফাইলগুলিকে রানফাইল এলাকায় কপি করে বা লিঙ্ক করে।

resources

List of labels ; optional

একটি জাভা জারে অন্তর্ভুক্ত করার জন্য ডেটা ফাইলগুলির একটি তালিকা৷

রিসোর্স নির্দিষ্ট করা থাকলে, সেগুলি কম্পাইলেশনের মাধ্যমে উত্পাদিত সাধারণ .class ফাইলগুলির সাথে জারে বান্ডিল করা হবে। জার ফাইলের ভিতরের সংস্থানগুলির অবস্থান প্রকল্পের কাঠামো দ্বারা নির্ধারিত হয়। Bazel প্রথমে Maven এর স্ট্যান্ডার্ড ডিরেক্টরি লেআউটের সন্ধান করে, (একটি "src" ডিরেক্টরির পরে একটি "রিসোর্স" ডিরেক্টরি নাতনি)। যদি এটি না পাওয়া যায়, Bazel তারপর "java" বা "javatests" নামের শীর্ষ ডিরেক্টরির সন্ধান করে (তাই, উদাহরণস্বরূপ, যদি একটি সংস্থান <workspace root>/x/java/y/java/z , এর পাথ রিসোর্সটি হবে y/java/z । এই হিউরিস্টিকটি ওভাররাইড করা যাবে না, তবে, resource_strip_prefix অ্যাট্রিবিউটটি রিসোর্স ফাইলের জন্য একটি নির্দিষ্ট বিকল্প ডিরেক্টরি নির্দিষ্ট করতে ব্যবহার করা যেতে পারে।

রিসোর্স হতে পারে সোর্স ফাইল বা জেনারেট করা ফাইল।

exported_plugins

List of labels ; optional

এই লাইব্রেরির উপর সরাসরি নির্ভর করে এমন লাইব্রেরিতে রপ্তানি করার জন্য java_plugin এর তালিকা (যেমন টীকা প্রসেসর)।

java_plugin s-এর নির্দিষ্ট তালিকা যেকোন লাইব্রেরিতে প্রয়োগ করা হবে যা সরাসরি এই লাইব্রেরির উপর নির্ভর করে, ঠিক যেন সেই লাইব্রেরিটি plugins এই লেবেলগুলিকে স্পষ্টভাবে ঘোষণা করেছে।

exports

List of labels ; optional

রপ্তানিকৃত লাইব্রেরি।

এখানে নিয়মগুলি তালিকাভুক্ত করা হলে সেগুলিকে পিতামাতার নিয়মগুলিতে উপলব্ধ করা হবে, যেন পিতামাতারা স্পষ্টভাবে এই নিয়মগুলির উপর নির্ভর করে৷ এটি নিয়মিত (অ-রপ্তানিযোগ্য) deps জন্য সত্য নয়।

সারাংশ: একটি নিয়ম X Y- এ কোড অ্যাক্সেস করতে পারে যদি তাদের মধ্যে একটি নির্ভরতা পথ থাকে যা একটি deps প্রান্ত দিয়ে শুরু হয় এবং শূন্য বা তার বেশি exports প্রান্ত দ্বারা অনুসরণ করে। এটা বোঝানোর জন্য কিছু উদাহরণ দেখা যাক।

অনুমান করুন A নির্ভর করে B এর উপর এবং B নির্ভর করে C এর উপর। এই ক্ষেত্রে C হল A-এর একটি ট্রানজিটিভ নির্ভরতা, তাই C-এর উত্স পরিবর্তন করা এবং A পুনর্নির্মাণ করা সবকিছু সঠিকভাবে পুনর্নির্মাণ করবে। তবে A C-তে ক্লাস ব্যবহার করতে সক্ষম হবে না। এটির অনুমতি দেওয়ার জন্য, হয় A কে তার deps C ঘোষণা করতে হবে, অথবা B তার (B এর) মধ্যে C ঘোষণা করে A (এবং A এর উপর নির্ভর করতে পারে) এর জন্য এটি সহজ করতে পারে ) exports বৈশিষ্ট্য।

রপ্তানিকৃত লাইব্রেরি বন্ধ করা সমস্ত সরাসরি অভিভাবক নিয়মে উপলব্ধ। একটু ভিন্ন উদাহরণ নিন: A নির্ভর করে B এর উপর, B নির্ভর করে C এবং D এর উপর, এবং এছাড়াও C রপ্তানি করে কিন্তু D নয়। এখন A এর C-তে অ্যাক্সেস আছে কিন্তু D-এ নয়। এখন, যদি C এবং D কিছু লাইব্রেরি রপ্তানি করে, C' এবং D' যথাক্রমে, A শুধুমাত্র C' অ্যাক্সেস করতে পারে কিন্তু D' নয়।

গুরুত্বপূর্ণ: একটি রপ্তানি নিয়ম একটি নিয়মিত নির্ভরতা নয়। পূর্ববর্তী উদাহরণে আটকে থাকা, যদি B C রপ্তানি করে এবং C ব্যবহার করতে চায়, তবে এটিকে তার নিজস্ব deps তালিকাভুক্ত করতে হবে।

javacopts

List of strings; optional

এই লাইব্রেরির জন্য অতিরিক্ত কম্পাইলার অপশন। "ভেরিয়েবল তৈরি করুন" প্রতিস্থাপন এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে।

এই কম্পাইলার বিকল্পগুলি গ্লোবাল কম্পাইলার বিকল্পগুলির পরে javac-এ পাস করা হয়।

Boolean; optional; default is False

এই লাইব্রেরিটি শুধুমাত্র সংকলনের জন্য ব্যবহার করা উচিত এবং রানটাইমে নয়। কার্যকরী করার সময় রানটাইম পরিবেশ দ্বারা লাইব্রেরি প্রদান করা হলে দরকারী। এই ধরনের লাইব্রেরিগুলির উদাহরণ হল IDE প্ল্যাগ-ইনগুলির জন্য IDE APIs বা একটি আদর্শ tools.jar তে চলমান যেকোনো কিছুর জন্য tools.jar।

নোট করুন যে neverlink = 1 জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন (যেমন, String বা আদিম প্রকারের static final ধ্রুবক) দ্বারা অনুমোদিত সংকলন লক্ষ্যগুলিতে এই লাইব্রেরি থেকে উপাদান ইনলাইন করতে কম্পাইলারকে বাধা দেয় না যা এটির উপর নির্ভর করে। রানটাইম লাইব্রেরি যখন কম্পাইলেশন লাইব্রেরির মতো হয় তখন পছন্দের ব্যবহারের ক্ষেত্রে হয়।

রানটাইম লাইব্রেরি যদি কম্পাইলেশন লাইব্রেরি থেকে আলাদা হয় তবে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে এটি শুধুমাত্র সেই জায়গাগুলিতে আলাদা যেখানে JLS কম্পাইলারকে ইনলাইন করতে নিষেধ করে (এবং এটি অবশ্যই JLS এর ভবিষ্যতের সমস্ত সংস্করণের জন্য রাখা উচিত)৷

plugins

List of labels ; optional

কম্পাইল-টাইমে চালানোর জন্য জাভা কম্পাইলার প্লাগইন। যখনই এই নিয়মটি তৈরি করা হবে তখন এই বৈশিষ্ট্যটিতে নির্দিষ্ট করা প্রতিটি java_plugin চালানো হবে৷ একটি লাইব্রেরি exported_plugins ব্যবহার করে এমন নির্ভরতা থেকে প্লাগইনগুলিও উত্তরাধিকার সূত্রে পেতে পারে। প্লাগইন দ্বারা উত্পন্ন সম্পদ এই নিয়মের ফলে জার মধ্যে অন্তর্ভুক্ত করা হবে.
proguard_specs

List of labels ; optional

Proguard স্পেসিফিকেশন হিসাবে ব্যবহার করা ফাইল. এগুলি Proguard দ্বারা ব্যবহৃত স্পেসিফিকেশনের সেট বর্ণনা করবে। নির্দিষ্ট করা থাকলে, এই লাইব্রেরির উপর নির্ভর করে যেকোন android_binary টার্গেটে সেগুলি যোগ করা হবে। এখানে অন্তর্ভুক্ত ফাইলগুলিতে শুধুমাত্র অদম্য বিধি থাকতে হবে, যেমন -dontnote, -dontwarn, assumenosidefects, এবং নিয়ম যা -keep দিয়ে শুরু হয়। অন্যান্য বিকল্পগুলি শুধুমাত্র android_binary এর proguard_specs-এ উপস্থিত হতে পারে, যাতে অ-টটলজিক্যাল মার্জ নিশ্চিত করা যায়।
resource_jars

List of labels ; optional

অপ্রচলিত: পরিবর্তে java_import এবং deps বা runtime_deps ব্যবহার করুন।
resource_strip_prefix

String; optional

জাভা রিসোর্স থেকে স্ট্রিপ করার জন্য পাথ প্রিফিক্স।

নির্দিষ্ট করা থাকলে, এই পাথ উপসর্গটি resources অ্যাট্রিবিউটের প্রতিটি ফাইল থেকে ছিনিয়ে নেওয়া হয়। এই ডিরেক্টরির অধীনে না থাকা একটি সংস্থান ফাইলের জন্য এটি একটি ত্রুটি। যদি নির্দিষ্ট না করা হয় (ডিফল্ট), রিসোর্স ফাইলের পাথ সোর্স ফাইলের জাভা প্যাকেজের মতো একই যুক্তি অনুসারে নির্ধারিত হয়। উদাহরণস্বরূপ, stuff/java/foo/bar/a.txt এ একটি উৎস ফাইল foo/bar/ 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 .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_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 .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_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() নিয়ম একটি জাভা পরীক্ষা কম্পাইল করে। একটি পরীক্ষা হল আপনার পরীক্ষার কোডের চারপাশে একটি বাইনারি মোড়ক। মূল শ্রেণী সংকলিত হওয়ার পরিবর্তে পরীক্ষার রানার প্রধান পদ্ধতিটি আহ্বান করা হয়।

অন্তর্নিহিত আউটপুট লক্ষ্য

  • name .jar : একটি জাভা আর্কাইভ।
  • name _deploy.jar : একটি জাভা সংরক্ষণাগার স্থাপনের জন্য উপযুক্ত। (শুধুমাত্র যদি স্পষ্টভাবে অনুরোধ করা হয় তবেই নির্মিত।) আরও বিশদ বিবরণের জন্য java_binary থেকে _deploy.jar আউটপুট name _deploy.jar বিবরণ দেখুন।

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

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

একটি জাভা জারে অন্তর্ভুক্ত করার জন্য ডেটা ফাইলগুলির একটি তালিকা৷

রিসোর্স নির্দিষ্ট করা থাকলে, সেগুলি কম্পাইলেশনের মাধ্যমে উত্পাদিত সাধারণ .class ফাইলগুলির সাথে জারে বান্ডিল করা হবে। জার ফাইলের ভিতরের সংস্থানগুলির অবস্থান প্রকল্পের কাঠামো দ্বারা নির্ধারিত হয়। Bazel প্রথমে Maven এর স্ট্যান্ডার্ড ডিরেক্টরি লেআউটের সন্ধান করে, (একটি "src" ডিরেক্টরির পরে একটি "রিসোর্স" ডিরেক্টরি নাতনি)। যদি এটি না পাওয়া যায়, Bazel তারপর "java" বা "javatests" নামের শীর্ষ ডিরেক্টরির সন্ধান করে (তাই, উদাহরণস্বরূপ, যদি একটি সংস্থান <workspace root>/x/java/y/java/z , এর পাথ রিসোর্সটি হবে y/java/z । এই হিউরিস্টিকটি ওভাররাইড করা যাবে না, তবে, resource_strip_prefix অ্যাট্রিবিউটটি রিসোর্স ফাইলের জন্য একটি নির্দিষ্ট বিকল্প ডিরেক্টরি নির্দিষ্ট করতে ব্যবহার করা যেতে পারে।

রিসোর্স হতে পারে সোর্স ফাইল বা জেনারেট করা ফাইল।

classpath_resources

List of labels ; optional

অন্য কোন উপায় না থাকলে এই বিকল্পটি ব্যবহার করবেন না)

সম্পদের একটি তালিকা যা অবশ্যই জাভা গাছের মূলে অবস্থিত। এই অ্যাট্রিবিউটের একমাত্র উদ্দেশ্য হল তৃতীয়-পক্ষের লাইব্রেরিগুলিকে সমর্থন করা যেগুলির জন্য তাদের সংস্থানগুলিকে ক্লাসপথে ঠিক "myconfig.xml" হিসাবে পাওয়া যেতে হবে। নামস্থান বিরোধের বিপদের কারণে এটি শুধুমাত্র বাইনারিগুলিতে অনুমোদিত এবং লাইব্রেরিতে নয়।

create_executable

Boolean; optional; nonconfigurable ; default is True

বাইনারি এক্সিকিউটেবল কিনা। নন-এক্সিকিউটেবল বাইনারিগুলি ট্রানজিটিভ রানটাইম জাভা নির্ভরতাগুলিকে ডিপ্লোয় জারে সংগ্রহ করে, কিন্তু সরাসরি চালানো যায় না। এই অ্যাট্রিবিউট সেট করা থাকলে কোনো র‍্যাপার স্ক্রিপ্ট তৈরি হয় না। launcher বা main_class এট্রিবিউট সেট করা থাকলে এটি 0 এ সেট করা একটি ত্রুটি।
deploy_manifest_lines

List of strings; optional

*_deploy.jar টার্গেটের জন্য তৈরি করা META-INF/manifest.mf ফাইলে যোগ করার জন্য লাইনের একটি তালিকা। এই বৈশিষ্ট্যের বিষয়বস্তু "ভেরিয়েবল তৈরি করুন" প্রতিস্থাপনের বিষয় নয়
javacopts

List of strings; optional

এই লাইব্রেরির জন্য অতিরিক্ত কম্পাইলার অপশন। "ভেরিয়েবল তৈরি করুন" প্রতিস্থাপন এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে।

এই কম্পাইলার বিকল্পগুলি গ্লোবাল কম্পাইলার বিকল্পগুলির পরে javac-এ পাস করা হয়।

jvm_flags

List of strings; optional

এই বাইনারি চালানোর জন্য তৈরি করা র্যাপার স্ক্রিপ্টে এম্বেড করার জন্য পতাকার একটি তালিকা। $(অবস্থান) এবং "মেক ভেরিয়েবল" প্রতিস্থাপন, এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে

একটি জাভা বাইনারির জন্য র‍্যাপার স্ক্রিপ্টে একটি CLASSPATH সংজ্ঞা রয়েছে (সমস্ত নির্ভরশীল জার খুঁজে বের করার জন্য) এবং সঠিক জাভা দোভাষীকে আহ্বান করে। র‍্যাপার স্ক্রিপ্ট দ্বারা উত্পন্ন কমান্ড লাইনে একটি "$@" দ্বারা অনুসরণ করা প্রধান শ্রেণীর নাম অন্তর্ভুক্ত থাকে যাতে আপনি ক্লাসের নামের পরে অন্যান্য আর্গুমেন্টগুলি পাস করতে পারেন। যাইহোক, JVM দ্বারা পার্স করার উদ্দেশ্যে আর্গুমেন্টগুলি অবশ্যই কমান্ড লাইনে ক্লাসের নামের আগে নির্দিষ্ট করতে হবে। ক্লাসের নাম তালিকাভুক্ত হওয়ার আগে jvm_flags এর বিষয়বস্তু র্যাপার স্ক্রিপ্টে যোগ করা হয়।

মনে রাখবেন যে এই বৈশিষ্ট্যটি *_deploy.jar আউটপুটগুলিতে কোন প্রভাব ফেলে না

launcher

Label ; optional

একটি বাইনারি নির্দিষ্ট করুন যা JDK এর সাথে অন্তর্ভুক্ত সাধারণ bin/java প্রোগ্রামের পরিবর্তে আপনার জাভা প্রোগ্রাম চালানোর জন্য ব্যবহার করা হবে। লক্ষ্য অবশ্যই একটি cc_binary হতে হবে। যেকোন cc_binary যা Java Invocation API প্রয়োগ করে এই বৈশিষ্ট্যের জন্য একটি মান হিসাবে নির্দিষ্ট করা যেতে পারে।

ডিফল্টরূপে, Bazel সাধারণ JDK লঞ্চার (bin/java বা java.exe) ব্যবহার করবে।

সম্পর্কিত --java_launcher Bazel পতাকা শুধুমাত্র সেই java_binary এবং java_test লক্ষ্যগুলিকে প্রভাবিত করে যেগুলি একটি launcher বৈশিষ্ট্য নির্দিষ্ট করেনি

মনে রাখবেন যে আপনি JDK লঞ্চার বা অন্য লঞ্চার ব্যবহার করছেন কিনা তার উপর নির্ভর করে আপনার নেটিভ (C++, SWIG, JNI) নির্ভরতা ভিন্নভাবে তৈরি হবে:

  • আপনি যদি সাধারণ JDK লঞ্চার (ডিফল্ট) ব্যবহার করেন, তাহলে নেটিভ নির্ভরতাগুলিকে {name}_nativedeps.so নামে একটি শেয়ার্ড লাইব্রেরি হিসেবে তৈরি করা হয়, যেখানে {name} এই java_binary নিয়মের name বৈশিষ্ট্য। এই কনফিগারেশনে লিঙ্কার দ্বারা অব্যবহৃত কোড সরানো হয় না
  • আপনি যদি অন্য কোনো লঞ্চার ব্যবহার করেন, তাহলে নেটিভ (C++) নির্ভরতাগুলি স্ট্যাটিকভাবে {name}_nativedeps নামক একটি বাইনারিতে লিঙ্ক করা হয়, যেখানে {name} এই java_binary নিয়মের name বৈশিষ্ট্য। এই ক্ষেত্রে, লিঙ্কার ফলাফল বাইনারি থেকে অব্যবহৃত বলে মনে করে যেকোন কোড সরিয়ে দেবে, যার মানে শুধুমাত্র JNI-এর মাধ্যমে অ্যাক্সেস করা কোনও C++ কোড লিঙ্ক করা যাবে না যদি না সেই cc_library টার্গেট সর্বদা লিঙ্ক alwayslink = 1 নির্দিষ্ট করে।

ডিফল্ট JDK লঞ্চার ছাড়া অন্য কোনো লঞ্চার ব্যবহার করার সময়, *_deploy.jar আউটপুটের বিন্যাস পরিবর্তিত হয়। বিস্তারিত জানার জন্য প্রধান java_binary ডক্স দেখুন।

main_class

String; optional

এন্ট্রি পয়েন্ট হিসাবে ব্যবহার করার জন্য main() পদ্ধতি সহ ক্লাসের নাম। যদি একটি নিয়ম এই বিকল্পটি ব্যবহার করে, তাহলে এটির জন্য srcs=[...] তালিকার প্রয়োজন নেই। সুতরাং, এই অ্যাট্রিবিউটের সাহায্যে একজন জাভা লাইব্রেরি থেকে একটি এক্সিকিউটেবল তৈরি করতে পারে যাতে ইতিমধ্যে এক বা একাধিক main() পদ্ধতি রয়েছে।

এই বৈশিষ্ট্যের মান একটি শ্রেণীর নাম, একটি উৎস ফাইল নয়। ক্লাসটি রানটাইমে উপলব্ধ হতে হবে: এটি এই নিয়ম দ্বারা সংকলিত হতে পারে ( srcs থেকে) বা সরাসরি বা ট্রানজিটিভ নির্ভরতা ( runtime_deps বা deps মাধ্যমে) দ্বারা সরবরাহ করা যেতে পারে। ক্লাস অনুপলব্ধ হলে, বাইনারি রানটাইমে ব্যর্থ হবে; বিল্ড-টাইম চেক নেই।

plugins

List of labels ; optional

কম্পাইল-টাইমে চালানোর জন্য জাভা কম্পাইলার প্লাগইন। যখনই এই নিয়মটি তৈরি করা হবে তখন এই বৈশিষ্ট্যটিতে নির্দিষ্ট করা প্রতিটি java_plugin চালানো হবে৷ একটি লাইব্রেরি exported_plugins ব্যবহার করে এমন নির্ভরতা থেকে প্লাগইনগুলিও উত্তরাধিকার সূত্রে পেতে পারে। প্লাগইন দ্বারা উত্পন্ন সম্পদ এই নিয়মের ফলে জার মধ্যে অন্তর্ভুক্ত করা হবে.
resource_jars

List of labels ; optional

অপ্রচলিত: পরিবর্তে java_import এবং deps বা runtime_deps ব্যবহার করুন।
resource_strip_prefix

String; optional

জাভা রিসোর্স থেকে স্ট্রিপ করার জন্য পাথ প্রিফিক্স।

নির্দিষ্ট করা থাকলে, এই পাথ উপসর্গটি resources অ্যাট্রিবিউটের প্রতিটি ফাইল থেকে ছিনিয়ে নেওয়া হয়। এই ডিরেক্টরির অধীনে না থাকা একটি সংস্থান ফাইলের জন্য এটি একটি ত্রুটি। যদি নির্দিষ্ট না করা হয় (ডিফল্ট), রিসোর্স ফাইলের পাথ সোর্স ফাইলের জাভা প্যাকেজের মতো একই যুক্তি অনুসারে নির্ধারিত হয়। উদাহরণস্বরূপ, stuff/java/foo/bar/a.txt এ একটি উৎস ফাইল foo/bar/ foo/bar/a.txt এ অবস্থিত হবে।

runtime_deps

List of labels ; optional

লাইব্রেরিগুলি শুধুমাত্র রানটাইমে চূড়ান্ত বাইনারি বা পরীক্ষার জন্য উপলব্ধ করতে। সাধারণ deps মতো, এগুলি রানটাইম ক্লাসপথে প্রদর্শিত হবে, কিন্তু তাদের বিপরীতে, কম্পাইল-টাইম ক্লাসপথে নয়। শুধুমাত্র রানটাইমে প্রয়োজনীয় নির্ভরতা এখানে তালিকাভুক্ত করা উচিত। নির্ভরতা-বিশ্লেষণ সরঞ্জামের লক্ষ্যগুলি উপেক্ষা করা উচিত যা runtime_deps এবং deps উভয় ক্ষেত্রেই প্রদর্শিত হয়।
stamp

Integer; optional; default is 0

বাইনারিতে বিল্ড তথ্য এনকোড করা হবে কিনা। সম্ভাব্য মান:
  • stamp = 1 : সর্বদা বিল্ড তথ্যকে বাইনারিতে স্ট্যাম্প করুন, এমনকি --nostampএই সেটিংটি এড়ানো উচিত , কারণ এটি সম্ভাব্যভাবে বাইনারির জন্য দূরবর্তী ক্যাশিং এবং এর উপর নির্ভরশীল যেকোনো ডাউনস্ট্রিম অ্যাকশনকে মেরে ফেলে।
  • stamp = 0 : সর্বদা ধ্রুবক মান দ্বারা বিল্ড তথ্য প্রতিস্থাপন করুন। এটি ভাল বিল্ড ফলাফল ক্যাশিং দেয়।
  • stamp = -1 : বিল্ড তথ্যের এম্বেডিং --[no]stamp পতাকা দ্বারা নিয়ন্ত্রিত হয়।

স্ট্যাম্পযুক্ত বাইনারিগুলি পুনর্নির্মাণ করা হয় না যদি না তাদের নির্ভরতা পরিবর্তন হয়।

test_class

String; optional

জাভা ক্লাস টেস্ট রানার দ্বারা লোড করা হবে।

ডিফল্টরূপে, যদি এই আর্গুমেন্টটি সংজ্ঞায়িত না করা হয় তাহলে লিগ্যাসি মোড ব্যবহার করা হয় এবং এর পরিবর্তে টেস্ট আর্গুমেন্ট ব্যবহার করা হয়। প্রথম আর্গুমেন্টে ফলব্যাক না করার জন্য --nolegacy_bazel_java_test পতাকা সেট করুন।

এই বৈশিষ্ট্যটি এই পরীক্ষার দ্বারা চালানোর জন্য একটি জাভা ক্লাসের নাম নির্দিষ্ট করে। এটি সেট করার প্রয়োজন বিরল। যদি এই যুক্তিটি বাদ দেওয়া হয়, তবে এটি লক্ষ্যের name এবং এর উত্স-রুট-রিলেটিভ পাথ ব্যবহার করে অনুমান করা হবে। যদি পরীক্ষাটি একটি পরিচিত উৎস রুটের বাইরে থাকে, তাহলে test_class সেট না থাকলে Bazel একটি ত্রুটি রিপোর্ট করবে।

JUnit3-এর জন্য, পরীক্ষার ক্লাসটি হয় junit.framework.TestCase এর একটি সাবক্লাস হতে হবে অথবা এটিতে একটি পাবলিক স্ট্যাটিক suite() পদ্ধতি থাকতে হবে যা একটি junit.framework.Test (বা Test-এর একটি Test ) প্রদান করে। JUnit4 এর জন্য, ক্লাসটিকে org.junit.runner.RunWith দিয়ে টীকা করতে হবে।

এই বৈশিষ্ট্যটি একই Test ( TestCase , TestSuite , ...) ভাগ করার জন্য বেশ কয়েকটি java_test নিয়মকে অনুমতি দেয়। সাধারণত অতিরিক্ত তথ্য এটিতে প্রেরণ করা হয় (যেমন jvm_flags=['-Dkey=value'] এর মাধ্যমে ) যাতে প্রতিটি ক্ষেত্রে এর আচরণ আলাদা হয়, যেমন পরীক্ষার একটি ভিন্ন উপসেট চালানো। এই বৈশিষ্ট্যটি javatests ট্রির বাইরেও জাভা পরীক্ষার ব্যবহার সক্ষম করে।

use_launcher

Boolean; optional; default is True

বাইনারি একটি কাস্টম লঞ্চার ব্যবহার করা উচিত কিনা।

যদি এই অ্যাট্রিবিউটটি মিথ্যাতে সেট করা থাকে, তাহলে লঞ্চার অ্যাট্রিবিউট এবং সম্পর্কিত --java_launcher পতাকা এই টার্গেটের জন্য উপেক্ষা করা হবে।

use_testrunner

Boolean; optional; default is True

একটি জাভা প্রোগ্রামের প্রধান এন্ট্রি পয়েন্ট হিসাবে টেস্ট রানার (ডিফল্টরূপে com.google.testing.junit.runner.BazelTestRunner ) ক্লাসটি ব্যবহার করুন এবং bazel.test_suite সিস্টেম সম্পত্তির মান হিসাবে টেস্ট রানারকে টেস্ট ক্লাস প্রদান করুন৷ আপনি ডিফল্ট আচরণকে ওভাররাইড করতে এটি ব্যবহার করতে পারেন, যা java_binary java_test জন্য এটি ব্যবহার না করা। এটা অসম্ভাব্য যে আপনি এটি করতে চান. একটি ব্যবহার হল 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

জাভা কম্পাইলার পতাকা।
packages

List of labels ; optional

package_group সেটটিতে কনফিগারেশন প্রয়োগ করা উচিত।

java_plugin

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 দ্বারা চালিত জাভা কম্পাইলারের জন্য প্লাগইন সংজ্ঞায়িত করে। এই মুহুর্তে, শুধুমাত্র সমর্থিত ধরণের প্লাগইন হল টীকা প্রসেসর। A java_library or java_binary rule can run plugins by depending on them via the plugins attribute. A java_library can also automatically export plugins to libraries that directly depend on it using exported_plugins .

Implicit output targets

  • libname .jar : A Java archive.

Arguments are identical to java_library , except for the addition of the processor_class argument.

Arguments

Attributes
name

Name ; required

A unique name for this target.

deps

List of labels ; optional

The list of libraries to link into this library. See general comments about deps at Typical attributes defined by most build rules .

The jars built by java_library rules listed in deps will be on the compile-time classpath of this rule. Furthermore the transitive closure of their deps , runtime_deps and exports will be on the runtime classpath.

By contrast, targets in the data attribute are included in the runfiles but on neither the compile-time nor runtime classpath.

srcs

List of labels ; optional

The list of source files that are processed to create the target. This attribute is almost always required; see exceptions below.

Source files of type .java are compiled. In case of generated .java files it is generally advisable to put the generating rule's name here instead of the name of the file itself. This not only improves readability but makes the rule more resilient to future changes: if the generating rule generates different files in the future, you only need to fix one place: the outs of the generating rule. You should not list the generating rule in deps because it is a no-op.

Source files of type .srcjar are unpacked and compiled. (This is useful if you need to generate a set of .java files with a genrule.)

Rules: if the rule (typically genrule or filegroup ) generates any of the files listed above, they will be used the same way as described for source files.

This argument is almost always required, except if a main_class attribute specifies a class on the runtime classpath or you specify the runtime_deps argument.

data

List of labels ; optional

The list of files needed by this library at runtime. See general comments about data at Typical attributes defined by most build rules .

When building a java_library , Bazel doesn't put these files anywhere; if the data files are generated files then Bazel generates them. When building a test that depends on this java_library Bazel copies or links the data files into the runfiles area.

resources

List of labels ; optional

A list of data files to include in a Java jar.

If resources are specified, they will be bundled in the jar along with the usual .class files produced by compilation. The location of the resources inside of the jar file is determined by the project structure. Bazel first looks for Maven's standard directory layout , (a "src" directory followed by a "resources" directory grandchild). If that is not found, Bazel then looks for the topmost directory named "java" or "javatests" (so, for example, if a resource is at <workspace root>/x/java/y/java/z , the path of the resource will be y/java/z . This heuristic cannot be overridden, however, the resource_strip_prefix attribute can be used to specify a specific alternative directory for resource files.

Resources may be source files or generated files.

generates_api

Boolean; optional; default is False

This attribute marks annotation processors that generate API code.

If a rule uses an API-generating annotation processor, other rules depending on it can refer to the generated code only if their compilation actions are scheduled after the generating rule. This attribute instructs Bazel to introduce scheduling constraints when --java_header_compilation is enabled.

WARNING: This attribute affects build performance, use it only if necessary.

javacopts

List of strings; optional

Extra compiler options for this library. Subject to "Make variable" substitution and Bourne shell tokenization .

These compiler options are passed to javac after the global compiler options.

Boolean; optional; default is False

Whether this library should only be used for compilation and not at runtime. Useful if the library will be provided by the runtime environment during execution. Examples of such libraries are the IDE APIs for IDE plug-ins or tools.jar for anything running on a standard JDK.

Note that neverlink = 1 does not prevent the compiler from inlining material from this library into compilation targets that depend on it, as permitted by the Java Language Specification (eg, static final constants of String or of primitive types). The preferred use case is therefore when the runtime library is identical to the compilation library.

If the runtime library differs from the compilation library then you must ensure that it differs only in places that the JLS forbids compilers to inline (and that must hold for all future versions of the JLS).

output_licenses

Licence type; optional

See common attributes
plugins

List of labels ; optional

Java compiler plugins to run at compile-time. Every java_plugin specified in this attribute will be run whenever this rule is built. A library may also inherit plugins from dependencies that use exported_plugins . Resources generated by the plugin will be included in the resulting jar of this rule.
processor_class

String; optional

The processor class is the fully qualified type of the class that the Java compiler should use as entry point to the annotation processor. If not specified, this rule will not contribute an annotation processor to the Java compiler's annotation processing, but its runtime classpath will still be included on the compiler's annotation processor path. (This is primarily intended for use by Error Prone plugins , which are loaded from the annotation processor path using java.util.ServiceLoader .)
proguard_specs

List of labels ; optional

Files to be used as Proguard specification. These will describe the set of specifications to be used by Proguard. If specified, they will be added to any android_binary target depending on this library. The files included here must only have idempotent rules, namely -dontnote, -dontwarn, assumenosideeffects, and rules that start with -keep. Other options can only appear in android_binary 's proguard_specs, to ensure non-tautological merges.
resource_jars

List of labels ; optional

Deprecated: Use java_import and deps or runtime_deps instead.
resource_strip_prefix

String; optional

The path prefix to strip from Java resources.

If specified, this path prefix is stripped from every file in the resources attribute. It is an error for a resource file not to be under this directory. If not specified (the default), the path of resource file is determined according to the same logic as the Java package of source files. For example, a source file at stuff/java/foo/bar/a.txt will be located at foo/bar/a.txt .

java_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)

Specifies the configuration for a Java runtime.

Example:

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

Arguments

Attributes
name

Name ; required

A unique name for this target.

srcs

List of labels ; optional

All files in the runtime.
hermetic_srcs

List of labels ; optional

Files in the runtime needed for hermetic deployments.
java

Label ; optional

The path to the java executable.
java_home

String; optional

The path to the root of the runtime. Subject to "Make" variable substitution. If this path is absolute, the rule denotes a non-hermetic Java runtime with a well-known path. In that case, the srcs and java attributes must be empty.
lib_modules

Label ; optional

The lib/modules file needed for hermetic deployments.

java_toolchain

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)

Specifies the configuration for the Java compiler. Which toolchain to be used can be changed through the --java_toolchain argument. Normally you should not write those kind of rules unless you want to tune your Java compiler.

Examples

A simple example would be:

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

Arguments

Attributes
name

Name ; required

A unique name for this target.

android_lint_data

List of labels ; optional

Labels of tools available for label-expansion in android_lint_jvm_opts.
android_lint_jvm_opts

List of strings; optional

The list of arguments for the JVM when invoking Android Lint.
android_lint_opts

List of strings; optional

The list of Android Lint arguments.
android_lint_package_configuration

List of labels ; optional

Android Lint Configuration that should be applied to the specified package groups.
android_lint_runner

Label ; optional

Label of the Android Lint runner, if any.
bootclasspath

List of labels ; optional

The Java target bootclasspath entries. Corresponds to javac's -bootclasspath flag.
deps_checker

List of labels ; optional

Label of the ImportDepsChecker deploy jar.
forcibly_disable_header_compilation

Boolean; optional; default is False

Overrides --java_header_compilation to disable header compilation on platforms that do not support it, eg JDK 7 Bazel.
genclass

List of labels ; required

Label of the GenClass deploy jar.
header_compiler

List of labels ; optional

Label of the header compiler. Required if --java_header_compilation is enabled.
header_compiler_direct

List of labels ; optional

Optional label of the header compiler to use for direct classpath actions that do not include any API-generating annotation processors.

This tool does not support annotation processing.

ijar

List of labels ; required

Label of the ijar executable.
jacocorunner

Label ; optional

Label of the JacocoCoverageRunner deploy jar.
java_runtime

Label ; required

The java_runtime to use with this toolchain. It defaults to java_runtime in execution configuration.
javabuilder

List of labels ; required

Label of the JavaBuilder deploy jar.
javabuilder_data

List of labels ; optional

Labels of data available for label-expansion in javabuilder_jvm_opts.
javabuilder_jvm_opts

List of strings; optional

The list of arguments for the JVM when invoking JavaBuilder.
javac_supports_multiplex_workers

Boolean; optional; default is True

True if JavaBuilder supports running as a multiplex persistent worker, false if it doesn't.
javac_supports_workers

Boolean; optional; default is True

True if JavaBuilder supports running as a persistent worker, false if it doesn't.
javacopts

List of strings; optional

The list of extra arguments for the Java compiler. Please refer to the Java compiler documentation for the extensive list of possible Java compiler flags.
jvm_opts

List of strings; optional

The list of arguments for the JVM when invoking the Java compiler. Please refer to the Java virtual machine documentation for the extensive list of possible flags for this option.
oneversion

Label ; optional

Label of the one-version enforcement binary.
oneversion_whitelist

Label ; optional

Label of the one-version whitelist.
package_configuration

List of labels ; optional

Configuration that should be applied to the specified package groups.
proguard_allowlister

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

Label of the Proguard allowlister.
resourcejar

List of labels ; optional

Label of the resource jar builder executable.
singlejar

List of labels ; required

Label of the SingleJar deploy jar.
source_version

String; optional

The Java source version (eg, '6' or '7'). It specifies which set of code structures are allowed in the Java source code.
target_version

String; optional

The Java target version (eg, '6' or '7'). It specifies for which Java runtime the class should be build.
timezone_data

Label ; optional

Label of a resource jar containing timezone data. If set, the timezone data is added as an implicitly runtime dependency of all java_binary rules.
tools

List of labels ; optional

Labels of tools available for label-expansion in jvm_opts.
turbine_data

List of labels ; optional

Labels of data available for label-expansion in turbine_jvm_opts.
turbine_jvm_opts

List of strings; optional

The list of arguments for the JVM when invoking turbine.
xlint

List of strings; optional

The list of warning to add or removes from default list. Precedes it with a dash to removes it. Please see the Javac documentation on the -Xlint options for more information.