项目构建工具
2021-06-17 15:58:13 0 举报
AI智能生成
maven gradle
作者其他创作
大纲/内容
maven
简化构建过程 + 提供统一的构建系统
基础
坐标
groupId
artifactId
version
scope
compile
默认的依赖有效范围。
此种依赖,在编译、运行、测试时均有效。
此种依赖,在编译、运行、测试时均有效。
provided
在编译、测试时有效,但是在运行时无效。
例如:servlet-api,运行项目时,容器已经提供,就不需要Maven重复地引入一遍了。
例如:servlet-api,运行项目时,容器已经提供,就不需要Maven重复地引入一遍了。
runtime
runtime :在运行、测试时有效,但是在编译代码时无效。
例如:JDBC驱动实现,项目代码编译只需要JDK提供的JDBC接口,只有在测试或运行项目时才需要实现上述接口的具体JDBC驱动。
例如:JDBC驱动实现,项目代码编译只需要JDK提供的JDBC接口,只有在测试或运行项目时才需要实现上述接口的具体JDBC驱动。
test
只在测试时有效
system
从参与度来说,也provided相同,不过被依赖项不会从maven仓库抓,而是从本地文件系统拿,一定需要配合systemPath属性使用。
特性
依赖传递
依赖冲突
第一声明者优先原则
使用路径优先者原则
排除依赖 exclusions标签
版本锁定(常用)
1. 在dependencyManagement标签中锁定依赖版本
2. 在dependencies 中导入maven坐标
注:dependencyManagement 只是锁定版本,并没有导入依赖的jar包。具体的jar包导入仍需要在dependencies 标签中声明。
命令
validate
验证项目是否正确
compile
编译项目的源代码
test
使用合适的单元测试框架测试编译的源代码。这些测试不应该要求代码被打包或部署
clean
清空target目录
package
打包项目,生成 jar 包 或 war 包到 target 目录
install
将项目打成 maven 放入本地 maven 仓库
deploy
将项目发布到远程 maven 仓库
site
生成项目文档,运行 mvn site 命令会在 target/site/目录下生成文件
maven本地仓库
cd maven_home
vim conf/setting.xml
找到并修改<localRepository>你想存放的本地仓库路径</localRepository>
Maven配置阿里云镜像
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
gradle
一个基于 JVM 的富有突破性构建工具
- 一个像 ant 一样,通用的灵活的构建工具
- 一种可切换的,像 maven 一样的基于约定约定优于配置的构建框架
- 强大的多工程构建支持
- 强大的依赖管理(基于 ApacheIvy)
- 对已有的 maven 和 ivy 仓库的全面支持
- 支持传递性依赖管理,而不需要远程仓库或者 pom.xml 或者 ivy 配置文件
- ant 式的任务和构建是 gradle 的第一公民
- 基于 groovy,其 build 脚本使用 groovy dsl 编写
- 具有广泛的领域模型支持你的构建
构建基础
Projects
任何一个 Gradle 构建都是由一个或多个 projects 组成。每个 project 包括许多可构建组成部分。
tasks
每个 project 都由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作。如编译,打包,生成 javadoc,发布到某个仓库等操作。
使用
代码即脚本, Gradle 脚本采用 Groovy 书写。
快速定义任务
task hello {
println 'Hello world!'
}
println 'Hello world!'
}
任务之间依赖
- 假设task-hello在task-intro之前已定义:
- 假设task-hello在task-intro之前还没定义:
任务操纵
一旦任务被创建后,任务之间可以通过 API 进行相互访问。
假设intro0, intro1, intro2等任务均已定义
hello.doLast { println 'Hello Venus' }
- 增加依赖
- 增加任务行为
hello.doLast { println 'Hello Venus' }
任务属性
访问任务的属性
${taskName}.{taskPropertyKey}
为任务增加自定义属性
- 在任务中使用ext.**赋值即可
任务排序
- 假设任务taskX,taskY已定义
调用 Ant 任务
Ant 任务是 Gradle 中的一等公民。Gradle 借助 Groovy 对 Ant 任务进行了优秀的整合。Gradle 自带了一个 AntBuilder,在 Gradle 中调用 Ant 任务比在 build.xml 中调用更加的方便和强大。
使用外部构建脚本配置项目
apply from: 'other.gradle'
java构建
大部分 Java 项目基本流程都是相似的:编译源文件,进行单元测试,创建 jar 包。
使用 Gradle 做这些工作不必为每个工程都编写代码。Gradle 已经提供了完美的插件来解决这些问题。
使用 Gradle 做这些工作不必为每个工程都编写代码。Gradle 已经提供了完美的插件来解决这些问题。
基础使用
采用 Java 插件
apply plugin: 'java'
定义一个 Java 项目只需如此而已。这将会为你添加 Java 插件及其一些内置任务。
定义一个 Java 项目只需如此而已。这将会为你添加 Java 插件及其一些内置任务。
标准目录结构:
project
+build
+src/main/java
+src/main/resources
+src/test/java
+src/test/resources
Gradle 默认会从 src/main/java 搜寻打包源码,在 src/test/java 下搜寻测试源码。
src/main/resources 下的所有文件按都会被打包,所有 src/test/resources 下的文件 都会被添加到类路径用以执行测试。
所有文件都输出到 build 下,打包的文件输出到 build/libs 下。
project
+build
+src/main/java
+src/main/resources
+src/test/java
+src/test/resources
Gradle 默认会从 src/main/java 搜寻打包源码,在 src/test/java 下搜寻测试源码。
src/main/resources 下的所有文件按都会被打包,所有 src/test/resources 下的文件 都会被添加到类路径用以执行测试。
所有文件都输出到 build 下,打包的文件输出到 build/libs 下。
构建 Java 项目
gradle build
编译并执行单元测试,并且将 src/main/* 下面 class 和资源文件打包
编译并执行单元测试,并且将 src/main/* 下面 class 和资源文件打包
gradle clean
删除 build 目录以及所有构建完成的文件
删除 build 目录以及所有构建完成的文件
gradle assemble
编译并打包 jar 文件,但不会执行单元测试。
编译并打包 jar 文件,但不会执行单元测试。
gradle check
编译并测试代码
编译并测试代码
外部依赖
添加 Maven 仓库
repositories {
mavenLocal()
mavenCentral()
maven { url "http://repo.mycompany.com/maven2" }
}
mavenLocal()
mavenCentral()
maven { url "http://repo.mycompany.com/maven2" }
}
添加依赖
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
定制项目
Java 插件为你的项目添加了众多默认配置。这些默认值通常对于一个普通项目来说已经足够了。但如果你觉得不适用修改起来也很简单。
指定坐标信息
group 'com.org'
version '1.0-SNAPSHOT'
------
Maven的artifactId是Gradle内部的项目名称,它是从项目的目录名称派生的
version '1.0-SNAPSHOT'
------
Maven的artifactId是Gradle内部的项目名称,它是从项目的目录名称派生的
指定jdk版本
sourceCompatibility = 1.5
targetCompatibility = 1.8
定制 MANIFEST.MF 文件
jar {
manifest {
//定制行为,这里是增加属性
attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
}
}
manifest {
//定制行为,这里是增加属性
attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
}
}
测试阶段加入一个系统属性
test {
systemProperties 'property': 'value'
}
systemProperties 'property': 'value'
}
多项目构建
定义一个多项目构建工程需要在根目录创建一个setting 配置文件来指明构建包含哪些项目。并且这个文件必需叫 settings.gradle
settings.gradle 中指明构建
include "shared", "api", "services:webservice", "services:shared"
include "shared", "api", "services:webservice", "services:shared"
多项目公共配置
subprojects {
apply plugin: 'java'
repositories {
mavenCentral()
}
version = '1.0'
}
apply plugin: 'java'
repositories {
mavenCentral()
}
version = '1.0'
}
依赖配置
依赖等级
compile
用来编译项目源代码的依赖.
runtime
在运行时被生成的类使用的依赖. 默认的, 也包含了编译时的依赖.
testCompile
测试期编译需要的附加依赖
testRuntime
运行测试所需要的依赖. 包含上面的依赖.
定义外部依赖
dependencies {
compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
}
compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
}
dependencies {
compile 'org.hibernate:hibernate-core:3.6.7.Final'
}
compile 'org.hibernate:hibernate-core:3.6.7.Final'
}
打包发布
apply plugin: 'maven'
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/tmp/myRepo/")
}
}
}
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/tmp/myRepo/")
}
}
}
Gradle 命令行的基本使用
多任务调用
gradle compile test 命令会依次调用,并且每个任务仅会被调用一次
任务依赖
排除任务
gradle dist -x test
失败后继续执行
gradle test --continue
获取构建信息
项目列表
gradle projects
任务列表
gradle tasks
依赖列表
gradle dependencies
属性列表
gradle properties
构建环境
通过 gradle.properties 配置构建环境
在gradle.properties中定义GRADLE_OPTS 或 JAVA_OPTS的相关配置,这些配置将会按以下顺序被应用:
在gradle.properties中定义GRADLE_OPTS 或 JAVA_OPTS的相关配置,这些配置将会按以下顺序被应用:
- 位于项目构建目录的gradle.properties。
- 位于gradle 用户主目录的gradle.properties。
- 系统属性,例如当在命令行中使用 -Dsome.property 时。
通过代理访问网站
systemProp.http.proxyHost=www.somehost.org
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=userid
systemProp.http.proxyPassword=password
systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost
systemProp.https.proxyHost=www.somehost.org
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=userid
systemProp.https.proxyPassword=password
systemProp.https.nonProxyHosts=*.nonproxyrepos.com|localhost
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=userid
systemProp.http.proxyPassword=password
systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost
systemProp.https.proxyHost=www.somehost.org
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=userid
systemProp.https.proxyPassword=password
systemProp.https.nonProxyHosts=*.nonproxyrepos.com|localhost
gradle插件开发
使用 Java 语言编写 Gradle 插件
基础
0 条评论
下一页