2016-04-01 19 views
8

निर्माण मैं अपने uploadArhives Maven के भंडार .aar प्रकाशन किया है।एंड्रॉयड Gradle uploadArchives जब

लेकिन मुझे हर समय कंसोल से gradlew uploadArhives चलाने की ज़रूरत है, इसे प्रत्येक बिल्ड के साथ या रिलीज बिल्ड के साथ कैसे कोड करने के लिए कोड करना है?

uploadArchives { 
    repositories { 
     mavenDeployer { 
      def credentials = [ 
        userName: NEXUS_USERNAME, 
        password: NEXUS_PASSWORD 
      ] 
      repository(url: MAVEN_REPO_URL, authentication: credentials) 
      pom.artifactId = 'aaa' 
      pom.version = version 
      pom.packaging = 'aar' 
      pom.groupId = 'bbb' 

     } 
    } 
} 

संपादित:

के रूप में मुझे लगता है कि, हम परिभाषित कर सकते हैं समारोह:

def uploadToMaven = { 
    uploadArchives 
} 

लेकिन कैसे हर निर्माण के साथ इसे निष्पादित करने के लिए?

+0

आप एक travis.ci या निर्माण स्वचालन स्क्रिप्ट (.sh फ़ाइल) का एक और प्रकार बनाने के बारे में सोचा है के लिए करने की कोशिश की? निश्चित रूप से gradlew या किसी अन्य टर्मिनल उपकरण में ऐप बनाने के लिए एक विकल्प है। वहां से प्रत्येक बार जब आप इन क्रियाओं को निष्पादित करना चाहते हैं, तो अपनी बिल्ड स्क्रिप्ट चलाने के जितना आसान होगा। –

उत्तर

2

मेरे पास कई मॉड्यूल और एक मुख्य एप्लिकेशन के साथ एक जटिल परियोजना है। मैंने इन मॉड्यूल में से दो पर "अपलोडआर्चिव्स" जोड़ा (क्योंकि एंड्रॉइड लाइब्रेरीज़ हैं)। इस तरह से मैं अपने मुख्य अनुप्रयोग से कार्य अपलोड करने के लिए मेवेन पर अपने पुस्तकालयों को प्रकाशित कर सकता हूं, या ग्रेडल का उपयोग करके और इस कार्य को "अपलोडआर्किव" कह रहा हूं।

आप "build.finalizedBy (uploadArchives)" (पुस्तकालय है कि आप प्रकाशित करना चाहते हैं के) अपने build.gradle में इस का उपयोग कर सकते हैं।

उदाहरण के लिए:

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     minSdkVersion 17 
     targetSdkVersion 23 
     versionCode 2 
     versionName "2.0" 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 


    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_7 
     targetCompatibility JavaVersion.VERSION_1_7 
    } 

    lintOptions { 
     abortOnError false 
    } 


} 


build.finalizedBy(uploadArchives) 

task wrapper(type: Wrapper) { 
    gradleVersion = "2.8" 
} 

dependencies { 
    compile project(':spfshared') 
    compile 'com.google.code.gson:gson:2.4' 
} 

//task for Sonatype Nexus OSS 
uploadArchives { 
    repositories { 
     mavenDeployer { 
      repository(
        url: "${nexusUrl}/content/repositories/releases") { 
       authentication(userName: nexusUsername, password: nexusPassword) 
      } 
      snapshotRepository(
        url: "${nexusUrl}/content/repositories/snapshots") { 
       authentication(userName: nexusUsername, password: nexusPassword) 
      } 

      pom.version = "2.0.0.1" 
      pom.artifactId = "spflib" 
      pom.groupId = "it.polimi.spf" 
     } 
    } 
} 

हर निर्माण के बाद, uploadArchives होगा शुरू होता है।

मैंने इस समाधान की कोशिश की और यह काम करता है।

मैं भी सफलता नहीं मिली "build.dependsOn myTaskName" के साथ कुछ समाधान की कोशिश की। यदि आप चाहते हैं कि आप कोशिश कर सकते हैं, लेकिन मेरे एंड्रॉइडस्टूडियो पर, पहला समाधान यह काम करता है।

पुनश्च: मैं अपने समाधान आदेश का उपयोग "gradlew -q निर्माण" और भी विशेष रूप से कार्य एंड्रॉयड स्टूडियो में अपने मुख्य मॉड्यूल से "का निर्माण" (यह है कि यह अपने मुख्य अनुप्रयोग है) चल रहा का परीक्षण किया।

आप हर रिहाई पर "uploadArchives" कॉल करना चाहते हैं, तो बस रिहाई कार्य के साथ "का निर्माण" की जगह।

अद्यतन: मैं इन codelines साथ भी करने की कोशिश की:

defaultTasks 'uploadArchives' 

clean.finalizedBy(uploadArchives) 
assembleDebug.finalizedBy(uploadArchives) 
assembleRelease.finalizedBy(uploadArchives) 

लेकिन कभी कभी वे "uploadArchives" कई बार फोन और मुझे लगता है कि यह एक अच्छा विचार नहीं है।

क्या आप बहुत ही चुनौतीपूर्ण है पूछ रहे हैं ... मैं एक पूरी घंटे :)

+0

हां, यह बहुत अच्छा काम करता है! लेकिन जब मैं "gradlew -q build" टाइप करता हूं तो यह काम कर रहा है। मैं प्रत्येक निर्माण के साथ कलाकृतियों को कैसे अपलोड कर सकता हूं? जब मैं बिल्ड या रन बटन दबाता हूं? –

+0

तो टाइपिंग के लायक 'gradlew -q build'' gradlew uploadArhives ' –

+1

किसी अन्य प्रयोगात्मक समाधान के साथ अपडेट किया गया :) –

2

बस अपने build.gradle को यह पंक्ति जोड़ें:

build.finalizedBy(uploadArchives) 

इस निर्माण कार्य और uploadArchives कार्य, जैसे कि uploadArchives स्वचालित रूप से हर कहा जाता है जो कार्य निर्भरता का निर्माण सफलतापूर्वक कार्यान्वित पैदा करता है।

+0

और इसे कहां रखा जाए? मैंने 'मूल्यांकन के बाद {प्रोजेक्ट ->' में कोशिश की लेकिन यह –

+0

की मदद नहीं करता है बस इसे अपने build.gradle के रूट स्तर पर रखने का प्रयास करें? – RaGe

+0

मैंने रूट में भी, धीरे-धीरे धीरे-धीरे फ़ाइल में इसे हर जगह रखने की कोशिश की। –

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