नियम
- java_binary
- java_import
- java_library
- java_lite_proto_library
- java_proto_library
- java_test
- java_package_configuration
- java_plugin
- java_runtime
- java_toolchain
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 संग्रह ("jar फ़ाइल") बनाता है. साथ ही, नियम के नाम वाली एक रैपर शेल स्क्रिप्ट भी बनाता है.
रैपर शेल स्क्रिप्ट, क्लासपाथ का इस्तेमाल करती है. इसमें कई चीज़ों के साथ-साथ, हर उस लाइब्रेरी के लिए एक jar फ़ाइल शामिल होती है जिस पर बाइनरी निर्भर करती है. रैपर शेल स्क्रिप्ट को चलाते समय, किसी भी खाली न होने वाले
JAVABIN
एनवायरमेंट वैरिएबल को, Bazel के --java_runtime_version
फ़्लैग के ज़रिए तय किए गए वर्शन के मुकाबले प्राथमिकता दी जाएगी.
रैपर स्क्रिप्ट में कई यूनीक फ़्लैग इस्तेमाल किए जा सकते हैं. रैपर के ज़रिए कॉन्फ़िगर किए जा सकने वाले फ़्लैग और एनवायरमेंट वैरिएबल की सूची देखने के लिए,
//src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt
पर जाएं.
इंप्लिसिट आउटपुट टारगेट
name.jar
: एक Java संग्रह, जिसमें बाइनरी की डायरेक्ट डिपेंडेंसी से जुड़ी क्लास फ़ाइलें और अन्य रिसॉर्स शामिल होते हैं.name-src.jar
: सोर्स ("सोर्स jar") वाला संग्रह.name_deploy.jar
: डिप्लॉयमेंट के लिए सही Java संग्रह (सिर्फ़ तब बनाया जाता है, जब साफ़ तौर पर अनुरोध किया गया हो).अपने नियम के लिए
<name>_deploy.jar
टारगेट बनाकर, एक ऐसी jar फ़ाइल बनाई जाती है जिसमें एक मेनिफ़ेस्ट होता है. इसकी मदद से, इसेjava -jar
कमांड या रैपर स्क्रिप्ट के--singlejar
विकल्प के साथ चलाया जा सकता है.java -jar
के बजाय, रैपर स्क्रिप्ट का इस्तेमाल करना बेहतर होता है, क्योंकि यह JVM फ़्लैग और नेटिव लाइब्रेरी को लोड करने के विकल्पों को भी पास करती है.डिप्लॉय किए गए jar में वे सभी क्लास होती हैं जो क्लास लोडर को मिलती हैं. यह क्लास लोडर, बाइनरी की रैपर स्क्रिप्ट से शुरू करके आखिर तक क्लासपाथ को खोजता है. इसमें डिपेंडेंसी के लिए ज़रूरी नेटिव लाइब्रेरी भी शामिल होती हैं. ये रनटाइम के दौरान, JVM में अपने-आप लोड हो जाते हैं.
अगर आपके टारगेट में लॉन्चर एट्रिब्यूट की वैल्यू दी गई है, तो _deploy.jar एक सामान्य JAR फ़ाइल के बजाय, एक नेटिव बाइनरी होगी. इसमें लॉन्चर के साथ-साथ, आपके नियम की सभी नेटिव (C++) डिपेंडेंसी शामिल होंगी. ये सभी एक स्टैटिक बाइनरी में लिंक होती हैं. असल jar फ़ाइल के बाइट को उस नेटिव बाइनरी में जोड़ दिया जाएगा. इससे एक बाइनरी ब्लॉब बन जाएगा, जिसमें एक साथ, रन किए जा सकने वाले कोड और Java कोड, दोनों शामिल होंगे. इस प्रोसेस के बाद बनी jar फ़ाइल को सीधे तौर पर, किसी भी नेटिव बाइनरी की तरह चलाया जा सकता है.
name_deploy-src.jar
: यह एक संग्रह है, जिसमें टारगेट के ट्रांसीटिव क्लोज़र से इकट्ठा किए गए सोर्स शामिल होते हैं. ये,deploy.jar
में मौजूद क्लास से मैच करेंगे. हालांकि, ऐसा उन जगहों पर नहीं होगा जहां डिवाइस में मौजूद जर्स के लिए कोई सोर्स जार मौजूद न हो.
java_binary
नियम में deps
एट्रिब्यूट का इस्तेमाल,
srcs
के बिना नहीं किया जा सकता. ऐसे नियम में,
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 |
नाम; यह ज़रूरी है इस टारगेट के लिए यूनीक नाम. ऐप्लिकेशन के मुख्य एंट्री पॉइंट (एक्सटेंशन को हटाकर) के तौर पर इस्तेमाल की जाने वाली सोर्स फ़ाइल का नाम इस्तेमाल करना अच्छा होता है. उदाहरण के लिए, अगर आपके एंट्री पॉइंट का नाम Main.java है, तो आपका नाम Main हो सकता है.
|
deps
|
लेबल की सूची; डिफ़ॉल्ट deps के बारे में सामान्य टिप्पणियां देखने के लिए,
ज़्यादातर बिल्ड नियमों के मुताबिक तय किए गए सामान्य एट्रिब्यूट पर जाएं.
|
srcs
|
लेबल की सूची; डिफ़ॉल्ट
नियम: अगर कोई नियम (आम तौर पर
यह आर्ग्युमेंट ज़्यादातर मामलों में ज़रूरी होता है. हालांकि, अगर |
resources
|
लेबल की सूची; डिफ़ॉल्ट
अगर संसाधनों की जानकारी दी गई है, तो उन्हें कंपाइल करने पर जनरेट होने वाली सामान्य
संसाधन, सोर्स फ़ाइलें या जनरेट की गई फ़ाइलें हो सकती हैं. |
classpath_resources
|
लेबल की सूची; डिफ़ॉल्ट
उन संसाधनों की सूची जो जावा ट्री के रूट में मौजूद होने चाहिए. इस एट्रिब्यूट का सिर्फ़ एक मकसद है, तीसरे पक्ष की उन लाइब्रेरी के साथ काम करना जिनके रिसॉर्स को क्लासपाथ पर |
create_executable
|
बूलियन; कॉन्फ़िगर नहीं किया जा सकता; डिफ़ॉल्ट java_single_jar का इस्तेमाल करें.
|
deploy_env
|
लेबल की सूची; डिफ़ॉल्ट java_binary टारगेट की सूची.
इस एट्रिब्यूट की वैल्यू तब सेट करें, जब कोई ऐसा प्लग इन बनाया जा रहा हो जिसे किसी दूसरे
java_binary से लोड किया जाएगा.इस एट्रिब्यूट को सेट करने पर, इस बाइनरी के रनटाइम क्लासपाथ (और डिप्लॉय किए गए jar) से उन सभी डिपेंडेंसी को हटा दिया जाता है जो इस बाइनरी और deploy_env में बताए गए टारगेट के बीच शेयर की जाती हैं.
|
deploy_manifest_lines
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से *_deploy.jar टारगेट के लिए जनरेट की गई META-INF/manifest.mf फ़ाइल में जोड़ने के लिए लाइनों की सूची. इस एट्रिब्यूट के कॉन्टेंट में, "वैरिएबल बनाएं" विकल्प का इस्तेमाल करके बदलाव नहीं किया जा सकता.
|
javacopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से कंपाइलर के ये विकल्प, ग्लोबल कंपाइलर विकल्पों के बाद javac को पास किए जाते हैं. |
jvm_flags
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से Java बाइनरी के लिए रैपर स्क्रिप्ट में CLASSPATH परिभाषा शामिल होती है, ताकि सभी डिपेंडेंट jar ढूंढे जा सकें. साथ ही, यह सही Java इंटरप्रेटर को भी चालू करती है.
रैपर स्क्रिप्ट से जनरेट की गई कमांड लाइन में, मुख्य क्लास का नाम और उसके बाद ध्यान दें कि इस एट्रिब्यूट का |
launcher
|
लेबल; डिफ़ॉल्ट bin/java प्रोग्राम के बजाय, अपने Java प्रोग्राम को चलाने के लिए इस्तेमाल किए जाने वाले बाइनरी को तय करें.
टारगेट एक cc_binary होना चाहिए. इस एट्रिब्यूट की वैल्यू के तौर पर,
Java Invocation API को लागू करने वाला कोई भी cc_binary दिया जा सकता है.
डिफ़ॉल्ट रूप से, Bazel सामान्य JDK लॉन्चर (bin/java या java.exe) का इस्तेमाल करेगा. इससे जुड़े ध्यान दें कि JDK लॉन्चर या किसी अन्य लॉन्चर का इस्तेमाल करने पर, आपकी नेटिव (C++, SWIG, JNI) डिपेंडेंसी अलग-अलग तरीके से बनाई जाएंगी:
डिफ़ॉल्ट JDK लॉन्चर के अलावा किसी अन्य लॉन्चर का इस्तेमाल करने पर, |
main_class
|
स्ट्रिंग; डिफ़ॉल्ट रूप से main() तरीके वाली क्लास का नाम.
अगर कोई नियम इस विकल्प का इस्तेमाल करता है, तो उसे srcs=[...] सूची की ज़रूरत नहीं होती.
इस एट्रिब्यूट की मदद से, किसी ऐसी Java लाइब्रेरी से एक ऐसी लाइब्रेरी बनाई जा सकती है जिसमें पहले से ही एक या उससे ज़्यादा main() तरीके मौजूद हों.
इस एट्रिब्यूट की वैल्यू, सोर्स फ़ाइल नहीं, बल्कि क्लास का नाम होती है. क्लास, रनटाइम के दौरान उपलब्ध होनी चाहिए: इसे इस नियम ( |
plugins
|
लेबल की सूची; डिफ़ॉल्ट java_plugin को चलाया जाएगा. लाइब्रेरी को उन डिपेंडेंसी से भी प्लग इन इनहेरिट हो सकते हैं जिनमें
exported_plugins का इस्तेमाल किया जाता है. प्लग इन से जनरेट किए गए संसाधन, इस नियम के नतीजे के जार में शामिल किए जाएंगे.
|
resource_jars
|
लेबल की सूची; डिफ़ॉल्ट |
resource_strip_prefix
|
स्ट्रिंग; डिफ़ॉल्ट रूप से
अगर यह जानकारी दी गई है, तो |
runtime_deps
|
लेबल की सूची; डिफ़ॉल्ट deps की तरह, ये रनटाइम क्लासपाथ पर दिखेंगे. हालांकि, ये deps के उलट, कंपाइल-टाइम क्लासपाथ पर नहीं दिखेंगे. सिर्फ़ रनटाइम पर ज़रूरी डिपेंडेंसी को यहां सूची में शामिल किया जाना चाहिए. डिपेंडेंसी-ऐनालिसिस टूल को उन टारगेट को अनदेखा करना चाहिए जो
runtime_deps और deps , दोनों में दिखते हैं.
|
stamp
|
पूर्णांक; डिफ़ॉल्ट वैल्यू
स्टैंप की गई बाइनरी को तब तक फिर से नहीं बनाया जाता, जब तक उनकी डिपेंडेंसी में बदलाव न हो जाए. |
use_launcher
|
बूलियन; डिफ़ॉल्ट तौर पर अगर इस एट्रिब्यूट को 'गलत' पर सेट किया जाता है, तो इस टारगेट के लिए,
launcher एट्रिब्यूट और उससे जुड़े
|
use_testrunner
|
बूलियन; डिफ़ॉल्ट तौर पर com.google.testing.junit.runner.BazelTestRunner ) क्लास का इस्तेमाल करें. साथ ही, टेस्ट रनर को bazel.test_suite
सिस्टम प्रॉपर्टी की वैल्यू के तौर पर टेस्ट क्लास दें.
इसका इस्तेमाल, डिफ़ॉल्ट व्यवहार को बदलने के लिए किया जा सकता है. डिफ़ॉल्ट तौर पर, java_test नियमों के लिए टेस्ट रनर का इस्तेमाल किया जाता है और java_binary नियमों के लिए इसका इस्तेमाल नहीं किया जाता. ऐसा होने की संभावना कम है कि आप ऐसा करना चाहें. इसका एक इस्तेमाल, AllTest
उन नियमों के लिए किया जाता है जिन्हें किसी दूसरे नियम से चालू किया जाता है. उदाहरण के लिए, जांच चलाने से पहले डेटाबेस सेट अप करने के लिए. AllTest
नियम को java_binary के तौर पर घोषित किया जाना चाहिए. हालांकि, इसके लिए अब भी मुख्य एंट्री पॉइंट के तौर पर टेस्ट रनर का इस्तेमाल किया जाना चाहिए.
टेस्ट रनर क्लास के नाम को main_class एट्रिब्यूट की मदद से बदला जा सकता है.
|
java_import
नियम का सोर्स देखेंjava_import(name, deps, data, compatible_with, constraints, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, jars, licenses, neverlink, proguard_specs, restricted_to, runtime_deps, srcjar, tags, target_compatible_with, testonly, visibility)
इस नियम की मदद से, पहले से संकलित .jar
फ़ाइलों का इस्तेमाल, java_library
और java_binary
नियमों के लिए लाइब्रेरी के तौर पर किया जा सकता है.
उदाहरण
java_import( name = "maven_model", jars = [ "maven_model/maven-aether-provider-3.2.3.jar", "maven_model/maven-model-3.2.3.jar", "maven_model/maven-model-builder-3.2.3.jar", ], )
तर्क
विशेषताएं | |
---|---|
name |
नाम; यह ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट |
constraints
|
स्ट्रिंग की सूची; कॉन्फ़िगर नहीं की जा सकती; डिफ़ॉल्ट |
exports
|
लेबल की सूची; डिफ़ॉल्ट |
jars
|
लेबल की सूची; ज़रूरी है इस टारगेट पर निर्भर Java टारगेट के लिए दी गई JAR फ़ाइलों की सूची. |
neverlink
|
बूलियन; डिफ़ॉल्ट तौर पर tools.jar शामिल हैं.
|
proguard_specs
|
लेबल की सूची; डिफ़ॉल्ट android_binary टारगेट में जोड़ दिया जाएगा.
यहां शामिल फ़ाइलों में सिर्फ़ एक जैसे नियम होने चाहिए. जैसे, -dontnote, -dontwarn,
assumenosideeffects, और -keep से शुरू होने वाले नियम. अन्य विकल्प सिर्फ़ android_binary के proguard_specs में दिख सकते हैं, ताकि यह पक्का किया जा सके कि टॉटोलॉजिकल मर्ज न हों.
|
runtime_deps
|
लेबल की सूची; डिफ़ॉल्ट |
srcjar
|
लेबल; डिफ़ॉल्ट |
java_library
नियम का सोर्स देखेंjava_library(name, deps, srcs, data, resources, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exported_plugins, exports, features, javacopts, licenses, neverlink, plugins, proguard_specs, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, tags, target_compatible_with, testonly, visibility)
यह नियम, सोर्स को .jar
फ़ाइल में कंपाइल और लिंक करता है.
इंप्लिसिट आउटपुट टारगेट
libname.jar
: क्लास फ़ाइलों वाला Java संग्रह.libname-src.jar
: सोर्स ("सोर्स jar") वाला संग्रह.
तर्क
विशेषताएं | |
---|---|
name |
नाम; यह ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट deps के बारे में सामान्य टिप्पणियां देखने के लिए,
ज़्यादातर बिल्ड नियमों के मुताबिक तय किए गए सामान्य एट्रिब्यूट पर जाएं.
इसके उलट, |
srcs
|
लेबल की सूची; डिफ़ॉल्ट
नियम: अगर कोई नियम (आम तौर पर
यह आर्ग्युमेंट ज़्यादातर मामलों में ज़रूरी होता है. हालांकि, अगर |
data
|
लेबल की सूची; डिफ़ॉल्ट data के बारे में सामान्य टिप्पणियां देखने के लिए,
ज़्यादातर बिल्ड नियमों के मुताबिक तय किए गए सामान्य एट्रिब्यूट पर जाएं.
|
resources
|
लेबल की सूची; डिफ़ॉल्ट
अगर संसाधनों की जानकारी दी गई है, तो उन्हें कंपाइल करने पर जनरेट होने वाली सामान्य
संसाधन, सोर्स फ़ाइलें या जनरेट की गई फ़ाइलें हो सकती हैं. |
exported_plugins
|
लेबल की सूची; डिफ़ॉल्ट java_plugin s (जैसे, एनोटेशन प्रोसेसर) की सूची जो सीधे तौर पर इस लाइब्रेरी पर निर्भर करती हैं.
|
exports
|
लेबल की सूची; डिफ़ॉल्ट
यहां लिस्टिंग के नियमों को शामिल करने से, वे पैरंट रूल के लिए उपलब्ध हो जाएंगे. ऐसा तब होगा, जब पैरंट ने साफ़ तौर पर इन नियमों पर निर्भरता दिखाई हो. यह बात सामान्य (एक्सपोर्ट नहीं किए गए)
खास जानकारी: कोई नियम X, Y में मौजूद कोड को तब ऐक्सेस कर सकता है, जब उनके बीच कोई डिपेंडेंसी पाथ मौजूद हो. यह पाथ,
मान लें कि A, B पर निर्भर करता है और B, C पर निर्भर करता है. इस मामले में,
C, A की ट्रांज़िशन डिपेंडेंसी है. इसलिए, C के सोर्स बदलने और A को फिर से बनाने पर,
सब कुछ सही तरीके से फिर से बन जाएगा. हालांकि, A, C में मौजूद क्लास का इस्तेमाल नहीं कर पाएगा. इसके लिए, A को अपने एक्सपोर्ट की गई लाइब्रेरी को बंद करने की सुविधा, सभी डायरेक्ट पैरंट रूल के लिए उपलब्ध है. एक और उदाहरण लें: A, B पर निर्भर करता है, B, C और D पर निर्भर करता है, और C को एक्सपोर्ट करता है, लेकिन D को नहीं. अब A के पास C का ऐक्सेस है, लेकिन D का नहीं. अब, अगर C और D ने कुछ लाइब्रेरी, C' और D' को एक्सपोर्ट किया है, तो A सिर्फ़ C' को ऐक्सेस कर सकता है, D' को नहीं.
अहम जानकारी: एक्सपोर्ट किया गया नियम, सामान्य डिपेंडेंसी नहीं है. पिछले उदाहरण के हिसाब से,
अगर B, C को एक्सपोर्ट करता है और उसे C का इस्तेमाल भी करना है, तो उसे अपने
|
javacopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से कंपाइलर के ये विकल्प, ग्लोबल कंपाइलर विकल्पों के बाद javac को पास किए जाते हैं. |
neverlink
|
बूलियन; डिफ़ॉल्ट तौर पर tools.jar शामिल हैं.
ध्यान दें कि अगर रनटाइम लाइब्रेरी, कंपाइलेशन लाइब्रेरी से अलग है, तो आपको यह पक्का करना होगा कि यह सिर्फ़ उन जगहों पर अलग हो जहां JLS, कंपाइलर को इनलाइन करने से मना करता है. साथ ही, यह JLS के आने वाले सभी वर्शन के लिए भी लागू होना चाहिए. |
plugins
|
लेबल की सूची; डिफ़ॉल्ट java_plugin को चलाया जाएगा. लाइब्रेरी को उन डिपेंडेंसी से भी प्लग इन इनहेरिट हो सकते हैं जिनमें
exported_plugins का इस्तेमाल किया जाता है. प्लग इन से जनरेट किए गए संसाधन, इस नियम के नतीजे के जार में शामिल किए जाएंगे.
|
proguard_specs
|
लेबल की सूची; डिफ़ॉल्ट android_binary टारगेट में जोड़ दिया जाएगा.
यहां शामिल फ़ाइलों में सिर्फ़ एक जैसे नियम होने चाहिए. जैसे, -dontnote, -dontwarn,
assumenosideeffects, और -keep से शुरू होने वाले नियम. अन्य विकल्प सिर्फ़ android_binary के proguard_specs में दिख सकते हैं, ताकि यह पक्का किया जा सके कि टॉटोलॉजिकल मर्ज न हों.
|
resource_jars
|
लेबल की सूची; डिफ़ॉल्ट |
resource_strip_prefix
|
स्ट्रिंग; डिफ़ॉल्ट रूप से
अगर यह जानकारी दी गई है, तो |
runtime_deps
|
लेबल की सूची; डिफ़ॉल्ट deps की तरह, ये रनटाइम क्लासपाथ पर दिखेंगे. हालांकि, ये 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
फ़ाइलों से Java कोड जनरेट करता है.
deps
, proto_library
नियमों पर ले जाना चाहिए.
उदाहरण:
java_library( name = "lib", deps = [":foo"], ) java_lite_proto_library( name = "foo", deps = [":bar"], ) proto_library( name = "bar", )
तर्क
विशेषताएं | |
---|---|
name |
नाम; यह ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट proto_library के लिए Java कोड जनरेट करने वाले 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
फ़ाइलों से Java कोड जनरेट करता है.
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 |
नाम; यह ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट proto_library के लिए Java कोड जनरेट करने वाले proto_library
नियमों की सूची.
|
java_test
नियम का सोर्स देखेंjava_test(name, deps, srcs, data, resources, args, classpath_resources, compatible_with, create_executable, deploy_manifest_lines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, launcher, licenses, local, main_class, plugins, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, use_testrunner, visibility)
java_test()
नियम, Java टेस्ट को कंपाइल करता है. टेस्ट, आपके टेस्ट कोड के चारों ओर मौजूद एक बाइनरी रैपर होता है. मुख्य क्लास को कंपाइल करने के बजाय, टेस्ट रनर के मुख्य तरीके को लागू किया जाता है.
इंप्लिसिट आउटपुट टारगेट
name.jar
: Java का संग्रह.name_deploy.jar
: डिप्लॉयमेंट के लिए सही Java संग्रह. (सिर्फ़ तब बनाया जाता है, जब साफ़ तौर पर अनुरोध किया गया हो.) ज़्यादा जानकारी के लिए, java_binary से मिले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 |
नाम; यह ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट deps के बारे में सामान्य टिप्पणियां देखने के लिए,
ज़्यादातर बिल्ड नियमों के मुताबिक तय किए गए सामान्य एट्रिब्यूट पर जाएं.
|
srcs
|
लेबल की सूची; डिफ़ॉल्ट
नियम: अगर कोई नियम (आम तौर पर
यह आर्ग्युमेंट ज़्यादातर मामलों में ज़रूरी होता है. हालांकि, अगर |
resources
|
लेबल की सूची; डिफ़ॉल्ट
अगर संसाधनों की जानकारी दी गई है, तो उन्हें कंपाइल करने पर जनरेट होने वाली सामान्य
संसाधन, सोर्स फ़ाइलें या जनरेट की गई फ़ाइलें हो सकती हैं. |
classpath_resources
|
लेबल की सूची; डिफ़ॉल्ट
उन संसाधनों की सूची जो जावा ट्री के रूट में मौजूद होने चाहिए. इस एट्रिब्यूट का सिर्फ़ एक मकसद है, तीसरे पक्ष की उन लाइब्रेरी के साथ काम करना जिनके रिसॉर्स को क्लासपाथ पर |
create_executable
|
बूलियन; कॉन्फ़िगर नहीं किया जा सकता; डिफ़ॉल्ट java_single_jar का इस्तेमाल करें.
|
deploy_manifest_lines
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से *_deploy.jar टारगेट के लिए जनरेट की गई META-INF/manifest.mf फ़ाइल में जोड़ने के लिए लाइनों की सूची. इस एट्रिब्यूट के कॉन्टेंट में, "वैरिएबल बनाएं" विकल्प का इस्तेमाल करके बदलाव नहीं किया जा सकता.
|
javacopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से कंपाइलर के ये विकल्प, ग्लोबल कंपाइलर विकल्पों के बाद javac को पास किए जाते हैं. |
jvm_flags
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से Java बाइनरी के लिए रैपर स्क्रिप्ट में CLASSPATH परिभाषा शामिल होती है, ताकि सभी डिपेंडेंट jar ढूंढे जा सकें. साथ ही, यह सही Java इंटरप्रेटर को भी चालू करती है.
रैपर स्क्रिप्ट से जनरेट की गई कमांड लाइन में, मुख्य क्लास का नाम और उसके बाद ध्यान दें कि इस एट्रिब्यूट का |
launcher
|
लेबल; डिफ़ॉल्ट bin/java प्रोग्राम के बजाय, अपने Java प्रोग्राम को चलाने के लिए इस्तेमाल किए जाने वाले बाइनरी को तय करें.
टारगेट एक cc_binary होना चाहिए. इस एट्रिब्यूट की वैल्यू के तौर पर,
Java Invocation API को लागू करने वाला कोई भी cc_binary दिया जा सकता है.
डिफ़ॉल्ट रूप से, Bazel सामान्य JDK लॉन्चर (bin/java या java.exe) का इस्तेमाल करेगा. इससे जुड़े ध्यान दें कि JDK लॉन्चर या किसी अन्य लॉन्चर का इस्तेमाल करने पर, आपकी नेटिव (C++, SWIG, JNI) डिपेंडेंसी अलग-अलग तरीके से बनाई जाएंगी:
डिफ़ॉल्ट JDK लॉन्चर के अलावा किसी अन्य लॉन्चर का इस्तेमाल करने पर, |
main_class
|
स्ट्रिंग; डिफ़ॉल्ट रूप से main() तरीके वाली क्लास का नाम.
अगर कोई नियम इस विकल्प का इस्तेमाल करता है, तो उसे srcs=[...] सूची की ज़रूरत नहीं होती.
इस एट्रिब्यूट की मदद से, किसी ऐसी Java लाइब्रेरी से एक ऐसी लाइब्रेरी बनाई जा सकती है जिसमें पहले से ही एक या उससे ज़्यादा main() तरीके मौजूद हों.
इस एट्रिब्यूट की वैल्यू, सोर्स फ़ाइल नहीं, बल्कि क्लास का नाम होती है. क्लास, रनटाइम के दौरान उपलब्ध होनी चाहिए: इसे इस नियम ( |
plugins
|
लेबल की सूची; डिफ़ॉल्ट java_plugin को चलाया जाएगा. लाइब्रेरी को उन डिपेंडेंसी से भी प्लग इन इनहेरिट हो सकते हैं जिनमें
exported_plugins का इस्तेमाल किया जाता है. प्लग इन से जनरेट किए गए संसाधन, इस नियम के नतीजे के जार में शामिल किए जाएंगे.
|
resource_jars
|
लेबल की सूची; डिफ़ॉल्ट |
resource_strip_prefix
|
स्ट्रिंग; डिफ़ॉल्ट रूप से
अगर यह जानकारी दी गई है, तो |
runtime_deps
|
लेबल की सूची; डिफ़ॉल्ट deps की तरह, ये रनटाइम क्लासपाथ पर दिखेंगे. हालांकि, ये deps के उलट, कंपाइल-टाइम क्लासपाथ पर नहीं दिखेंगे. सिर्फ़ रनटाइम पर ज़रूरी डिपेंडेंसी को यहां सूची में शामिल किया जाना चाहिए. डिपेंडेंसी-ऐनालिसिस टूल को उन टारगेट को अनदेखा करना चाहिए जो
runtime_deps और deps , दोनों में दिखते हैं.
|
stamp
|
पूर्णांक; डिफ़ॉल्ट वैल्यू
स्टैंप की गई बाइनरी को तब तक फिर से नहीं बनाया जाता, जब तक उनकी डिपेंडेंसी में बदलाव न हो जाए. |
test_class
|
स्ट्रिंग; डिफ़ॉल्ट रूप से
डिफ़ॉल्ट रूप से, अगर इस आर्ग्युमेंट की जानकारी नहीं दी गई है, तो लेगसी मोड का इस्तेमाल किया जाता है और इसके बजाय,
टेस्ट आर्ग्युमेंट का इस्तेमाल किया जाता है. पहले आर्ग्युमेंट पर फ़ॉलबैक न करने के लिए,
इस एट्रिब्यूट से, उस Java क्लास का नाम पता चलता है जिसे इस टेस्ट से चलाया जाना है. आम तौर पर, इसे सेट करने की ज़रूरत नहीं होती. अगर इस आर्ग्युमेंट को छोड़ा जाता है, तो इसे टारगेट के
JUnit3 के लिए, टेस्ट क्लास को
इस एट्रिब्यूट की मदद से, कई |
use_launcher
|
बूलियन; डिफ़ॉल्ट तौर पर अगर इस एट्रिब्यूट को 'गलत' पर सेट किया जाता है, तो इस टारगेट के लिए,
launcher एट्रिब्यूट और उससे जुड़े
|
use_testrunner
|
बूलियन; डिफ़ॉल्ट तौर पर com.google.testing.junit.runner.BazelTestRunner ) क्लास का इस्तेमाल करें. साथ ही, टेस्ट रनर को bazel.test_suite
सिस्टम प्रॉपर्टी की वैल्यू के तौर पर टेस्ट क्लास दें.
इसका इस्तेमाल, डिफ़ॉल्ट व्यवहार को बदलने के लिए किया जा सकता है. डिफ़ॉल्ट तौर पर, java_test नियमों के लिए टेस्ट रनर का इस्तेमाल किया जाता है और java_binary नियमों के लिए इसका इस्तेमाल नहीं किया जाता. ऐसा होने की संभावना कम है कि आप ऐसा करना चाहें. इसका एक इस्तेमाल, AllTest
उन नियमों के लिए किया जाता है जिन्हें किसी दूसरे नियम से चालू किया जाता है. उदाहरण के लिए, जांच चलाने से पहले डेटाबेस सेट अप करने के लिए. AllTest
नियम को java_binary के तौर पर घोषित किया जाना चाहिए. हालांकि, इसके लिए अब भी मुख्य एंट्री पॉइंट के तौर पर टेस्ट रनर का इस्तेमाल किया जाना चाहिए.
टेस्ट रनर क्लास के नाम को main_class एट्रिब्यूट की मदद से बदला जा सकता है.
|
java_package_configuration
नियम का सोर्स देखेंjava_package_configuration(name, data, compatible_with, deprecation, distribs, features, javacopts, licenses, packages, restricted_to, tags, target_compatible_with, testonly, visibility)
पैकेज के सेट पर लागू करने के लिए कॉन्फ़िगरेशन.
कॉन्फ़िगरेशन को java_toolchain.javacopts
में जोड़ा जा सकता है.
उदाहरण:
java_package_configuration( name = "my_configuration", packages = [":my_packages"], javacopts = ["-Werror"], ) package_group( name = "my_packages", packages = [ "//com/my/project/...", "-//com/my/project/testing/...", ], ) java_toolchain( ..., package_configuration = [ ":my_configuration", ] )
तर्क
विशेषताएं | |
---|---|
name |
नाम; यह ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
data
|
लेबल की सूची; डिफ़ॉल्ट |
javacopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से |
packages
|
लेबल की सूची; डिफ़ॉल्ट 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
, Bazel से चलाए जा रहे Java कंपाइलर के लिए प्लग इन तय करता है. फ़िलहाल, सिर्फ़ एनोटेशन प्रोसेसर प्लग इन इस्तेमाल किए जा सकते हैं. java_library
या
java_binary
नियम, plugins
एट्रिब्यूट के ज़रिए प्लग इन चला सकता है. java_library
, exported_plugins
का इस्तेमाल करके, प्लग इन को उन लाइब्रेरी में भी अपने-आप एक्सपोर्ट कर सकता है जो सीधे तौर पर उस पर निर्भर हैं.
इंप्लिसिट आउटपुट टारगेट
libname.jar
: Java का संग्रह.
आर्ग्युमेंट, java_library
जैसे ही होते हैं. हालांकि, processor_class
आर्ग्युमेंट को जोड़ने के अलावा, इनमें कोई अंतर नहीं होता.
तर्क
विशेषताएं | |
---|---|
name |
नाम; यह ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट deps के बारे में सामान्य टिप्पणियां देखने के लिए,
ज़्यादातर बिल्ड नियमों के मुताबिक तय किए गए सामान्य एट्रिब्यूट पर जाएं.
इसके उलट, |
srcs
|
लेबल की सूची; डिफ़ॉल्ट
नियम: अगर कोई नियम (आम तौर पर
यह आर्ग्युमेंट ज़्यादातर मामलों में ज़रूरी होता है. हालांकि, अगर |
data
|
लेबल की सूची; डिफ़ॉल्ट data के बारे में सामान्य टिप्पणियां देखने के लिए,
ज़्यादातर बिल्ड नियमों के मुताबिक तय किए गए सामान्य एट्रिब्यूट पर जाएं.
|
resources
|
लेबल की सूची; डिफ़ॉल्ट
अगर संसाधनों की जानकारी दी गई है, तो उन्हें कंपाइल करने पर जनरेट होने वाली सामान्य
संसाधन, सोर्स फ़ाइलें या जनरेट की गई फ़ाइलें हो सकती हैं. |
generates_api
|
बूलियन; डिफ़ॉल्ट तौर पर अगर कोई नियम, एपीआई जनरेट करने वाले एनोटेशन प्रोसेसर का इस्तेमाल करता है, तो उस पर निर्भर अन्य नियम, जनरेट किए गए कोड का रेफ़रंस सिर्फ़ तब दे सकते हैं, जब उनके कोड को इकट्ठा करने की कार्रवाइयां, जनरेट करने वाले नियम के बाद शेड्यूल की गई हों. यह एट्रिब्यूट, Bazel को शेड्यूलिंग से जुड़ी पाबंदियां लागू करने का निर्देश देता है. ऐसा तब होता है, जब --java_header_compilation चालू हो. चेतावनी: इस एट्रिब्यूट से बिल्ड की परफ़ॉर्मेंस पर असर पड़ता है. इसलिए, इसका इस्तेमाल सिर्फ़ ज़रूरत पड़ने पर करें. |
javacopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से कंपाइलर के ये विकल्प, ग्लोबल कंपाइलर विकल्पों के बाद javac को पास किए जाते हैं. |
neverlink
|
बूलियन; डिफ़ॉल्ट तौर पर tools.jar शामिल हैं.
ध्यान दें कि अगर रनटाइम लाइब्रेरी, कंपाइलेशन लाइब्रेरी से अलग है, तो आपको यह पक्का करना होगा कि यह सिर्फ़ उन जगहों पर अलग हो जहां JLS, कंपाइलर को इनलाइन करने से मना करता है. साथ ही, यह JLS के आने वाले सभी वर्शन के लिए भी लागू होना चाहिए. |
output_licenses
|
लाइसेंस का टाइप; डिफ़ॉल्ट रूप से common attributes
देखें
|
plugins
|
लेबल की सूची; डिफ़ॉल्ट java_plugin को चलाया जाएगा. लाइब्रेरी को उन डिपेंडेंसी से भी प्लग इन इनहेरिट हो सकते हैं जिनमें
exported_plugins का इस्तेमाल किया जाता है. प्लग इन से जनरेट किए गए संसाधन, इस नियम के नतीजे के जार में शामिल किए जाएंगे.
|
processor_class
|
स्ट्रिंग; डिफ़ॉल्ट रूप से |
proguard_specs
|
लेबल की सूची; डिफ़ॉल्ट android_binary टारगेट में जोड़ दिया जाएगा.
यहां शामिल फ़ाइलों में सिर्फ़ एक जैसे नियम होने चाहिए. जैसे, -dontnote, -dontwarn,
assumenosideeffects, और -keep से शुरू होने वाले नियम. अन्य विकल्प सिर्फ़ android_binary के proguard_specs में दिख सकते हैं, ताकि यह पक्का किया जा सके कि टॉटोलॉजिकल मर्ज न हों.
|
resource_jars
|
लेबल की सूची; डिफ़ॉल्ट |
resource_strip_prefix
|
स्ट्रिंग; डिफ़ॉल्ट रूप से
अगर यह जानकारी दी गई है, तो |
java_runtime
नियम का सोर्स देखेंjava_runtime(name, srcs, compatible_with, default_cds, deprecation, distribs, features, hermetic_srcs, java, java_home, lib_ct_sym, lib_modules, licenses, restricted_to, tags, target_compatible_with, testonly, version, visibility)
Java रनटाइम के लिए कॉन्फ़िगरेशन तय करता है.
उदाहरण:
java_runtime( name = "jdk-9-ea+153", srcs = glob(["jdk9-ea+153/**"]), java_home = "jdk9-ea+153", )
तर्क
विशेषताएं | |
---|---|
name |
नाम; यह ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
srcs
|
लेबल की सूची; डिफ़ॉल्ट |
default_cds
|
लेबल; डिफ़ॉल्ट java_runtime के लिए, सीडीएस का डिफ़ॉल्ट संग्रह. जब किसी java_binary टारगेट के लिए, हेर्मेटिक डिप्लॉय JAR को चालू किया जाता है और टारगेट, classlist एट्रिब्यूट की मदद से अपना सीडीएस संग्रह नहीं देता है, तो java_runtime डिफ़ॉल्ट सीडीएस को हेर्मेटिक डिप्लॉय JAR में पैकेज किया जाता है.
|
hermetic_srcs
|
लेबल की सूची; डिफ़ॉल्ट |
java
|
लेबल; डिफ़ॉल्ट |
java_home
|
स्ट्रिंग; डिफ़ॉल्ट रूप से srcs और java एट्रिब्यूट की वैल्यू खाली होनी चाहिए.
|
lib_ct_sym
|
लेबल; डिफ़ॉल्ट --release के साथ कंपाइल करने के लिए, lib/ct.sym फ़ाइल की ज़रूरत होती है. अगर कोई फ़ाइल नहीं दी गई है और srcs में ऐसी एक फ़ाइल है जिसका पाथ /lib/ct.sym पर खत्म होता है, तो उस फ़ाइल का इस्तेमाल किया जाता है.
|
lib_modules
|
लेबल; डिफ़ॉल्ट |
version
|
पूर्णांक; डिफ़ॉल्ट वैल्यू 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_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_worker_multiplex_sandboxing, javac_supports_workers, javacopts, jvm_opts, licenses, oneversion, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, proguard_allowlister, resourcejar, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, tools, turbine_data, turbine_jvm_opts, visibility, xlint)
Java कंपाइलर के लिए कॉन्फ़िगरेशन तय करता है. --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_opts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से |
android_lint_package_configuration
|
लेबल की सूची; डिफ़ॉल्ट |
android_lint_runner
|
लेबल; डिफ़ॉल्ट |
bootclasspath
|
लेबल की सूची; डिफ़ॉल्ट |
deps_checker
|
लेबल की सूची; डिफ़ॉल्ट |
forcibly_disable_header_compilation
|
बूलियन; डिफ़ॉल्ट तौर पर |
genclass
|
लेबल की सूची; ज़रूरी है GenClass डिप्लॉय किए गए jar का लेबल. |
header_compiler
|
लेबल की सूची; डिफ़ॉल्ट |
header_compiler_direct
|
लेबल की सूची; डिफ़ॉल्ट यह टूल, एनोटेशन प्रोसेसिंग की सुविधा के साथ काम नहीं करता. |
ijar
|
लेबल की सूची; ज़रूरी है ijar एक्सीक्यूटेबल का लेबल. |
jacocorunner
|
लेबल; डिफ़ॉल्ट |
java_runtime
|
लेबल; ज़रूरी है इस टूलचेन का इस्तेमाल करने के लिए java_runtime. यह डिफ़ॉल्ट रूप से, एक्ज़ीक्यूशन कॉन्फ़िगरेशन में java_runtime पर सेट होता है. |
javabuilder
|
लेबल की सूची; ज़रूरी है JavaBuilder डिप्लॉय jar का लेबल. |
javabuilder_data
|
लेबल की सूची; डिफ़ॉल्ट |
javabuilder_jvm_opts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से |
javac_supports_multiplex_workers
|
बूलियन; डिफ़ॉल्ट तौर पर |
javac_supports_worker_multiplex_sandboxing
|
बूलियन; डिफ़ॉल्ट तौर पर |
javac_supports_workers
|
बूलियन; डिफ़ॉल्ट तौर पर |
javacopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से |
jvm_opts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से |
oneversion
|
लेबल; डिफ़ॉल्ट |
oneversion_allowlist_for_tests
|
लेबल; डिफ़ॉल्ट |
oneversion_whitelist
|
लेबल; डिफ़ॉल्ट |
package_configuration
|
लेबल की सूची; डिफ़ॉल्ट |
proguard_allowlister
|
लेबल; डिफ़ॉल्ट |
resourcejar
|
लेबल की सूची; डिफ़ॉल्ट |
singlejar
|
लेबल की सूची; ज़रूरी है SingleJar डिप्लॉय jar का लेबल. |
source_version
|
स्ट्रिंग; डिफ़ॉल्ट रूप से |
target_version
|
स्ट्रिंग; डिफ़ॉल्ट रूप से |
timezone_data
|
लेबल; डिफ़ॉल्ट |
tools
|
लेबल की सूची; डिफ़ॉल्ट |
turbine_data
|
लेबल की सूची; डिफ़ॉल्ट |
turbine_jvm_opts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से |
xlint
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से |