Gradle构建工具从入门到精通(IDEA)(2)

每一个构建都是由一个或多个 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); } }

运行图如下:

Gradle构建工具从入门到精通(IDEA)

8.构建生命周期

初始化完成后的方法 -> 配置完成后的方法 -> 执行完成后的方法

Gradle构建工具从入门到精通(IDEA)

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任务

Gradle构建工具从入门到精通(IDEA)

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 新建模块

Gradle构建工具从入门到精通(IDEA)

我们新建一个web模块,新建成功后如下:

Gradle构建工具从入门到精通(IDEA)

可以看到在新模块里生成了一个build.gradle文件,并且setting.gradle文件中新增了include ‘web’语句。

11.2 依赖模块

我们可以再次新建model模块。如果我们想在model模块使用web模块的类,如何写呢?

dependencies { compile project(":web") //这里是模块名 ... }

现在通过gradle插件,查看到项目有root根模块,model模块,web模块。

Gradle构建工具从入门到精通(IDEA)

11.3 全局配置

我们可以在root根模块设置全局配置,比如在root模块使用allprojects:

allprojects{ apply plugin : 'java' sourceCompatibility = 1.8 }

去掉其它模块的 plugin : 'java',可以看到该模块依旧存在 jar 任务。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5688d1534a748be4bfed88b310a491ae.html