2014-09-30 18 views
7

का उपयोग कर स्थानीय मैवेन रिपोजिटरी में एकाधिक प्रकार प्रकाशित करें I एंड्रॉइड स्टडल 0.8.11, एंड्रॉइड स्टूडियो 0.8.11, ग्रैडल 2.1 और मेवेन प्लगइन का उपयोग कर रहा हूं।एंड्रॉइड लाइब्रेरी - ग्रैडल

मैं अपने एंड्रॉइड लाइब्रेरी के कई प्रकार (स्वाद + बिल्ड प्रकार) को स्थानीय मैवेन रिपॉजिटरी में एक कमांड (टास्क) के साथ स्थापित करना चाहता हूं।

वर्तमान में एंड्रॉइड ग्रैडल प्लगइन 0.13.2 मुझे सभी प्रकारों को प्रकाशित करने के लिए प्रकाशित नॉनडिफॉल्ट ध्वज सेट करने की अनुमति देता है, लेकिन दस्तावेज़ीकरण के अनुसार यह एक क्लासिफायरफायर के साथ वेरिएंट प्रकाशित करेगा जो मैवेन रिपोजिटरी के साथ संगत नहीं है।

मेरा वर्कअराउंड अभी डिफ़ॉल्ट रूप से उपयोग करने के लिए है "myVariant" और मेरे पास हर संस्करण के लिए इसे बदलें।

apply plugin: 'com.android.library' 
apply plugin: 'maven' 

android { 
    defaultPublishConfig "myVariant" 
    . 
    . 
    . 

} 

task installArchives(type: Upload) { 
    repositories.mavenInstaller { 
     configuration = configurations.getByName(Dependency.DEFAULT_CONFIGURATION) 
     pom.groupId = "com.company" 
     pom.artifactId = "mylibrary" 
     pom.version = "1.0.0-myVariant" 
    } 
} 

मैं एक ऐसा कार्य करना चाहता हूं जो सभी प्रकारों को स्थानीय मैवेन रिपोजिटरी में उचित रूप से प्रकाशित करेगा।

उत्तर

10

इसे हल करने के लिए मुझे प्रत्येक संस्करण के लिए एक अपलोड कार्य बनाना था और उन्हें एक-दूसरे पर और उस प्रक्रिया को शुरू करने वाले मास्टर कार्य पर निर्भर होना था।

apply plugin: 'com.android.library' 
apply plugin: 'maven' 

android { 
    . 
    . 
    . 

} 

// Master task that will publish all variants 
def DefaultTask masterTask = project.tasks.create("installArchives", DefaultTask) 

android.libraryVariants.all { variant -> 
    variant.outputs.each { output -> 

     // Configuration defines which artifacts will be published, create one configuration for each variant output (artifact) 
     def Configuration variantConfiguration = project.configurations.create("${variant.name}Archives") 
     project.artifacts.add(variantConfiguration.name, output.packageLibrary) 

     // Create one Upload type task for each configuration 
     def Upload variantTask = project.tasks.create("${variant.name}Install", Upload) 
     variantTask.configuration = variantConfiguration 
     variantTask.repositories.mavenInstaller { 
      pom.groupId = "com.yourcompany" 
      pom.artifactId = "yourLibrary" 
      pom.version = "1.0.0-${variant.name}" //Give a different version for each variant 
      pom.packaging = "aar" 
     } 

     // Make all tasks depend on each other and on master task 
     masterTask.dependsOn variantTask 
     masterTask = variantTask 
    } 
} 

कार्य installArchives स्थानीय Maven भंडार करने के लिए सभी वेरिएंट प्रकाशित करेंगे।

./gradlew installArchives 
+0

दुर्भाग्य से प्रत्येक संस्करण के लिए pom.xml फ़ाइलें उत्पन्न नहीं होती हैं। क्या आप जानते हैं कि इसे कैसे हल करें? –

+0

@DmitryZaitsev शायद आप प्रत्येक संस्करण के लिए अलग-अलग विन्यास उत्पन्न नहीं कर रहे हैं। यदि आप एक ही कॉन्फ़िगरेशन का उपयोग करते हैं तो यह सभी प्रकारों के लिए एक .pom उत्पन्न नहीं करेगा। – Benites

+0

क्या आप कृपया अपने उत्तर में अधिक जानकारी प्रदान कर सकते हैं? मैंने Google को कोशिश करने में काफी समय बिताया, लेकिन बिना किसी किस्मत के। –

संबंधित मुद्दे