每一个构建都是由一个或多个 projects 构成的. 一个 project 到底代表什么依赖于你想用 Gradle 做什么. 举个例子, 一个 project 可以代表一个 JAR 或者一个网页应用.
每一个 project 是由一个或多个 tasks 构成的. 一个 task 代表一些更加细化的构建. 可能是编译一些 >
7.自定义任务首先应该明白,gradle自带了很多task。
在build.gradle中添加自定义task很简单,代码如下:
//自定义一个方法,这里是创建目录 def createDir = { path -> File file = new File(path); if (!file.exists()){ file.mkdirs(); } } //自定义第一个task任务 task makeGroovyDir(){ def paths = ["src/main/groovy"]; doFirst { paths.forEach(createDir); } } //自定义第二个task任务 task makeJavaDir(){ dependsOn 'makeGroovyDir' //该任务依赖于某个任务 def paths = ["src/main/java2"]; doFirst { paths.forEach(createDir); } }运行图如下:
8.构建生命周期初始化完成后的方法 -> 配置完成后的方法 -> 执行完成后的方法
9.依赖管理几乎所有的基于JVM的软件项目都需要依赖外部类库来重用现有的功能。自动化的依赖管理可以明确依赖的版本 ,解决因传递性依赖带来的版本冲突。
9.1 依赖仓库位置
工件坐标 group name version
常用仓库
1 mavenLocal() / mavenCentral() / jcenter
2 自定义maven仓库
repositories { maven{ url '私服地址一般放首位' } mavenLocal() //本地仓库 mavenCentral() //中央仓库 }3 文件仓库(不推荐使用)
9.2 依赖的传递性
b 依赖a 如果c依赖b 那么c依赖a
9.3 依赖的阶段
testCompile是在测试的编译阶段,其它如runtime等。
编译阶段的依赖在运行时也是存在的。典型的例子是JDBC驱动实现,项目主代码的编译只需要jdk提供的jdbc的接口,只有在执行测试或者运行测试的时候才需要实现上述接口的jdbc的驱动。
dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' compile group: 'org.jsoup', name: 'jsoup', version: '1.10.3' } 10.版本冲突查看版本冲突,执行dependencies任务
1.gradle默认会使用高版本的依赖
2.取消默认策略,如果有版本冲突,直接让其构建失败
configurations.all{ resolutionStrategy{ failOnVersionConflict() } }3.排除传递性依赖(默认排除最低版本)
//排除哪个jar的依赖 compile('org.spring-core:3.6.3.Final'){ //指定要排除的依赖的group和module=name,不指定版本,默认排除最低版本 exclude group:'org.slf4j',module:'slf4j-api' //transitive=false//排除所有传递性依赖,比较少用 }4.强制指定默认使用某个版本
configurations.all{ resolutionStrategy{ force 'org.slf4j:slf4j-api:1.7.24' } }备注:IDEA可能会不提示,但不要紧,依执行结果为据。
11.多项目构建11.1 新建模块
我们新建一个web模块,新建成功后如下:
可以看到在新模块里生成了一个build.gradle文件,并且setting.gradle文件中新增了include ‘web’语句。
11.2 依赖模块
我们可以再次新建model模块。如果我们想在model模块使用web模块的类,如何写呢?
dependencies { compile project(":web") //这里是模块名 ... }现在通过gradle插件,查看到项目有root根模块,model模块,web模块。
11.3 全局配置
我们可以在root根模块设置全局配置,比如在root模块使用allprojects:
allprojects{ apply plugin : 'java' sourceCompatibility = 1.8 }去掉其它模块的 plugin : 'java',可以看到该模块依旧存在 jar 任务。