当前位置: 首页 > news >正文

山东大良网站建设河北省企业网站建设公司

山东大良网站建设,河北省企业网站建设公司,国际市场调研公司,淘宝做任务网站Gradle环境介绍OpenJDK 17.0.5Gradle 7.6示例代码 fly-gradleGradle 项目下文件介绍如果你的电脑安装了 gradle#xff0c;可以使用 gradle init 去初始化一个新的 gradle 工程#xff0c;然后使用电脑安装的 gradle 去执行构建命令。但是每个开发电脑上的 gradle 版本不一样…Gradle环境介绍OpenJDK 17.0.5Gradle 7.6示例代码 fly-gradleGradle 项目下文件介绍如果你的电脑安装了 gradle可以使用 gradle init 去初始化一个新的 gradle 工程然后使用电脑安装的 gradle 去执行构建命令。但是每个开发电脑上的 gradle 版本不一样为了统一构建环境我们可以使用 gradle wrapper 限定项目依赖 gradle 的版本。# 会生成 gradle/wrapper/* gradlew gradlew.batgradle wrapper --gradle-version7.5.1 --distribution-type bin.├── build.gradle├── gradle│ └── wrapper│ ├── gradle-wrapper.jar│ └── gradle-wrapper.properties├── gradle.properties├── gradlew├── gradlew.bat├── settings.gradlegradlew 和 gradlew.bat运行项目 wrapper 下定义的 gradle 去构建项目。gradlew 是 macos 和 linux 系统下。gradlew.bat 是 windows 系统下使用的。wrapperwrapper 定义项目依赖那个版本的 gradle如果本地 distributionPath 没有对应版本的 gradle会自动下载对应版本的 gradle。# gradle-wrapper.propertiesdistributionBaseGRADLE_USER_HOMEdistributionPathwrapper/dists# 如果是国内项目只需要修改这个url 就可以提高下载速度distributionUrlhttps\://services.gradle.org/distributions/gradle-6.7-bin.zipzipStoreBaseGRADLE_USER_HOMEzipStorePathwrapper/distsGRADLE_USER_HOME 没有配置的话默认是 ~/.gradlezipStoreBase 和 zipStorePath 定义了下载的 gradle (gradle-7.6-bin.zip) 存储的本地路径。distributionBase 和 distributionPath 定义下载的 gradle 解压的本地目录。gradlew 实际是运行 gradle-wrapper.jar 中的 main 方法传递给 gradlew 的参数实际上也会传递给这个 main 方法。gradle-wrapper.jar 会判断是否下载 wrapper 配置的 gradle并且将传递参数给下载的 gradle并运行下载的 gralde 进行构建项目。升级 wrapper 定义的 gradle 版本./gradlew wrapper --gradle-version7.6settings.gradlepluginManagement { repositories { maven { urlfile://${rootDir}/maven/plugin } gradlePluginPortal() } plugins { // spring_boot_version 可以在 gradle.properties 配置 idorg.springframework.bootversion${spring_boot_version} }}rootProject.namefly-gradleincludeuser-manage-service,user-manage-sdkincludelib-aincludelib-bsettings.gradle 主要用于配置项目名称和包含哪些子项目。也可以用于配置插件的依赖版本不会应用到项目中去除非项目应用这个插件和插件下载的build.gradlebuild.gradle 是对某个项目的配置。配置 jar 依赖关系定义或者引入 task 去完成项目构建。gradle.properties主要用于配置构建过程中用到的变量值。也可以配置一些 gradle 内置变量的值用于修改默认构建行为。org.gradle.logging.levelquietorg.gradle.cachingtrueorg.gradle.paralleltrueorg.gradle.jvmargs-Xms512m -Xmx2g -XX:MaxMetaspaceSize512m -XX:HeapDumpOnOutOfMemoryError -Dfile.encodingUTF-8 org.gradle.jvmargs 用来配置 Daemon 的 JVM 参数默认值是 -Xmx512m -XX:MaxMetaspaceSize384m。当我们的项目比较大的时候可能会由于 JVM 堆内存不足导致构建失败就需要修改此配置。org.gradle.logging.level 调整 gradle 的日志级别。参考 gradle logging 选择想要的日志级别。Gradle Daemon为加快项目构建gralde 会启动一个常驻 JVM 后台进程去处理构建Daemon 进程默认三小时过期且当内存压力大的时候也会关闭。Gradle 默认会启用 Daemon 进程去构建项目。# 查看 daemon 运行状态./gradlew --status# stop daemon 进程./gradlew --stop# 重启 daemon 进程./gradlew --daemon构建生命周期Gradle 是基于 task 依赖关系来构建项目的我们只需要定义 task 和 task 之间的依赖关系Gradle 会保证 task 的执行顺序。Gradle 在执行 task 之前会建立 Task Graphs我们引入的插件和自己构建脚本会往这个 task graph 中添加 task。Gradle 的构建过程分为三部分初始化阶段、配置阶段和执行阶段。初始化阶段找到 settings.gradle执行其中代码确定有哪些项目需要构建然后对每个项目创建 Project 对象build.gradle 主要就是配置这个 Project 对象// settings.gradlerootProject.namebasicprintln在初始化阶段执行配置阶段执行 build.gradle 中的配置代码对 Project 进行配置执行 Task 中的配置段语句根据请求执行的 task建立 task graphprintln 在配置阶段执行 Task 中的配置段语句tasks.register(configured) { println 在配置阶段执行 Task 中的配置段语句 doFirst { println 在执行阶段执行 } doLast { println 在执行阶段执行 }}执行阶段根据 task graph 执行 task 代码。依赖管理Maven 私服配置我们一般都是多项目构建因此只需要在父项目 build.gradle 配置 repositories。allprojects { repositories { maven { url ${mavenPublicUrl} credentials { username ${mavenUsername} password ${mavenPassword} } } mavenLocal() mavenCentral() }}credentials 配置账号密码当私服不需要权限下载的时候可以不配置。Gradle 会按照配置的仓库顺序查询依赖下载。配置依赖来自某个目录dependencies { compile files(lib/hacked-vendor-module.jar)}dependencies { compile fileTree(lib)}有的时候第三方库没有 maven 供我们使用可以使用这个。依赖冲突默认依赖冲突::: tip当出现依赖冲突的时候gradle 优先选择版本较高的因为较高版本会兼容低版本。:::dependencies { implementation com.google.guava:guava:31.1-jre implementation com.google.code.findbugs:jsr305:3.0.0 testImplementation org.junit.jupiter:junit-jupiter-api:5.8.1 testRuntimeOnly org.junit.jupiter:junit-jupiter-engine:5.8.1}我们可以执行下面命令查看项目依赖的版本./gradlew dependency-management:dependencies --configuration compileClasspath------------------------------------------------------------Project :dependency-management------------------------------------------------------------compileClasspath - Compile classpath for source set main.--- org.springframework.boot:spring-boot-dependencies:3.0.2--- com.google.guava:guava:31.1-jre| --- com.google.guava:failureaccess:1.0.1| --- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava| --- com.google.code.findbugs:jsr305:3.0.2| --- org.checkerframework:checker-qual:3.12.0| --- com.google.errorprone:error_prone_annotations:2.11.0| \--- com.google.j2objc:j2objc-annotations:1.3\--- com.google.code.findbugs:jsr305:3.0.0 - 3.0.2我们可以看到gradle 选择了 com.google.code.findbugs:jsr305:3.0.2 这个版本。强制使用某个版本如果我们想使用 com.google.code.findbugs:jsr305:3.0.0 版本dependencies { implementation com.google.guava:guava:31.1-jre implementation com.google.code.findbugs:jsr305:3.0.0, { force true } testImplementation org.junit.jupiter:junit-jupiter-api:5.8.1 testRuntimeOnly org.junit.jupiter:junit-jupiter-engine:5.8.1}./gradlew -q dependency-management:dependencyInsight --dependency jsr305 --configuration compileClasspathcom.google.code.findbugs:jsr305:3.0.0 (forced) Variant compile: | Attribute Name | Provided | Requested | |--------------------------------|----------|--------------| | org.gradle.status | release | | | org.gradle.category | library | library | | org.gradle.libraryelements | jar | classes | | org.gradle.usage | java-api | java-api | | org.gradle.dependency.bundling | | external | | org.gradle.jvm.environment | | standard-jvm | | org.gradle.jvm.version | | 17 |com.google.code.findbugs:jsr305:3.0.0\--- compileClasspathcom.google.code.findbugs:jsr305:3.0.2 - 3.0.0\--- com.google.guava:guava:31.1-jre \--- compileClasspath禁用依赖传递guava 不会传递依赖它依赖的库到当前库可以看到dependencies { implementation com.google.guava:guava:31.1-jre, { transitive false } implementation com.google.code.findbugs:jsr305:3.0.0}./gradlew dependency-management:dependencies --configuration compileClasspath------------------------------------------------------------Project :dependency-management------------------------------------------------------------compileClasspath - Compile classpath for source set main.--- org.springframework.boot:spring-boot-dependencies:3.0.2--- com.google.guava:guava:31.1-jre\--- com.google.code.findbugs:jsr305:3.0.0可以看到 guava 依赖的 jar 没有传递到当前项目中来。排除某个依赖Guava 依赖的别的 jar 可以传递进来而且排除了 findbugs, 项目依赖的版本为 3.0.0。dependencies { implementation com.google.guava:guava:31.1-jre, { exclude group: com.google.code.findbugs, module: jsr305 } implementation com.google.code.findbugs:jsr305:3.0.0}./gradlew dependency-management:dependencies --configuration compileClasspath------------------------------------------------------------Project :dependency-management------------------------------------------------------------compileClasspath - Compile classpath for source set main.--- org.springframework.boot:spring-boot-dependencies:3.0.2--- com.google.guava:guava:31.1-jre| --- com.google.guava:failureaccess:1.0.1| --- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava| --- org.checkerframework:checker-qual:3.12.0| --- com.google.errorprone:error_prone_annotations:2.11.0| \--- com.google.j2objc:j2objc-annotations:1.3\--- com.google.code.findbugs:jsr305:3.0.0可以看到 guava 传递到当前项目的依赖少了 findbugs 。配置依赖之间继承configurations { integrationTestImplementation.extendsFrom testImplementation integrationTestRuntimeOnly.extendsFrom testRuntimeOnly}configurations.all { resolutionStrategy { force org.apache.tomcat.embed:tomcat-embed-core:9.0.43 } exclude group: org.slf4j, module: slf4j-simple}api 和 implementation 区别jar b 包含一下依赖dependencies { api org.apache.commons:commons-lang3:3.12.0 implementation com.google.guava:guava:31.1-jre}项目 a 引入 jar b commons-lang3 和 guava 都可以被工程 a 使用只是二者 scope 不一样。api 对应 compile在 工程 a 可以直接使用编译可以通过。implementation 对应 runtime编译找不到 guava 中的类。Task我们引用的插件实际是添加 task 到 task graph 中去。我们知道 build.gradle 实际是用来配置对应项目的 org.gradle.api.Project。因此我们可以在 build.gradle 中引用 org.gradle.api.Project 暴露的属性。我们可以在 gradle dsl 和 Project 接口中可以知道可以访问哪些属性。tasks 实际就是 Project 暴露的一个属性因此我们可以使用 tasks 往当前项目中注册 task。tasks.register(hello) { doLast { println hello }}推荐使用 tasks.register 去注册 task而不是 tasks.create 去直接创建。tasks.register 注册的 task 只会在用到的时候才会初始化。Groovy 闭包Groovy Closures{ [closureParameters - ] statements }闭包的示例{ item } { - item } { println it } { it - println it } :::tip当方法的最后一个参数是闭包时可以将闭包放在方法调用之后。:::比如注册一个 task 的接口是 register(String var1, Action? super Task var2)tasks.register(task55){ doFirst { println task55 }}tasks.register(task66,{ doFirst { println task66 }})Task Typegradle 已经定义好一些 task type我们可以使用这些 task type 帮助我们完成特定的事情。比如我们想要执行某个 shell 命令。Exec - Gradle DSL Version 7.6tasks.register(task3, Exec) { workingDir $rootDir commandLine ls}Plugin插件分类Gradle 有两种类型的插件 binary plugins and script plugins二进制插件就是封装好的构建逻辑打成 jar 发布到线上供别的项目使用。脚本插件就是一个 *.gradle 文件。buildSrc一般我们的项目是多项目构建各个子项目会共享一些配置比如 java 版本repository 还有 jar publish 到哪里等等。我们可以将这些统一配置分组抽象为单独的插件子项目引用这个插件即可。便于维护不用在各个子项目都重复配置相同的东西。buildSrc 这个目录必须在根目录下它会被 gradle 自动识别为一个 composite build并将其编译之后放到项目构建脚本的 classpath 下。buildSrc 也可以写插件我们可以直接在子项目中使用插件 id 引入。buildSrc/├── build.gradle├── settings.gradle└── src ├── main │ ├── groovy │ │ └── mflyyou.hello2.gradle │ ├── java │ │ └── com │ │ └── mflyyou │ │ └── plugin │ │ ├── BinaryRepositoryExtension.java │ │ ├── BinaryRepositoryVersionPlugin.java │ │ └── LatestArtifactVersion.javabuildSrc/build.gradlegroovy-gradle-plugin 对应的是使用 groovy 写插件。java-gradle-plugin 对应 javaplugins { id groovy-gradle-plugin id java-gradle-plugin}gradlePlugin { plugins { helloPlugin { id com.mflyyou.hello implementationClass com.mflyyou.plugin.BinaryRepositoryVersionPlugin } }}我们就可以在子项目使用插件plugins { id com.mflyyou.hello id mflyyou.hello2}插件使用Applying plugins with the plugins DSLplugins { id java}Applying a plugin with the buildscript blockbuildscript { repositories { gradlePluginPortal() } dependencies { classpath com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5 }}apply plugin: com.jfrog.bintrayApplying a script pluginapply from: other.gradle
http://www.hkea.cn/news/14350616/

相关文章:

  • 济南企业建站公司怎么制作seo搜索优化
  • 黄页网站代码优质院校建设网站
  • 网站首页设计费用舟山网站建设有哪些
  • 贵州网站建设设计公司程序员用来做笔记的网站
  • 成都的网站建设开发公司古蔺中国建设银行网站
  • 网站常见的域名基木鱼建站教程
  • 艺术家个人网站设计网站开发心路历程
  • 如何用api做网站创业平台网站
  • 哪个网站可以免费学编程广州专业做标书公司
  • 郑州百度seo网站优化广昌网站建设
  • 长沙app开发公司排名seo网络推广企业
  • 阜阳建设网站在猪八戒网站如何做兼职
  • 面试网站开发员做网站云服务期
  • 天津网站排名提升网站空间会过期吗
  • 做网站用的幻灯片大小宁波seo推广
  • 提供常州网站优化太原西北建设有限公司网站
  • 可做生物试卷的网站wordpress siren主题
  • 盐城市规划建设局网站常州模板网站建设价位
  • 网站的网站制作公司php招聘网站建设
  • 萍乡企业网站制作网站流量指数
  • 一流的手机网站建设在线培训系统app
  • 江门搜狗网站推广优化代理网站平台
  • 深圳网站建设公司的外文名是我的网站模板
  • 1000个免费货源网站入口重庆定制网站开发
  • 网站信息系统做网站 阿里云和百度云哪个好
  • 做网站有哪些语言请人做网站设计的方案
  • wordpress 素锦申泽seo
  • 为什么要进行电子商务网站规划网站伪静态
  • 公司运营策划营销张家口网站seo
  • 网站建设怎么引流好看网电影网站模板