Gradle项目问题汇总记录
欢迎并感谢浏览卢小龙的本篇文章
你好!亲爱的读者,本篇文章将主要记录本人在工作学习中接触Gradle项目的问题记录,后续每次遇到问题会进行补充,方便自己的学习历程记录以及复习参考,若有言错之处,请各位给予指点.
1.Gradle配置菜单显示不全问题
问题描述:
Gradle配置菜单显示不全,无法对Gradle路径配置从而进行项目加载。
解决方法:
选中 .gradle 文件,右键选择 Import Gradle project按钮,但此按钮受限于IDEA版本问题。
还有一种方法是选择菜单栏的File->Open,在打开的窗口选择对应Gradle项目的build.gradle文件,然后点击OK。
2.IDEA使用Gradle Tasks的各种按钮
2.1 Gradle查看依赖关系
分两种方式,一种是通过Tasks菜单鼠标点击,如下图所示:
另一种是通过命令方式
./gradlew 模块名:dependencies
这个命令会打印出该模块下的所有第三方类库的依赖情况,有多种展示情况,complie编译时的,Runtime运行时(打到APK包时)的,debug下,release下。
如下展示的是debugCompileClasspath即debug编译时的引包情况:
debugCompileClasspath - Resolved configuration for compilation for variant: debug
+--- org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.31
| \--- org.jetbrains.kotlin:kotlin-stdlib:1.2.31
| \--- org.jetbrains:annotations:13.0
+--- com.android.support:appcompat-v7:27.1.1
| +--- com.android.support:support-annotations:27.1.1
| +--- com.android.support:support-core-utils:27.1.1
| | +--- com.android.support:support-annotations:27.1.1
| | \--- com.android.support:support-compat:27.1.1
| | +--- com.android.support:support-annotations:27.1.1
| | \--- android.arch.lifecycle:runtime:1.1.0
| | +--- android.arch.lifecycle:common:1.1.0
| | \--- android.arch.core:common:1.1.0
| +--- com.android.support:support-fragment:27.1.1
| | +--- com.android.support:support-compat:27.1.1 (*)
| | +--- com.android.support:support-core-ui:27.1.1
| | | +--- com.android.support:support-annotations:27.1.1
| | | +--- com.android.support:support-compat:27.1.1 (*)
| | | \--- com.android.support:support-core-utils:27.1.1 (*)
| | +--- com.android.support:support-core-utils:27.1.1 (*)
| | +--- com.android.support:support-annotations:27.1.1
| | +--- android.arch.lifecycle:livedata-core:1.1.0
| | | +--- android.arch.lifecycle:common:1.1.0
| | | +--- android.arch.core:common:1.1.0
| | | \--- android.arch.core:runtime:1.1.0
| | | \--- android.arch.core:common:1.1.0
| | \--- android.arch.lifecycle:viewmodel:1.1.0
| +--- com.android.support:support-vector-drawable:27.1.1
| | +--- com.android.support:support-annotations:27.1.1
| | \--- com.android.support:support-compat:27.1.1 (*)
| \--- com.android.support:animated-vector-drawable:27.1.1
| +--- com.android.support:support-vector-drawable:27.1.1 (*)
| \--- com.android.support:support-core-ui:27.1.1 (*)
\--- com.android.support.constraint:constraint-layout:1.0.2
\--- com.android.support.constraint:constraint-layout-solver:1.0.2
分层展示,不仅展示了该模块下每个类库的名称、版本号,还展示了各类库里所需依赖的类库。
目前笔者主要使用过的只有build.clean及build.jar,目前感觉与maven的clean和install结果性质大差不差,这方面后续会继续跟进了解,附上详解链接。
https://www.cnblogs.com/huansky/p/12064630.html
3.Gradle依赖管理问题
Gradle是基于Groovy的特定领域语言来声明项目设置,而不是传统的 XML。不过实话讲,截止到目前,笔者还是比较青睐Maven的XML管理依赖的形式。
3.1 apply字段
首先说一下在 .gradle 文件中常见的 apply 字段,在根目录的build.gradle文件中添加内容(apply from:”config.gradle”),如图:
apply from: "config.gradle"
bulidscript{
repositories{
jcenter()
}
}
加上这一行代码,意思就是该项目下所有的module都可以从这个(config.gradle)配置文件里读取内容。
3.2 定义依赖仓库(repositories)
Gradle 要求至少定义一个依赖仓库,依赖仓库可以是文件系统,也可以是中心服务器。最常用的是 jcenter 和 mavenCentral。
apply plugin: 'config.gradle'
repositories{
mavenCentral()
jcenter()
}
3.3 申明依赖(dependencies)
和 Maven 类似,依赖的坐标直接为:group、name、version。此外,引入不同的插件会引入不同的依赖配置类别。
dependencies{
compile group: 'org.apache.commons', name: 'commons-langs3', version: '3.8.1'
}
依赖坐标可以简写(用 : 分隔),如下所示:
‘org.apache.commons:commons-lang3:3.8.1’
当执行 build 命令时,gradle 就会去配置的依赖仓库中下载对应的 Jar,并应用到项目中。
3.4 项目的依赖类型
- 外部模块依赖:刚才的外部仓库
- 项目依赖:一个项目依赖另一个项目。如:compile project(’:projectB’)。
- 文件依赖:依赖本地文件,此类比较特殊,如下所示:
dependencies{
localLib fileTree(dir: "${System.properties['Gradle.User.Home']}/libs/cargo", include: '*.jar')
//localLib 为本地依赖的名字,include 指定包含哪些文件
}
在 dependency 前面可指明其依赖类型,可选(和 Maven 的 scope 标签类似)。Java 插件提供了 6 种现成的类型:
- compile:编译过程中必须依赖的类库
- runtime:运行时必须(编译时不需要)
- testCompile:编译测试时需要
- testRuntime:运行测试时需要
- archives:如果项目在编译过程中,有 jar 文件生成,则包含
3.5 将依赖打包进 jar
// build.gradle 中
dependencies {
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.1'
// archives "org.apache.commons:commons-lang3:3.1"
}
jar {
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes 'Main-Class': 'com.rainsia.hello.HelloWorld'
}
}
3.6 Gradle排除依赖
compile('org.hibernate:hibernate:3.1') {
// 冲突时优先使用该版本
force = true
// 依据构建名称排除
exclude module: 'oktokeep'
// 依据组织名称排除
exclude group: 'org.test'
// 依据组织名称+构件名称排除
exclude group: 'org.test', module: 'oktokeep'
// 为本依赖关闭依赖传递特性
transitive = false
}
---------待补充---------
后续笔者遇到问题会继续补充更新,若大家有遇到Gradle其他的棘手问题,欢迎大家予以分享。