關(guān)于android gradle 開(kāi)源到j(luò)center上的問(wèn)題

前幾天突然心血來(lái)潮準(zhǔn)備開(kāi)始分享自己寫(xiě)的代碼,然后在上傳到j(luò)center的時(shí)候遇到了各種個(gè)樣的問(wèn)題,有了一些自己的心得,所以決定把這個(gè)作為我簡(jiǎn)書(shū)第一篇文章


首先基礎(chǔ)的東西我不說(shuō)了,只是說(shuō)一下我遇到的一些問(wèn)題和解決方法。

建立Repository的問(wèn)題

在jcenter上建立帳號(hào)完后,需要建立一個(gè)自己Repositories ,在配置的過(guò)程中,需要填寫(xiě)這個(gè)Repositories的名字,需要在gradle配置中對(duì)應(yīng)上。
例如:我在jcnter上建立了一個(gè)名字為repo,類型為maven的倉(cāng)庫(kù),然后在gradle配置上要對(duì)應(yīng)上,我看網(wǎng)上很多人都寫(xiě)的maven,其實(shí)這個(gè)名字是隨意的。

  bintray {   user = properties.getProperty("bintray.user")    
                key = properties.getProperty("bintray.key")    
                   configurations = ['jcenter_upload'] //使用自己的配置    
                   pkg {        
                        repo = "repo"        //這個(gè)是在jcenter上建立的倉(cāng)庫(kù)名字,其實(shí)就是一個(gè)組織結(jié)構(gòu),例如,你可以在自己的賬戶上建立一個(gè)jcenter,然后在這個(gè)jcenter上建立這個(gè)package。此時(shí)這個(gè)repo就寫(xiě)jcenter                   
                       name = POM_ARTIFACT_ID //發(fā)布到Bintray上的項(xiàng)目名字        
                      websiteUrl = POM_URL        
                      vcsUrl = POM_SCM_CONNECTION        
                      licenses = ["Apache-2.0"]        
                     publish = true    
              }
      }

而且,你也要理解,jcenter其實(shí)也是一個(gè)倉(cāng)庫(kù)的名字,但是人家的倉(cāng)庫(kù)非常的大,所以變成了公用的了,而我們開(kāi)源到j(luò)center上的jar,aar等,都是先上傳到我們自己的倉(cāng)庫(kù)上,然后jcenter的管理者為我們加入了某種功能,可以讓我們倉(cāng)庫(kù)的package ,link 到j(luò)center上。


關(guān)于module和artifactid不一致的問(wèn)題

我遇到的最大的問(wèn)題就是上傳代碼的問(wèn)題。我弄了半天才搞好。問(wèn)題產(chǎn)生的原因是這樣的,我開(kāi)源的是一個(gè)android 的aar文件,然后在我的工程里,這個(gè)開(kāi)源的aar文件是一個(gè)module,我起了個(gè)library的名字,就是因?yàn)槲议_(kāi)源的東西使用的是一個(gè)module,而且名字不是我開(kāi)源的artifactID的名字,導(dǎo)致我每次上傳到j(luò)center的pom,aar,jar等文件都是一個(gè)module的名字開(kāi)頭的,所以jcenter也會(huì)按照這個(gè)名字組織這個(gè)jar的坐標(biāo)。
eg:
我的group是com.github.yujintao529,然后artifact的名字mixdpic。所以 我希望上傳到j(luò)center的坐標(biāo)是com/github/yujintao529/mixdpic/version
但是由于jcenter提供的插件默認(rèn)用的module的名字,所以上傳到j(luò)center的東西變成了com/github/yujintao529/library/version。

經(jīng)過(guò)我的努力探索,解決方案如下:( gradle的知識(shí)不在說(shuō)了)
自定一個(gè)configuration名字叫jcenter_upload,改變?cè)揳ar文件的名字

  android {    
       libraryVariants.all { variant ->       
          variant.outputs.each { output ->            
               output.outputFile = new File( output.outputFile.parent, 
                  POM_ARTIFACT_ID + ".aar".toLowerCase())        
          }    
      }
 }
  configurations.create("jcenter_upload")

然后把生成的androidSourcesJar,androidJavadocsJar和aar文件添加進(jìn)去

  task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {    
        classifier = 'javadoc'    
        baseName = POM_ARTIFACT_ID    
        from androidJavadocs.destinationDir 
  }
  task androidSourcesJar(type: Jar) {    
         classifier = 'sources'    
         baseName = POM_ARTIFACT_ID    
         from android.sourceSets.main.java.source
   }


artifacts {   
   add("jcenter_upload",androidSourcesJar)    
   add("jcenter_upload",androidJavadocsJar)        
   add("jcenter_upload",project.file("build/outputs/aar/mixdpic.aar"))   
}

最后修改mavenInstaller和bintray使用的configuration

    repositories.mavenInstaller {    
         configuration =   configurations.jcenter_upload    
         pom.groupId = GROUP    
         pom.artifactId = POM_ARTIFACT_ID
         *****
    }
    bintray {    
        configurations = ['jcenter_upload'] 
        ****
    }

這樣就可以正確的上傳了。

其實(shí)這個(gè)地方似乎有個(gè)bug,默認(rèn)情況下,jcenter的插件是使用名字是archives的configuration,最開(kāi)始我的想法就是直接使用這個(gè),但是如果把jcenter_upload換成archives,docJar和sourceJar可以正確的上傳,但是aar文件還是module的名字。最開(kāi)始我以為archives的里面需要發(fā)布的file沒(méi)有改過(guò)來(lái),所以我特意打印了出來(lái)

  install {
     doLast {
        def configuration = project.configurations.getByName("archives")//獲取名字為archives的configuration
        def files = configuration.getArtifacts().files.getFiles()//獲取artifacts 發(fā)布的文件
        System.out.println("doLast files length "+files.size())
        files.each { file ->
            System.out.println("files " + file.getName())
        }
    }
}

結(jié)果驚奇的發(fā)現(xiàn),結(jié)果是正確并沒(méi)有出現(xiàn)library的名字,但是它上傳的時(shí)候就是會(huì)出現(xiàn)問(wèn)題,他們插件的網(wǎng)站也有這個(gè)issues而且,我還留了言。所以最后迫不得已,我自己創(chuàng)造一個(gè)configuration,就不會(huì)出現(xiàn)問(wèn)題了。

具體的例子可以看我的這個(gè)project


結(jié)尾

總結(jié)一下,因?yàn)榈谝淮伟l(fā)文章,文章的組織結(jié)構(gòu)不是很好,有些亂,但是出現(xiàn)的這個(gè)問(wèn)題,還是很有參考價(jià)值的。從中需要學(xué)習(xí)很多gradle的知識(shí)和增長(zhǎng)了解決問(wèn)題的能力。還有大家不要去盲目的去百度看別人怎么寫(xiě),直接超過(guò)來(lái)用,每個(gè)人的問(wèn)題可能不一樣,所以很可能會(huì)給你造成的困擾,一定要培養(yǎng)出自己解決問(wèn)題的能力,這里包括查看文檔,代碼,調(diào)試等等一些列的知識(shí)面。


哈哈,原來(lái)可以直接設(shè)置archives的名字~~:
參考:project.archivesBaseName

qq :371278842

email:yujintao529@163.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容