Gradle笔记 七 publishing 项目发布(二)

简介: Gradle笔记 七 publishing 项目发布

Gradle笔记 七 publishing 项目发布(一)https://developer.aliyun.com/article/1391984


拓展 1: ext 配置的是用户自定义属性,而gradle.properties 中一般定义 系统属性、环境变量、项目属性、JVM 相关配置信息。例如gradle.properties 文件案例:加快构建速度的,gradle.properties 文件中的属性会自动在项目运行时加载。

## 设置此参数主要是编译下载包会占用大量的内存,可能会内存溢出
org.gradle.jvmargs=-Xms4096m-Xmx8192m
 ## 开启gradle缓存
org.gradle.caching=true
 #开启并行编译
org.gradle.parallel=true
 #启用新的孵化模式
org.gradle.configureondemand=true
 #开启守护进程
org.gradle.daemon=true

Buildscript

buildscript 里是gradle 脚本执行所需依赖,分别是对应的 maven 库和插件。案例如下:

import org.apache.commons.codec.binary.Base64 
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
}
}
tasks.register('encode') { doLast {
def byte[] encodedString = new Base64().encode('hello world\n'.getBytes()) println new String(encodedString)
}
}

需要注意的是:

  1. buildscript{}必须在 build.gradle 文件的最前端。
  2. 对于多项目构建,项目的 buildscript ()方法声明的依赖关系可用于其所有子项目的构建脚本。
  3. 构建脚本依赖可能是 Gradle 插件。

案例如下所示:

//老式apply插件的引用方式,使用apply+buildscript
buildscript { ext {
springBootVersion = "2.3.3.RELEASE"
}
repositories {
mavenLocal()
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' } jcenter()
}
//此处引入插件
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java' //核心插件,无需事先引入
apply plugin: 

org.springframework.boot社区插件,需要事先引入,才能应用,不必写版本号

publishing 项目发布

接下来,将咱们写好的模块发布发布到公司的私服以供别人使用,如下所示:

引入maven 发布的插件

plugins {
id 'java-library' //如果发布war包,需要war插件,java-library支持带源码、文档发布
id 'maven-publish'
}

设置发布代码

//带源码和javadoc的发布:需要'java-library'插件支持:它是java的升级版,java插件的功能java-library都有
//javadoc.options.encoding="UTF-8"
 //java{
 // withJavadocJar()
 // withSourcesJar()
 //}
 publishing{
 publications{
 myLibrary(MavenPublication){
 groupId='org.gradle.sample'//指定GAV坐标信息
artifactId='library'
 version='1.1'
 fromcomponents.java//发布jar包
//fromcomponents.web///引入war插件,发布war包
}
 }
 repositories{
 //本地仓库位于USER_HOME/.m2/repository
 mavenLocal()
 //发布项目到私服中
maven{
 name='myRepo'//name属性可选,表示仓库名称,url必填
//发布地址:可以是本地仓库或者maven私服
//url=layout.buildDirectory.dir("repo")
 //changeURLstopointtoyourrepos,e.g.http://my.org/repo
 defreleasesRepoUrl=layout.buildDirectory.dir('repos/releases')
 defsnapshotsRepoUrl=layout.buildDirectory.dir('repos/snapshots')
 url=version.endsWith('SNAPSHOT')?snapshotsRepoUrl:releasesRepoUrl
 //认证信息:用户名和密码
// credentials{
 // username='joe'
 // password='secret'
 // }
 }
 }
 }

执行发布指令

执 行 发 布 命 令 , 将 项 目 发 布 到 本 地 仓 库 或 者 远 程 仓 库 。 常 见 的 发 布 指 令 有 :

  • generatePomFileForPubNamePublication: 生成 pom 文件
  • publishPubNamePublicationToRepoNameRepository:发布项目到指定仓库,如果没有仓库名,默认为maven
  • publishPubNamePublicationToMavenLocal: 将 PubName 发布复制到本地 Maven 仓库中包括POM 文件和其他元数据。
  • publish: 发布到 repositories 中指定的仓库(为比如 Maven 私服)
  • publishToMavenLocal: 执行所有发布任务中的操作发布到本地 maven 仓库

生命周期中Hook

生命周期中的这些钩子函数都是由 gradle 自动回调完成的,利用这些钩子函数可以帮助我们实现一些我们想要的功能。

Gradle 在生命周期各个阶段都提供了用于回调的钩子函数:

Gradle 初始化阶段:

● 在 settings.gradle 执行完后,会回调 Gradle 对象的 settingsEvaluated 方法

● 在构建所有工程 build.gradle 对应的Project 对象后,也既初始化阶段完毕,会回调 Gradle 对象的projectsLoaded 方法

Gradle 配置阶段:

● Gradle 会循环执行每个工程的 build.gradle 脚本文件

● 在执行当前工程build.gradle 前,会回调Gradle 对象的 beforeProject 方法和当前Project 对象的 beforeEvaluate 方法, 虽然 beforeEvalute 属于 project 的生命周期, 但是此时 build script 尚未被加载, 所以 beforeEvaluate 的设置依 然要在 init script 或 setting script 中进行,不要在 build script 中使用 project.beforeEvaluate 方法。

● 在执行当前工程 build.gradle 后,会回调 Gradle 对象的afterProject 方法和当前Project 对象的 afterEvaluate 方法

● 在所有工程的 build.gradle 执行完毕后,会回调 Gradle 对象的 projectsEvaluated 方法

● 在构建 Task 依赖有向无环图后,也就是配置阶段完毕,会回调TaskExecutionGraph 对象的 whenReady 方法

Gradle 执行阶段:

● Gradle 会循环执行Task 及其依赖的 Task

● 在当前 Task 执行之前,会回调 TaskExecutionGraph 对象的 beforeTask 方法

● 在当前 Task 执行之后,会回调 TaskExecutionGraph 对象的 afterTask 方法当所有的 Task 执行完毕后,会回调 Gradle 对象的 buildFinish 方法。

相关文章
|
5月前
|
Java Maven 开发者
gradle项目对比maven项目的目录架构以及对gradle wrapper的理解
gradle项目对比maven项目的目录架构以及对gradle wrapper的理解
48 0
|
6月前
Gradle项目加速构建
Gradle项目加速构建
385 0
|
6月前
|
Java API Maven
Gradle 自动化项目构建-Gradle 核心之 Project
Gradle 自动化项目构建-Gradle 核心之 Project
63 0
|
7月前
|
Java Spring
使用Gradle创建SpringBoot项目
使用Gradle创建SpringBoot项目
473 0
|
7月前
|
Java API Spring
Gradle基础笔记
配置Gradle镜像为阿里云,修改`gradle-wrapper.properties`。使用`subprojects`管理父项目,设定编码为UTF-8。应用Spring Boot和依赖管理插件,子项目排除特定依赖,如`javax.servlet`。针对项目间依赖,使用`implementation`或`api`关键字。完整示例展示了多项目构建,包括仓库、依赖、源代码设置、任务和编码配置。
169 1
|
7月前
|
Java 测试技术 API
云效流水线构建gradle项目失败提示gradle版本过低如何解决
云效(CloudEfficiency)是阿里云提供的一套软件研发效能平台,旨在通过工程效能、项目管理、质量保障等工具与服务,帮助企业提高软件研发的效率和质量。本合集是云效使用中可能遇到的一些常见问题及其答案的汇总。
342 0
|
7月前
|
开发工具 Android开发 开发者
Android 项目编译 Gradle 配置说明
Android 项目编译 Gradle 配置说明
341 0
|
7月前
|
Java 关系型数据库 MySQL
Gradle笔记 六 Gradle 中的Dependencies
Gradle笔记 六 Gradle 中的Dependencies
147 0
|
7月前
|
Java Maven
Gradle笔记 七 publishing 项目发布(一)
Gradle笔记 七 publishing 项目发布
135 0
|
7月前
|
存储 缓存 Java
Gradle笔记 八 Gradle 插件(二)
Gradle笔记 八 Gradle 插件
148 0