Gradle排除依賴模塊的某個類

好久沒寫文章了唉俗,開工第一天來一發(fā)開門紅。既然沒什么可寫的娱仔,就簡單聊聊Gradlew吧沐飘,是Gradle,命令敲多了習(xí)慣加個w,開個小玩笑耐朴。gradle用來構(gòu)建項目可謂是十分的靈活借卧,剛開始接觸也許覺得有點懵,覺得這個東西就是多余的筛峭,但是用多了就真的會愛上它铐刘。
我之前做組件化的時候就碰到鍋這樣一個問題,怎么排除某個類

Gradle怎么排除所依賴的模塊的某各類

其實我覺得在很多的情況下都會碰到這個問題蜒滩,比如你的老大寫了個BaseModule滨达,里面有很多東西,你就沒必要造輪子了俯艰,但是其實你這個項目中用不到這么多捡遍,那就沒必要在打包的時候也把多余的代碼打進去,但是你又不能刪掉竹握,因為很多個模塊都依賴這個Base模塊画株,所以你只能用“排除”的方法來去掉多余的代碼。再比如你自己的模塊和所依賴的模塊有同名類啦辐,包名都相同的那種谓传,那就肯定編譯不過,所以你要排除相同類芹关。甚至還有很多情況需要你在依賴中排除某個類或者某個包续挟。
那么該怎么做?
只要稍微用過gradle構(gòu)建項目的都知道侥衬,如果我們在依賴時出現(xiàn)了相同的jar包诗祸,我們是可以排除的

implementation fileTree(include: ['*.jar'], dir: '../balabala/balabala', exclude: ['重復(fù)包1.jar', '重復(fù)包2.jar'])

這樣確實能排除某個jar包來達到解決jar包重復(fù)的問題,但是用這種方法你能排除到某個類嗎轴总?不能直颅。
比如一般新手寫依賴module都會這樣寫

 implementation project(':testModule')

然后你想排除這個模塊中的Test.java 這個文件,你能這樣寫嗎怀樟?

 implementation project(':testModule',exclude:['Test.java'])
或者
implementation project(':testModule'){
      exclude :'Test.java'
}

這樣寫肯定不行功偿,可能閉包的寫法寫錯了,我也不太記得這個的閉包怎么弄來著往堡,好像是

implementation(project(':testModule')) {
    exclude group: 'com.xxx.xxx.Test.java', module: 'testModule'
}

還是這個來著

implementation(project(':testModule'){
    exclude group: 'com.xxx.xxx.Test.java', module: 'testModule'
})

但是這樣的做法能排除掉掉這個Test.java嗎械荷?我試過是不行的,如果有朋友能用這種方法排除單個文件請告訴我虑灰。
既然這種方法沒辦法排除類养葵,那么要怎么做?

方案一:放棄implementation project瘩缆,使用sourceSets

sourceSets是java插件的東西,他能把代碼文件導(dǎo)入到相應(yīng)的地方佃蚜,無論是絕對路徑還是相對路徑庸娱,我之前有寫過一篇sourceSets的文章着绊,獲取網(wǎng)上也能找到很多關(guān)于sourceSets的文章,你把目標(biāo)Module的java熟尉、res归露、lib等引進來,即使不使用implementation project的方法斤儿,也能讓這個module能夠獲取到目標(biāo)module的東西剧包。而且使用sourceSets的話可以很方便的exclude某個文件。
但是我覺得這樣的方法不應(yīng)該叫做“依賴”往果,更應(yīng)該叫做“引用”或者“導(dǎo)入”疆液。
所以這種方法更像是一種對文件的操作,copy的感覺陕贮,所以這種方法也就有了不足的地方堕油,假如你在某種情況下需要引用ModuleA,某種情況下引用ModuleB肮之,要么你就加個判斷掉缺,要么就每次都改代碼,要是有兩個還好說戈擒,要是有20幾個Module呢眶明?我們總不能這樣玩吧,就算是能筐高,當(dāng)你每次在gradle中看到這段代碼時搜囱,相信你也會老闊疼。

方案二:在目標(biāo)模塊就進行排除代碼

什么意思呢凯傲?比如說你想要依賴ModuleA犬辰,但是又想排除某些文件,我們可以直接在ModuleA中進行排除冰单,意思是你依賴的ModuleA就已經(jīng)少了你想排除的代碼幌缝。
這樣做的話可以讓依賴的那一方不用考慮特殊情況,雖然像上面說的情況多的時候也要寫挺多代碼诫欠,但是這些邏輯會很清晰涵卵,很容易管理,我個人更傾向于使用這樣的方法也排除單個文件荒叼。哪怕最上面說的implementation project時exclude能夠?qū)崿F(xiàn)轿偎,我依舊更傾向于在某塊本身進行排除。
但是我們要怎樣控制呢被廓,難道每次都要去修改多個gradle文件嗎坏晦?其實在gradle中我們可以使用全局變量。

1.創(chuàng)建一個config.gradle寫變量
// 配置全局變量
ext{
    configOne = [isRealy:true]
}

假設(shè)我這樣有一種情況,叫configOne 昆婿,這種情況下isRealy這個值是true球碉,這種情況下我們要在引用模塊時排除掉某個類。

2.在全局gradle中引用config.gradle
apply from: 'config.gradle'
......
3.在目標(biāo)gradle中加入構(gòu)建邏輯

假如我的目標(biāo)模塊 Moudle->myone中有兩個類OneLog仓蛆、TwoLog睁冬,然后我想在A模塊依賴時這兩個類都有,在B模塊依賴時沒有TwoLog看疙。
在myone的gradle寫

def configOne = rootProject.ext.configOne
android {
    .....

     sourceSets{
        main{
            java{
                if(configOne.isRealy) {
                    exclude 'com/example/kylin/myone/TwoLog.java'
                }
            }
        }
    }

}

然后我們在A模塊引用時豆拨,把isRealy改成false,在B模塊引用時把isRealy改成true這樣就行了能庆。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末施禾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子相味,更是在濱河造成了極大的恐慌拾积,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丰涉,死亡現(xiàn)場離奇詭異拓巧,居然都是意外死亡,警方通過查閱死者的電腦和手機一死,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門肛度,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人投慈,你說我怎么就攤上這事承耿。” “怎么了伪煤?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵加袋,是天一觀的道長。 經(jīng)常有香客問我抱既,道長职烧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任防泵,我火速辦了婚禮蚀之,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捷泞。我一直安慰自己足删,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布锁右。 她就那樣靜靜地躺著失受,像睡著了一般讶泰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贱纠,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天峻厚,我揣著相機與錄音,去河邊找鬼谆焊。 笑死,一個胖子當(dāng)著我的面吹牛浦夷,可吹牛的內(nèi)容都是我干的辖试。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼劈狐,長吁一口氣:“原來是場噩夢啊……” “哼罐孝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肥缔,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤莲兢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后续膳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體改艇,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年坟岔,在試婚紗的時候發(fā)現(xiàn)自己被綠了谒兄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡社付,死狀恐怖承疲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸥咖,我是刑警寧澤燕鸽,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站啼辣,受9級特大地震影響啊研,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜熙兔,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一悲伶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧住涉,春花似錦麸锉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柳爽。三九已至,卻和暖如春碱屁,著一層夾襖步出監(jiān)牢的瞬間磷脯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工娩脾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赵誓,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓柿赊,卻偏偏與公主長得像俩功,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子碰声,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 版權(quán)聲明:本文為博主原創(chuàng)文章诡蜓,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/zhaoyanj...
    勤奮的pangdunhu閱讀 2,038評論 0 1
  • 說明 本文主要介紹和Gradle關(guān)系密切胰挑、相對不容易理解的配置蔓罚,偏重概念介紹。部分內(nèi)容是Android特有的(例如...
    jzj1993閱讀 15,635評論 1 62
  • 在 Android Studio 構(gòu)建的項目中瞻颂,基于 Gradle 進行項目的構(gòu)建豺谈,同時使用 Android DS...
    Ant_way閱讀 7,365評論 0 16
  • 不要讓過去成為現(xiàn)在的包袱,輕裝上陣才能走得更遠蘸朋。人的心靈就像一個容器核无,時間長了里面難免會有沉渣。時時清空心靈的沉渣...
    考拉的人生閱讀 210評論 0 0
  • 我又回來了藕坯。時隔兩年之久团南,我又選擇了回來,回歸簡書炼彪。 一直都希望自己可以自律吐根,可以堅持一些什么東西。每日打卡該學(xué)習(xí)...
    南程閱讀 339評論 0 1