Android学习笔记
文章目录
- Android学习笔记
- 第1章 Android应用和开发环境
- 1.2 使用Gradle自动化构建项目
- 1.2.6 依赖管理
疯狂Android讲义
第1章 Android应用和开发环境
1.2 使用Gradle自动化构建项目
1.2.6 依赖管理
在构建Java项目时通常都要依赖一个或多个框架,Gradle既可像Maven那样从仓库(远程仓库和本地仓库都行)中下载所依赖的JAR包,也可像Ant那样直接引用项目路径下的JAR包,非常方便。【66666】
为Gradle配置依赖大体上需要两步。
- ①为Gradle配置仓库。配置仓库的目的是告诉Gradle到哪里下载JAR包。
- ②为不同的组配置依赖JAR包。配置依赖JAR包的目的是告诉Gradle要下载哪些JAR包。
第1步是为了告诉Gradle从哪里下载所依赖的JAR包,需要为Gradle配置仓库,Gradle可以直接使用Maven中央仓库,也可以使用Maven本地仓库,还可以使用本地磁盘路径作为Maven仓库。
如果需要使用Maven中央仓库,那么只要在build.gradle文件中增加如下配置即可。
// 定义仓库
repositories{
// 使用Maven默认的中央仓库
mavenCentral()
}
有时候在国内通过Maven中央仓库下载JAR包速度太慢,开发者可能希望使用Maven中央仓库的国内镜像,Gradle也允许显式指定Maven仓库的URL。例如如下配置。
// 定义仓库
repositories{
// Maven远程仓库
maven{
// 显式指定Maven仓库的URL
url "https://repo1.maven.org/maven2"
}
}
Gradle还允许直接使用本地磁盘路径作为Maven仓库。例如如下配置。
// 定义仓库
repositories{
//Maven本地仓库
maven{
// 显式指定本地磁盘路径作为Maven仓库的URL
url "D:/Develop/Java/maven-repository"
}
}
第2步是为了告诉Gradle需要下载哪些JAR包,并为不同的组配置数量不等的JAR包。
关于什么是“组”,这是由现代软件项目的特征决定的,很多时候,同一个项目在编译时依赖某一组JAR包;在运行时可能依赖另一组JAR包;在测试时可能又依赖其他JAR包,因此允许使用不同的组来区分不同的JAR包。【没毛病】
Gradle使用configurations来配置组。例如如下代码即可配置一个组。
configurations{
// 配置名为dingjiaxiongDependency的依赖组
dingjiaxiongDependency
}
接下来就可以为依赖组配置数量不等的JAR包,Gradle使用dependencies来为依赖组配置JAR包。
与在Maven中指定JAR包的方式相同,配置JAR包同样需要指定3个信息。
- JAR包所属的组织名:通过group指定。
- JAR包的名称:通过name指定。
- JAR包的版本:通过version指定。
如下配置为dingjiaxiongDependency依赖组添加了commons-logging 1.2的JAR包。
dependencies{
// 配置依赖JAR包
dingjiaxiongDependency group:'commons-logging', name:'commons-logging',version:'1.2'
// 简写为如下形式
dingjiaxiongDependency 'commons-logging:commons-logging:1.2'
}
简写形式也是实际开发中使用最多的形式。group、name、version属性写成一个字符串,中间以英文冒号隔开即可。
如果在为依赖组添加JAR包之后需要进行额外配置,则可使用闭包。例如如下配置代码。
大部分时候,依赖组总是需要添加多个JAR包,此时既可通过多次调用dingjiaxiongDependency来添加多个依赖JAR包,也可使用数组形式一次添加多个JAR包。
例如如下配置。
dingjiaxiongDependency 'commons-logging:commons-logging:1.2','org.apache.commons:commons-dbcp2:2.2.0'
在定义好该依赖之后,接下来即可在任务中使用该依赖了。
下面定义一个简单的任务来查看dingjiaxiongDependency所依赖的JAR包
task showDingjiaxiongDependency{
doLast{
// 输出dingjiaxiongDependency 所依赖的JAR包
println configurations.dingjiaxiongDependency.asPath
}
}
执行命令 gradle showDingjiaxiongDependency
它会先去中央仓库下载下来。
默认放C盘了
修改一下,C盘可经不起这样搞
- 创建存储jar包的目录,比如笔者这里
D:\gradle\cache
- 新增环境变量GRADLE_USER_HOME
删了C盘里面下的东西再执行一次
OK,现在就舒服了。
从输出结果可以看到,Gradle从Maven中央仓库下载了commons-logging的JAR包和commons-dbcp2的JAR包,由于commons-dbcp2的JAR包又依赖commons-pool2的JAR包,因此Gradle还下载了commons-pool2的JAR包。
在实际项目开发中,通常并不需要自己配置依赖组,因为当应用jva插件之后,该插件默认已经添加了多个依赖组,其中常用的依赖组有如下几个。
- implementation:主项目源代码(src/main/java)所依赖的组。这个依赖组很常用。
- compileOnly:主项目源代码(src/main/java)编译时才依赖的组。
- runtimeOnly:主项目源代码(src/main/java)运行时才依赖的组。
- testImplementation:项目测试代码(src/test/java)所依赖的组。
- testCompileOnly:项目测试代码(src/test/java)编译时才依赖的组。
- testRuntimeOnly::项目测试代码(src/test/java)运行时才依赖的组。
- archives:项目打包时依赖的组。
对于上面这些常用的依赖组,我们可以根据需要为不同的依赖组添加JAR包。比如为项目的编译、运行添加依赖JAR包,则为implementation组添加JAR包即可;为项目的测试添加依赖JAR包,则为testImplementation组添加JAR包即可。
假如在项目的源代码中同时用到了commons-logging、commons–dbcp2两个JAR包中的类,为了保证该项目可正常编译、运行,则需要为implementation组增加如下配置。
// 以数组形式添加多个jar包
implementation 'commons-logging:commons-logging:1.2',"org.apache.commons:commons-dbcp2:2.2.0"
这样该项目中的Java类即可正常使用这两个JAR包所包含的类。比如在src/main/java目录下增加一个HelloWorld类,该类完全可以使用commons-logging、commons-dbcp2所包含的类。
接下来为项目添加application插件,并通过mainClassName属性指定主类之后,即可通过gradle run命令运行HelloWorld类。
package dingjiaxiong;
import org.apache.commons.logging.Log;
import org.apache.commons.dbcp2.BasicDataSource;
public class HelloWorld
{
public static void main(String[] args)
{
Log log;
BasicDataSource ds = new BasicDataSource();
System.out.println("数据源:" + ds);
}
}
gradle run
虽然有点乱码,但是还是运行成功了
【解决一下乱码】
再试一次
OK,没问题了
或者直接改一下gradle.bat
再试一次
OK, 没用【环境变量删了】
算了,姑且这样吧