मैं प्लगइन लिखने की कोशिश कर रहा हूं जो प्लगइन एक्सटेंशन ऑब्जेक्ट में एकत्रित सूचनाओं के अनुसार project.dependencies
पर निर्भरता जोड़ता है। लेकिन ऐसा असंभव प्रतीत होता है।ग्रैडल कस्टम प्लगइन: एक्सटेंशन ऑब्जेक्ट से निर्भरता जोड़ें
वास्तव में, एक्सटेंशन ऑब्जेक्ट का डेटा केवल एक नए कार्य में उपलब्ध है या project.afterEvaluate
बंद में है, लेकिन उन स्थानों में जोड़े गए निर्भरताओं को अनदेखा कर दिया जाता है।
निम्नलिखित कोड afterEvaluate
में निर्भरता को जोड़ने के लिए कोशिश करता है लेकिन निर्भरता को नजरअंदाज कर दिया जाता है:
apply plugin: MyPlugin
myplugin {
version '1.0'
}
class MyPlugin implements Plugin<Project> {
void apply(Project project) {
project.extensions.create('myplugin', MyPluginExtension)
project.afterEvaluate {
def version = project.myplugin.version
project.dependencies.add("compile", "org.foo:bar:$version") // --> ignored
}
}
}
class MyPluginExtension {
def version
}
निम्न कोड में निर्भरता इंजेक्शन काम करता है, लेकिन मैं करने के लिए पहुँच नहीं है एक्सटेंशन ऑब्जेक्ट:
apply plugin: MyPlugin
myplugin {
version '1.0'
}
class MyPlugin implements Plugin<Project> {
void apply(Project project) {
project.extensions.create('myplugin', MyPluginExtension)
def version = project.myplugin.version // == null
project.dependencies.add("compile", "org.foo:bar:$version") // --> fail because $version is null
}
}
class MyPluginExtension {
def version
}
क्या कोई समाधान है? अगर है कि अभी भी प्रासंगिक है
आप विस्तार तक पहुँचने, एक ही रास्ता या किसी अन्य रूप में स्थगित करना होगा। यह मुझे स्पष्ट नहीं है कि 'project.afterEvalalu' में निर्भरता जोड़ने क्यों काम नहीं करेगा। प्लगइन का उपयोग करने वाले कोड के साथ समस्या हो सकती है। –
धन्यवाद, मैंने स्पष्ट रहने के लिए कोड को सरल बना दिया है, आप संपूर्ण कोड [यहां] (https://github.com/tbruyelle/ResetUnreadSms/blob/aa-plugin/build.gradle) पा सकते हैं। यह पुस्तकालय के लिए एक एंड्रॉइड प्लगइन है जो एनोटेशन से जावा कक्षाएं उत्पन्न करता है। प्लगइन एक्सटेंशन ऑब्जेक्ट्स के बिना अच्छी तरह से काम करता है, लेकिन अगर मैं विस्तार वस्तुओं से डेटा के साथ निर्भरता इंजेक्ट करना चाहता हूं तो विफल रहता है, जैसा कि प्रश्न में बताया गया है। – tbruyelle
सीसी @ पीटर Niederwieser अगर आपको मेरे उत्तर से अधिसूचित नहीं किया गया है ... – tbruyelle