为了账号安全,请及时绑定邮箱和手机立即绑定

请教一下gradle provided和compile的区别?

请教一下gradle provided和compile的区别?

慕无忌1623718 2019-09-05 11:07:21
gradle provided和compile的区别
查看完整描述

4 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

gradle provided和compile的区别在于使用providedCompile的前提是apply plugin: 'war'

1、Gradle compile:

假如你的jar包存在代码依赖性,在编译、运行时候需要依赖代码,那就用compile

例如 :

compile 'org.springframework.boot:spring'

2、Gradle providedCompile:

假如你的jar包存在代码依赖性,但是在编译的时候才用得上,而运行时不需要,就用providedCompile

例如:

providedCompile 'org.springframework.boot:spring'


查看完整回答
反对 回复 2019-09-07
?
呼啦一阵风

TA贡献1802条经验 获得超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‘



查看完整回答
反对 回复 2019-09-07
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

假设项目引用了类库 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 复制到主项目、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 剥离出来。



查看完整回答
反对 回复 2019-09-07
?
繁花如伊

TA贡献2012条经验 获得超12个赞

在使用Android Studio开发的时候,如遇到多个项目引用同一个library(源码)的情况时,会遇到在每个项目中都要有一套library的代码的情况,对于还在开发和维护中的Library需要频繁的修改,这对同步就很麻烦,为了解决这个问题,出现了下面的解决方案。

首先:新建一个类库工程,工程名为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增加相应的模块代码即可:

compile project(':AppLibs.Dev:moduleName')

3、点击Android Studio的菜单中的Build->Clean Project,完成Clean以后就看到如下图。



完成如上图所示以后,表示类库工程已经被APP工程引用进去了,这样以后再修改类库工程中的源码,其他引用该类库的工程中源码也就同步修改了。



查看完整回答
反对 回复 2019-09-07
  • 4 回答
  • 0 关注
  • 2128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信