4 回答

TA貢獻1966條經(jīng)驗 獲得超4個贊
gradle provided和compile的區(qū)別在于使用providedCompile的前提是apply plugin: 'war'
1、Gradle compile:
假如你的jar包存在代碼依賴性,在編譯、運行時候需要依賴代碼,那就用compile
例如 :
compile 'org.springframework.boot:spring'
2、Gradle providedCompile:
假如你的jar包存在代碼依賴性,但是在編譯的時候才用得上,而運行時不需要,就用providedCompile
例如:
providedCompile 'org.springframework.boot:spring'

TA貢獻1802條經(jīng)驗 獲得超6個贊
Gradle compile:
如果你的jar包/依賴代碼 在編譯的時候需要依賴,在運行的時候也需要,那么就用compile
例如 :
compile ‘org.springframework.boot:spring-boot-starter-websocket:1.1.6.RELEASE‘
Gradle providedCompile:
如果你的jar包/依賴代碼 僅在編譯的時候需要,但是在運行時不需要依賴,就用providedCompile
例如:
providedCompile ‘org.springframework.boot:spring-boot-starter-tomcat:1.1.6.RELEASE‘

TA貢獻1725條經(jīng)驗 獲得超8個贊
假設(shè)項目引用了類庫 A 和類庫 B ,同時,這兩個類庫都依賴包 C 。
1. 如果 A 、B 、C 均為 Maven 依賴,可以直接使用,不會存在沖突問題。
如果還是有問題,則在主項目可以去除 A 、B 中的 C 。
主項目:
compile 'a.group:a.artifactId:a.version' {
exclude group: 'c.groupId', module: 'c.artifactId'
}
compile 'b.group:b.artifactId:b.version' {
exclude group: 'c.groupId', module: 'c.artifactId'
}
compile 'c.groupId:c.artifactId:c.version'
2. 如果 A 、B 均為 Maven 依賴,C 為 jar 依賴。則將 C 復(fù)制到主項目、A 、B 中,主項目 compile C ,A 、B provided C 。
主項目: compile files('libs/C.jar')
A 、B 項目:provided files('libs/xx.jar')
3. 如果 A 、B 均為 Library Project 依賴,C 為 jar 依賴。同 2 。
4. 如果 A 、B 均為 Library Project 依賴,C 為 Maven 依賴。同 2 或者 1(Maven 依賴也可以進行 provided 處理)。
5. 如果 A 為 Maven 依賴或者 Library Project 依賴,B 為 jar 依賴,C 為 jar 依賴。
A 項目:provided files('libs/xx.jar')
B 項目和主項目,不做其他任何處理。
6. 如果 A 、B 、C 均為 jar 依賴,嘗試重新將 A 、B 打包,將 C 剝離出來。

TA貢獻2012條經(jīng)驗 獲得超12個贊
在使用Android Studio開發(fā)的時候,如遇到多個項目引用同一個library(源碼)的情況時,會遇到在每個項目中都要有一套library的代碼的情況,對于還在開發(fā)和維護中的Library需要頻繁的修改,這對同步就很麻煩,為了解決這個問題,出現(xiàn)了下面的解決方案。
首先:新建一個類庫工程,工程名為AppLibs.Dev。
在該類庫中包含一個公共的類庫appLibs的Module,Module下面的build.gradle配置如下:
<pre code_snippet_id="2261040" snippet_file_name="blog_20170313_1_8450148" name="code" class="java">/** 聲明是Android類庫 */ apply plugin: 'com.android.library' android { /** 為了能夠支持該庫中的包 */ useLibrary 'org.apache.http.legacy' /** 編譯SDK的版本 */ compileSdkVersion 25 /** build tools的版本 */ buildToolsVersion "25.0.2" defaultConfig { minSdkVersion 9 targetSdkVersion 25 versionCode 100 versionName "1.0.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { debug { // debug模式 } release { // 是否進行混淆 minifyEnabled false // 混淆文件的位置 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } /** 移除lint檢查的error */ lintOptions { abortOnError false } } dependencies { /** compile fileTree將libs文件夾中所有的jar文件全部編譯。該方式和compile files方式選一種即可。 */ // compile fileTree(include: ['*.jar'], dir: 'libs') /** compile files將libs文件夾中單一的jar文件編譯 */ compile files('libs/jsch-0.1.53.jar') compile files('libs/commons-net-3.3.jar') compile files('libs/okhttp-3.2.0.jar') compile files('libs/okio-1.6.0.jar') /** 測試編譯 */ androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) /** 編譯指定包名下面模塊 */ compile 'com.android.support:appcompat-v7:25.2.0' compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha7' /** 單元測試編譯 */ testCompile 'junit:junit:4.12' }</pre>
這樣一個類庫工程就建好了,接下來就是引用包含該類庫的工程。
其次:引用該類庫工程。通過Android Studio新建一個TestProject的工程,如下圖。
在該工程中需要做以下三件事:
1、在project的settings.gradle里面增加紅框圈住部分的代碼。
2、在module的build.gradle文件中增加紅框圈住部分的代碼:
如果該類庫工程中包含多個module,那么在settings.gradle文件中原有代碼后面增加下面的代碼即可:
include ':AppLibs.Dev:moduleName'
同時在APP module中build.gradle增加相應(yīng)的模塊代碼即可:
compile project(':AppLibs.Dev:moduleName')
3、點擊Android Studio的菜單中的Build->Clean Project,完成Clean以后就看到如下圖。
完成如上圖所示以后,表示類庫工程已經(jīng)被APP工程引用進去了,這樣以后再修改類庫工程中的源碼,其他引用該類庫的工程中源碼也就同步修改了。
- 4 回答
- 0 關(guān)注
- 2350 瀏覽
添加回答
舉報