赞
踩
常用的项目构建工具有 Ant、Maven、Gradle 三种。
Ant 相对于另外两者较为灵活,速度也快,但是编写XML文件来构建指令,比较繁杂。
Maven 有一套约定大于配置的项目目录结构,使用了GAV左标进行管理依赖,侧重于包管理
Gradle 集成了Ant的脚本的灵活性和Maven的约定大于配置的优点,支持多种远程仓库和插件,侧重于大项目构建。但是学习成本高、资料少、脚本灵活、兼容性差。
查看当前IDEA对应的Gradle版本 路径 IntelliJ IDEA 2020.3.2\plugins\gradle\lib
安装网址https://gradle.org/install/
下载后解压再配置环境变量即可
gradle init
gradle clean 清空build目录
gradle build 构建项目/生成build文件
gradle build -x test 跳过测试代码的构建
gradle test 执行测试代码、生成测试报告
gradle classes 编译class文件以及resource下的文件
找到 init.d
文件,在里面创建.gradle
结尾的文件,文件中配置云仓库数据源。
例:
allprojects { buildscript { repositories { maven { url 'https://maven.aliyun.com/repository/public/' } maven { url 'https://maven.aliyun.com/repository/google/' } } } repositories { maven { url 'https://maven.aliyun.com/repository/public/' } maven { url 'https://maven.aliyun.com/repository/google/' } } println "${it.name}: Aliyun maven mirror injected" }
在某种程度上,Groovy被看做Java的一种脚本化改良版,Groovy也是运行在JVM上的,可以很好的与Java代码以及其相关的库进行交互操作。它是一种成熟的面向对象的编程语言,可以面向对象编程,也可以当做纯粹的脚本语言,大多数有效的Java代码也可以转化为有效的Groovy代码。Groovy和Java的主要区别是:完成同样的任务所需的Groovy代码比Java代码更少。
特点:
在官网下载groovy,解压后配置环境变量即可
对象.属性名 = ? 、 对象的setter方法 、具名构造器(Groovy类自带的)
对象.属性名 、 对象["属性名"] 、 对象.getter方法
()
可以省略implementation 'org.springframework:spring-beans:4.1.7.RELEASE' implementation 'org.springframework:spring-web:4.1.7.RELEASE' implementation 'org.springframework:spring-webmvc:4.1.7.RELEASE' implementation 'org.springframework:spring-tx:4.1.7.RELEASE' implementation 'org.springframework:spring-test:4.0.5.RELEASE' implementation 'org.springframework:spring-jdbc:4.1.7.RELEASE' implementation 'org.mybatis:mybatis-spring:1.2.3' implementation 'org.mybatis:mybatis:3.3.0' implementation 'mysql:mysql-connector-java:5.1.36' implementation 'com.alibaba:druid:1.0.15' implementation "com.fasterxml.jackson.core:jackson-databind:2.2.3" implementation "com.fasterxml.jackson.core:jackson-annotations:2.2.3" implementation "com.fasterxml.jackson.core:jackson-core:2.2.3" implementation 'org.aspectj:aspectjweaver:1.8.6' implementation 'log4j:log4j:1.2.17' implementation 'org.slf4j:slf4j-api:1.7.25' implementation 'jstl:jstl:1.2' compileOnly 'javax.servlet:servlet-api:2.5' testImplementation group: 'junit' ,name: 'junit', version: '4.12'
Junit4
dependencies {
testImplementation group: 'junit' ,name: 'junit', version: '4.12'
}
test {
useJUnit()
}
Juint5
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}
test {
useJUnitPlatform()
}
执行gradle test 或 gradle build 时, 会在build/reports/tests/test
目录下,生成相关的测试报告
test {
enabled(true) //开启测试,打包时会生成测试报告 false为关闭
useJUnit()
include ('com/**') //指定的目录下的测试会执行并生成报告
exclude ('com/abc/**') //排除指定的目录下的测试
}
//添加插件
id 'org.springframework.boot' version '2.3.7.RELEASE'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
//添加依赖
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
init.d目录下的
文件,后执行当前目录的settings.gradle文件[ : ]
来引入子工程rootProject.name = 'xxx'
//子工程名称
include 'xxxx'
include 'xxxx'
//子工程下的子工程
include 'xxxx : xxxx'
:类似于路径的 / ,是相对于 rootProject而言的。之后Gradle会为每个带有build.gradle的脚本文件的工程构建一个与之对应的Project对象。
项目实质上是Task对象的集合,一个Task表示一个逻辑上较为独立的执行过程,比如编译Java源代码、拷贝文件、打包Jar文件,甚至可以是执行一个系统命令。一个Task可以读取和设置Project的Property以完成特定的操作。
Task的使用:
task "task1"{
println("root Task1=====")
doFirst {
println("Do Frist =========")
}
doLast {
println("Do Last ======================")
}
}
可使用 gradle -i “task名称”
来执行指定的Task。其中Task的配置是在配置阶段完成的,Task的doFirst和doLast是在执行阶段完成的。即任务的配置在配置阶段完成,任务的执行是在执行阶段完成。
Task之间的依赖方式(例A、B 被 C 依赖):
1. task C (dependsOn:['A' , 'B'])
2. task C {
dependsOn = ['A', 'B']
}
3. task C {
}
C.dependsOn = ['A', 'B']
跨项目依赖,加上相应的项目名即可,如 B 依赖 projectz中的A:
task B{
dependsOn = (":project:A")
}
依赖方式:
implementation files (‘路径’)
implementation project(': 项目名')
,该项目需要在settings.gradle文件中被引用依赖冲突:
implementation('xxxx'){exclude group:'xxxx组名' || exclude module 'xxxx模块名' || exclude group:'xxxx组名' ,module 'xxxx模块名'}
implementation('xxxx'){ transitive(false)}
不建议使用implementation('xxxx'){version{structly("xxx版本")}} || implementation('xxxx !!')
configurations.all() {
Configuration configuration ->
configuration.resolutionStrategy.failOnVersionConflict()
}
id 'java-library' //如果发布war包,需要war插件,java-library支持带源码、文档发布
id 'maven-publish'
publishing { publications { myLibrary(MavenPublication) { groupId = 'org.gradle.sample' //指定GAV坐标信息artifactId = 'library' version = '1.1' from components.java//发布jar包 //from components.web ///引入war插件,发布war包 } } repositories { //本地仓库位于USER_HOME/.m2/repository mavenLocal() mavenLocal() //发布项目到私服中 maven { name = 'myRepo' //name属性可选,表示仓库名称,url必填 //发布地址:可以是本地仓库或者maven私服 //url = layout.buildDirectory.dir("repo") // change URLs to point to your repos, e.g. http://my.org/repo def releasesRepoUrl = layout.buildDirectory.dir('repos/releases') def snapshotsRepoUrl = layout.buildDirectory.dir('repos/snapshots') url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl //认证信息:用户名和密码 // credentials { // username = 'joe' // password = 'secret' // } } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。