नियम
- 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 संग्रह ("जार फ़ाइल") बनाता है. साथ ही, यह नियम वाले नाम से रैपर शेल स्क्रिप्ट बनाता है.
रैपर शेल स्क्रिप्ट ऐसे क्लासपाथ का इस्तेमाल करती है जिसमें दूसरी चीज़ों के साथ-साथ, हर उस लाइब्रेरी के लिए एक जार फ़ाइल भी शामिल होती है
जिस पर बाइनरी निर्भर करती है. रैपर शेल स्क्रिप्ट चलाते समय, बेज़ेल के --java_runtime_version
फ़्लैग के ज़रिए बताए गए वर्शन के मुकाबले, किसी भी खाली JAVABIN
एनवायरमेंट वैरिएबल को प्राथमिकता दी जाएगी.
रैपर स्क्रिप्ट कई यूनीक फ़्लैग स्वीकार करती है. कॉन्फ़िगर किए जा सकने वाले फ़्लैग और एनवायरमेंट वैरिएबल की सूची देखने के लिए,
//src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt
पर जाएं. ये ऐसे फ़्लैग होते हैं जिन्हें रैपर स्वीकार करता है.
इंप्लिसिट आउटपुट टारगेट
name.jar
: एक Java संग्रह, जिसमें क्लास की फ़ाइलें और बाइनरी की डायरेक्ट डिपेंडेंसी से जुड़े दूसरे संसाधन शामिल हैं.name-src.jar
: सोर्स वाला संग्रह ("सोर्स जार").name_deploy.jar
: डिप्लॉयमेंट के लिए सही Java संग्रह (सिर्फ़ साफ़ तौर पर अनुरोध किए जाने पर बनाया जाता है).अपने नियम के लिए
<name>_deploy.jar
टारगेट बनाने पर, मेनिफ़ेस्ट के साथ एक जार फ़ाइल अपने-आप बनी रहती है. इससे इसेjava -jar
निर्देश या रैपर स्क्रिप्ट के--singlejar
विकल्प का इस्तेमाल करके चलाया जा सकता है. रैपर स्क्रिप्ट का इस्तेमाल करने कोjava -jar
पसंद किया जाता है, क्योंकि यह जेवीएम फ़्लैग और नेटिव लाइब्रेरी को लोड करने के विकल्पों को भी पास करता है.डिप्लॉय जार में वे सभी क्लास शामिल होती हैं जो किसी ऐसे क्लासलोडर को मिलेंगी जो बाइनरी के रैपर स्क्रिप्ट से शुरू तक क्लासवर्क की खोज करेगी. इसमें डिपेंडेंसी के लिए ज़रूरी नेटिव लाइब्रेरी भी होती हैं. रनटाइम के दौरान, ये जेवीएम में अपने-आप लोड हो जाते हैं.
अगर आपका टारगेट किसी लॉन्चर एट्रिब्यूट के बारे में बताता है, तो एक सामान्य JAR फ़ाइल होने के बजाय, _deploy.jar एक नेटिव बाइनरी होगा. इसमें लॉन्चर के साथ-साथ आपके नियम की सभी नेटिव (C++) डिपेंडेंसी शामिल होंगी. ये सभी, स्टैटिक बाइनरी से लिंक किए गए होंगे. जार फ़ाइल की असल बाइट उस नेटिव बाइनरी में जोड़ दी जाएंगी, जिससे एक बाइनरी ब्लॉब बन जाएगा. इसमें एक्ज़ीक्यूटेबल और Java कोड, दोनों शामिल होंगे. आप जार फ़ाइल को सीधे उसी तरह एक्ज़ीक्यूट कर सकते हैं जैसे किसी नेटिव बाइनरी को एक्ज़ीक्यूट करते हैं.
name_deploy-src.jar
: एक संग्रह, जिसमें टारगेट के अस्थायी तौर पर बंद होने से इकट्ठा किए गए सोर्स शामिल होते हैं. येdeploy.jar
की क्लास से मेल खाएंगे. हालांकि, उन जगह को छोड़कर जहां जार के पास मिलता-जुलता कोई सोर्स जार नहीं होता है.
java_binary
नियम में
srcs
के बिना 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 |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. सोर्स फ़ाइल का नाम इस्तेमाल करना बेहतर रहता है. यह ऐप्लिकेशन का मुख्य एंट्री पॉइंट होता है (इसमें एक्सटेंशन को शामिल नहीं किया जाता). उदाहरण के लिए, अगर आपका एंट्री पॉइंट Main.java कहा जाता है, तो आपका नाम Main हो सकता है.
|
deps
|
लेबल की सूची; डिफ़ॉल्ट deps के बारे में सामान्य टिप्पणियां देखें.
|
srcs
|
लेबल की सूची; डिफ़ॉल्ट
नियम: अगर नियम (आम तौर पर
यह आर्ग्युमेंट करीब-करीब हमेशा ज़रूरी होता है. हालांकि, अगर
|
resources
|
लेबल की सूची; डिफ़ॉल्ट
अगर संसाधनों के बारे में बताया गया, तो उन्हें कंपाइलेशन के ज़रिए बनाई गई सामान्य
रिसॉर्स, सोर्स फ़ाइलें या जनरेट की गई फ़ाइलें हो सकती हैं. |
classpath_resources
|
लेबल की सूची; डिफ़ॉल्ट
संसाधनों की एक सूची, जो Java ट्री के रूट में मौजूद होनी चाहिए. इस एट्रिब्यूट का मकसद सिर्फ़ तीसरे पक्ष की लाइब्रेरी के लिए काम करना है, जिसके लिए ज़रूरी है कि उनके संसाधन, क्लासपाथ पर ठीक |
create_executable
|
बूलियन; कॉन्फ़िगर नहीं किया जा सकता; डिफ़ॉल्ट है java_single_jar का इस्तेमाल करें.
|
deploy_env
|
लेबल की सूची; डिफ़ॉल्ट java_binary टारगेट की सूची जो इस बाइनरी के लिए डिप्लॉयमेंट
एनवायरमेंट दिखाते हैं.
यह एट्रिब्यूट, ऐसा प्लग इन बनाते समय सेट करें जिसे किसी दूसरे
java_binary से लोड किया जाएगा.इस एट्रिब्यूट को सेट करने पर, इस बाइनरी के रनटाइम क्लासपाथ (और डिप्लॉय जार) की वे सभी डिपेंडेंसी शामिल नहीं होती हैं जो इस बाइनरी और deploy_env में तय किए गए टारगेट के बीच शेयर की जाती हैं.
|
deploy_manifest_lines
|
स्ट्रिंग की सूची; डिफ़ॉल्ट META-INF/manifest.mf फ़ाइल में जोड़ने के लिए लाइनों की सूची, जो
*_deploy.jar टारगेट के लिए जनरेट हुई है. इस एट्रिब्यूट के कॉन्टेंट की जगह नहीं है,
पर "वैरिएबल बनाएं" की जगह लागू होगी.
|
javacopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट ग्लोबल कंपाइलर विकल्पों के बाद, ये कंपाइलर विकल्प javac को पास किए जाते हैं. |
jvm_flags
|
स्ट्रिंग की सूची; डिफ़ॉल्ट Java बाइनरी के लिए रैपर स्क्रिप्ट में एक CLASSPATH परिभाषा
(सभी डिपेंडेंट जार ढूंढने के लिए) शामिल है और सही Java इंटरप्रेटर को शुरू करती है.
रैपर स्क्रिप्ट से जनरेट की जाने वाली कमांड लाइन में, मुख्य क्लास का नाम होता है.
इसके बाद, ध्यान दें कि इस एट्रिब्यूट का |
launcher
|
लेबल; डिफ़ॉल्ट bin/java प्रोग्राम के बजाय, एक ऐसी बाइनरी बनाएं जिसका इस्तेमाल आपके Java प्रोग्राम को चलाने के लिए किया जाएगा.
टारगेट cc_binary होना चाहिए.
Java इनवोकेशन एपीआई
को लागू करने वाले किसी भी cc_binary को इस एट्रिब्यूट की वैल्यू के तौर पर सेट किया जा सकता है.
डिफ़ॉल्ट रूप से, Basel सामान्य JDK लॉन्चर (bin/java या java.exe) का इस्तेमाल करेगा. इससे जुड़े ध्यान दें कि आपकी नेटिव (C++, SWIG, JNI) डिपेंडेंसी इस हिसाब से अलग-अलग होंगी कि आपने JDK लॉन्चर का इस्तेमाल किया है या किसी दूसरे लॉन्चर का:
डिफ़ॉल्ट JDK लॉन्चर के अलावा, किसी दूसरे लॉन्चर का इस्तेमाल करने पर, |
main_class
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर main() तरीके वाली क्लास का नाम.
अगर किसी नियम में इस विकल्प का इस्तेमाल किया जाता है, तो उसके लिए srcs=[...] सूची की ज़रूरत नहीं होती.
इसलिए, इस एट्रिब्यूट का इस्तेमाल करके किसी Java लाइब्रेरी से एक्ज़ीक्यूटेबल बनाया जा सकता है जिसमें पहले से ही
एक या एक से ज़्यादा main() तरीके होते हैं.
इस एट्रिब्यूट की वैल्यू, क्लास का नाम है, न कि सोर्स फ़ाइल. रनटाइम के दौरान क्लास उपलब्ध होनी चाहिए: ऐसा हो सकता है कि इसे इस नियम ( |
plugins
|
लेबल की सूची; डिफ़ॉल्ट java_plugin चलाया जाएगा. लाइब्रेरी में उन डिपेंडेंसी से प्लगिन भी इनहेरिट किए जा सकते हैं जो
exported_plugins का इस्तेमाल करती हैं. प्लगिन
से जनरेट किए गए रिसॉर्स को, इस नियम के नतीजे में मिलने वाले जार में शामिल किया जाएगा.
|
resource_jars
|
लेबल की सूची; डिफ़ॉल्ट |
resource_strip_prefix
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर
अगर बताया गया है, तो |
runtime_deps
|
लेबल की सूची; डिफ़ॉल्ट deps की तरह, ये रनटाइम क्लासपाथ पर दिखेंगे, लेकिन
इनकी तरह नहीं होंगे, न कि कंपाइल-टाइम क्लासपाथ पर. सिर्फ़ रनटाइम के समय ज़रूरी डिपेंडेंसी की जानकारी यहां दी जानी चाहिए. डिपेंडेंसी विश्लेषण टूल को उन टारगेट पर ध्यान नहीं देना चाहिए जो
runtime_deps और deps , दोनों में दिखते हैं.
|
stamp
|
पूर्णांक; डिफ़ॉल्ट
स्टैंप वाली बाइनरी को तब तक फिर से नहीं बनाया जाता, जब तक उनकी डिपेंडेंसी नहीं बदलती. |
use_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)
इस नियम से java_library
और java_binary
नियमों के लिए, पहले से कंपाइल की गई .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 |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट |
constraints
|
स्ट्रिंग की सूची; कॉन्फ़िगर नहीं की जा सकती; डिफ़ॉल्ट रूप से |
exports
|
लेबल की सूची; डिफ़ॉल्ट |
jars
|
लेबल की सूची; ज़रूरी है इस टारगेट पर आधारित Java टारगेट को दी गई JAR फ़ाइलों की सूची. |
neverlink
|
बूलियन; डिफ़ॉल्ट tools.jar .
|
proguard_specs
|
लेबल की सूची; डिफ़ॉल्ट android_binary टारगेट में जोड़ दिया जाएगा.
यहां शामिल की गई फ़ाइलों में सिर्फ़ ऐसे नियम होने चाहिए: -dontnote, -dontwarn,
अटैचिंगनोसाइडइफ़ेक्ट, और -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
: सोर्स वाला संग्रह ("सोर्स जार").
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट deps के बारे में सामान्य टिप्पणियां देखें.
इसके उलट, |
srcs
|
लेबल की सूची; डिफ़ॉल्ट
नियम: अगर नियम (आम तौर पर
यह आर्ग्युमेंट करीब-करीब हमेशा ज़रूरी होता है. हालांकि, अगर
|
data
|
लेबल की सूची; डिफ़ॉल्ट data के बारे में सामान्य टिप्पणियां देखें.
|
resources
|
लेबल की सूची; डिफ़ॉल्ट
अगर संसाधनों के बारे में बताया गया, तो उन्हें कंपाइलेशन के ज़रिए बनाई गई सामान्य
रिसॉर्स, सोर्स फ़ाइलें या जनरेट की गई फ़ाइलें हो सकती हैं. |
exported_plugins
|
लेबल की सूची; डिफ़ॉल्ट java_plugin (जैसे, जानकारी देने वाले प्रोसेसर) की सूची.
|
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 का भी इस्तेमाल करना चाहता है, तो उसे भी उसे अपने |
javacopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट ग्लोबल कंपाइलर विकल्पों के बाद, ये कंपाइलर विकल्प javac को पास किए जाते हैं. |
neverlink
|
बूलियन; डिफ़ॉल्ट tools.jar हैं.
ध्यान दें कि अगर रनटाइम लाइब्रेरी, कंपाइलेशन लाइब्रेरी से अलग है, तो आपको यह पक्का करना होगा कि यह सिर्फ़ उन जगहों पर अलग हो जहां JLS ने कंपाइलर को इनलाइन जाने से रोका हो. साथ ही, यह JLS के आने वाले सभी वर्शन के लिए लागू होना चाहिए. |
plugins
|
लेबल की सूची; डिफ़ॉल्ट java_plugin चलाया जाएगा. लाइब्रेरी में उन डिपेंडेंसी से प्लगिन भी इनहेरिट किए जा सकते हैं जो
exported_plugins का इस्तेमाल करती हैं. प्लगिन
से जनरेट किए गए रिसॉर्स को, इस नियम के नतीजे में मिलने वाले जार में शामिल किया जाएगा.
|
proguard_specs
|
लेबल की सूची; डिफ़ॉल्ट android_binary टारगेट में जोड़ दिया जाएगा.
यहां शामिल की गई फ़ाइलों में सिर्फ़ ऐसे नियम होने चाहिए: -dontnote, -dontwarn,
अटैचिंगनोसाइडइफ़ेक्ट, और -keep से शुरू होने वाले नियम. अन्य विकल्प सिर्फ़
android_binary के ProGuard_specs में दिखाए जा सकते हैं, ताकि यह पक्का किया जा सके कि वे ऑटोलॉजिकल तरीके से मर्ज न किए गए हों.
|
resource_jars
|
लेबल की सूची; डिफ़ॉल्ट |
resource_strip_prefix
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर
अगर बताया गया है, तो |
runtime_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(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_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
|
लेबल की सूची; डिफ़ॉल्ट
संसाधनों की एक सूची, जो Java ट्री के रूट में मौजूद होनी चाहिए. इस एट्रिब्यूट का मकसद सिर्फ़ तीसरे पक्ष की लाइब्रेरी के लिए काम करना है, जिसके लिए ज़रूरी है कि उनके संसाधन, क्लासपाथ पर ठीक |
create_executable
|
बूलियन; कॉन्फ़िगर नहीं किया जा सकता; डिफ़ॉल्ट है java_single_jar का इस्तेमाल करें.
|
deploy_manifest_lines
|
स्ट्रिंग की सूची; डिफ़ॉल्ट META-INF/manifest.mf फ़ाइल में जोड़ने के लिए लाइनों की सूची, जो
*_deploy.jar टारगेट के लिए जनरेट हुई है. इस एट्रिब्यूट के कॉन्टेंट की जगह नहीं है,
पर "वैरिएबल बनाएं" की जगह लागू होगी.
|
javacopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट ग्लोबल कंपाइलर विकल्पों के बाद, ये कंपाइलर विकल्प javac को पास किए जाते हैं. |
jvm_flags
|
स्ट्रिंग की सूची; डिफ़ॉल्ट Java बाइनरी के लिए रैपर स्क्रिप्ट में एक CLASSPATH परिभाषा
(सभी डिपेंडेंट जार ढूंढने के लिए) शामिल है और सही Java इंटरप्रेटर को शुरू करती है.
रैपर स्क्रिप्ट से जनरेट की जाने वाली कमांड लाइन में, मुख्य क्लास का नाम होता है.
इसके बाद, ध्यान दें कि इस एट्रिब्यूट का |
launcher
|
लेबल; डिफ़ॉल्ट bin/java प्रोग्राम के बजाय, एक ऐसी बाइनरी बनाएं जिसका इस्तेमाल आपके Java प्रोग्राम को चलाने के लिए किया जाएगा.
टारगेट cc_binary होना चाहिए.
Java इनवोकेशन एपीआई
को लागू करने वाले किसी भी cc_binary को इस एट्रिब्यूट की वैल्यू के तौर पर सेट किया जा सकता है.
डिफ़ॉल्ट रूप से, Basel सामान्य JDK लॉन्चर (bin/java या java.exe) का इस्तेमाल करेगा. इससे जुड़े ध्यान दें कि आपकी नेटिव (C++, SWIG, JNI) डिपेंडेंसी इस हिसाब से अलग-अलग होंगी कि आपने JDK लॉन्चर का इस्तेमाल किया है या किसी दूसरे लॉन्चर का:
डिफ़ॉल्ट JDK लॉन्चर के अलावा, किसी दूसरे लॉन्चर का इस्तेमाल करने पर, |
main_class
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर main() तरीके वाली क्लास का नाम.
अगर किसी नियम में इस विकल्प का इस्तेमाल किया जाता है, तो उसके लिए srcs=[...] सूची की ज़रूरत नहीं होती.
इसलिए, इस एट्रिब्यूट का इस्तेमाल करके किसी Java लाइब्रेरी से एक्ज़ीक्यूटेबल बनाया जा सकता है जिसमें पहले से ही
एक या एक से ज़्यादा main() तरीके होते हैं.
इस एट्रिब्यूट की वैल्यू, क्लास का नाम है, न कि सोर्स फ़ाइल. रनटाइम के दौरान क्लास उपलब्ध होनी चाहिए: ऐसा हो सकता है कि इसे इस नियम ( |
plugins
|
लेबल की सूची; डिफ़ॉल्ट java_plugin चलाया जाएगा. लाइब्रेरी में उन डिपेंडेंसी से प्लगिन भी इनहेरिट किए जा सकते हैं जो
exported_plugins का इस्तेमाल करती हैं. प्लगिन
से जनरेट किए गए रिसॉर्स को, इस नियम के नतीजे में मिलने वाले जार में शामिल किया जाएगा.
|
resource_jars
|
लेबल की सूची; डिफ़ॉल्ट |
resource_strip_prefix
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर
अगर बताया गया है, तो |
runtime_deps
|
लेबल की सूची; डिफ़ॉल्ट deps की तरह, ये रनटाइम क्लासपाथ पर दिखेंगे, लेकिन
इनकी तरह नहीं होंगे, न कि कंपाइल-टाइम क्लासपाथ पर. सिर्फ़ रनटाइम के समय ज़रूरी डिपेंडेंसी की जानकारी यहां दी जानी चाहिए. डिपेंडेंसी विश्लेषण टूल को उन टारगेट पर ध्यान नहीं देना चाहिए जो
runtime_deps और deps , दोनों में दिखते हैं.
|
stamp
|
पूर्णांक; डिफ़ॉल्ट
स्टैंप वाली बाइनरी को तब तक फिर से नहीं बनाया जाता, जब तक उनकी डिपेंडेंसी नहीं बदलती. |
test_class
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर
डिफ़ॉल्ट रूप से, अगर यह आर्ग्युमेंट सेट नहीं किया गया है, तो लेगसी मोड का इस्तेमाल किया जाता है.
साथ ही, उसकी जगह जांच वाले आर्ग्युमेंट इस्तेमाल किए जाते हैं. पहले आर्ग्युमेंट पर, फ़ॉलबैक न करने के लिए,
यह एट्रिब्यूट, इस टेस्ट से चलाई जाने वाली Java क्लास का नाम बताता है. इसे सेट करने की ज़रूरत कभी-कभार ही होती है. अगर इस तर्क को छोड़ दिया जाता है, तो इसका अनुमान टारगेट के
JUnit3 के लिए, टेस्ट क्लास को या तो
इस एट्रिब्यूट की मदद से, |
use_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 s के उस सेट पर
कॉन्फ़िगरेशन लागू होना चाहिए.
|
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
, Basel के चलाए जा रहे 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
|
बूलियन; डिफ़ॉल्ट अगर कोई नियम, एपीआई जनरेट करने वाले एनोटेशन प्रोसेसर का इस्तेमाल करता है, तो उस पर निर्भर दूसरे नियम, जनरेट किए गए कोड को सिर्फ़ तब रेफ़र कर सकते हैं, जब उनके कंपाइलेशन ऐक्शन, जनरेट करने वाले नियम के बाद शेड्यूल किए गए हों. --java_header_compilation चालू होने पर, यह एट्रिब्यूट Basel को शेड्यूलिंग कंस्ट्रेंट लागू करने का निर्देश देता है. चेतावनी: इस एट्रिब्यूट से बिल्ड की परफ़ॉर्मेंस पर असर पड़ता है. ज़रूरी होने पर ही इसका इस्तेमाल करें. |
javacopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट ग्लोबल कंपाइलर विकल्पों के बाद, ये कंपाइलर विकल्प javac को पास किए जाते हैं. |
neverlink
|
बूलियन; डिफ़ॉल्ट tools.jar हैं.
ध्यान दें कि अगर रनटाइम लाइब्रेरी, कंपाइलेशन लाइब्रेरी से अलग है, तो आपको यह पक्का करना होगा कि यह सिर्फ़ उन जगहों पर अलग हो जहां JLS ने कंपाइलर को इनलाइन जाने से रोका हो. साथ ही, यह JLS के आने वाले सभी वर्शन के लिए लागू होना चाहिए. |
output_licenses
|
लाइसेंस का टाइप, common attributes
देखें
|
plugins
|
लेबल की सूची; डिफ़ॉल्ट java_plugin चलाया जाएगा. लाइब्रेरी में उन डिपेंडेंसी से प्लगिन भी इनहेरिट किए जा सकते हैं जो
exported_plugins का इस्तेमाल करती हैं. प्लगिन
से जनरेट किए गए रिसॉर्स को, इस नियम के नतीजे में मिलने वाले जार में शामिल किया जाएगा.
|
processor_class
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर |
proguard_specs
|
लेबल की सूची; डिफ़ॉल्ट android_binary टारगेट में जोड़ दिया जाएगा.
यहां शामिल की गई फ़ाइलों में सिर्फ़ ऐसे नियम होने चाहिए: -dontnote, -dontwarn,
अटैचिंगनोसाइडइफ़ेक्ट, और -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 के लिए डिफ़ॉल्ट CDS संग्रह. जब किसी java_binary टारगेट के लिए हर्मेटिक चालू होता है और टारगेट classlist एट्रिब्यूट की जानकारी देकर अपना खुद का CDS संग्रह उपलब्ध नहीं कराता है,
तो java_runtime डिफ़ॉल्ट CDS को हर्मेटिक डिप्लॉयमेंट जेएआर में पैकेज किया जाता है.
|
hermetic_srcs
|
लेबल की सूची; डिफ़ॉल्ट |
java
|
लेबल; डिफ़ॉल्ट |
java_home
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर srcs और java एट्रिब्यूट खाली होने चाहिए.
|
lib_ct_sym
|
लेबल; डिफ़ॉल्ट --release के साथ कंपाइलेशन के लिए lib/ct.sim फ़ाइल की ज़रूरत है. अगर इसके बारे में नहीं बताया गया है और
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 का लेबल डिप्लॉय जार. |
header_compiler
|
लेबल की सूची; डिफ़ॉल्ट |
header_compiler_direct
|
लेबल की सूची; डिफ़ॉल्ट यह टूल, एनोटेशन प्रोसेस करने की सुविधा नहीं देता है. |
ijar
|
लेबल की सूची; ज़रूरी है एक्ज़ीक्यूटेबल iJर का लेबल. |
jacocorunner
|
लेबल; डिफ़ॉल्ट |
java_runtime
|
लेबल; ज़रूरी है इस टूलचेन के साथ इस्तेमाल किया जाने वाला java_runtime. प्रोग्राम चलाने के कॉन्फ़िगरेशन में, यह डिफ़ॉल्ट रूप से java_runtime की वैल्यू पर सेट होता है. |
javabuilder
|
लेबल की सूची; ज़रूरी है Javaबिल्डर डिप्लॉय जार का लेबल. |
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 डिप्लॉय जार का लेबल. |
source_version
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर |
target_version
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर |
timezone_data
|
लेबल; डिफ़ॉल्ट |
tools
|
लेबल की सूची; डिफ़ॉल्ट |
turbine_data
|
लेबल की सूची; डिफ़ॉल्ट |
turbine_jvm_opts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट |
xlint
|
स्ट्रिंग की सूची; डिफ़ॉल्ट |