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