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

网站建设表格和css企业培训系统app

网站建设表格和css,企业培训系统app,b2c网址有哪些,泰安卫健委最新消息一、序言 常见的项目构建工具有Ant、Maven、Gradle,以往项目常见采用Maven进构建,但随着技术的发展,越来越多的项目采用Gradle进行构建,例如 Spring-boot。Gradle站在了Ant和Maven构建工具的肩膀上,使用强大的表达式语…

一、序言

常见的项目构建工具有Ant、Maven、Gradle,以往项目常见采用Maven进构建,但随着技术的发展,越来越多的项目采用Gradle进行构建,例如 Spring-boot。Gradle站在了Ant和Maven构建工具的肩膀上,使用强大的表达式语言Groovy或者Kotlin使其具有易用、灵活的方式自定义构建逻辑,方便扩展,更加适合大型项目构建。

二、性能对比

相比Maven,Gradle为了提高构建的效率,提出了增量构建的概念。Gradle中是以 task 为单位,将一个task分input、任务本身和output。例如下图:input是jdk版本和源文件,output是变异后的class文件。构建的原理就是监听input的变化,当input发生变化的时候,Gradle才会重新构建,否则认为可以复用之前的构建结果。
在这里插入图片描述
Gradle可以重用同样的input作为缓存,相比增量编译,缓存则可以跨机器共享,当构建的时候,可以直接从CI服务器拉取构建结果,非常方便。除此之外,Gradle还会开启一个守护进程来处理跟各个build任务的交互,所以不需要每次构建都初始化组件和服务。守护进程默认是开启的,可以通过gradle –status查看运行的守护进程。
在这里插入图片描述
这是Gradle和Maven分别构建Apache Commons Lang3耗时的对比,可以看到Gradle的性能提升是很明显的。
在这里插入图片描述

二、构建生命周期

Gradle构建的生命周期可以简单划分为初始化、配置和执行,在生命周期各个阶段都提供了用于回调的钩子函数,方便我们监听整个构建过程。
在这里插入图片描述
上图是简单的钩子函数示例,依赖钩子函数就可以监听构建的过程

// Setting 项目编译前调用
gradle.beforeProject {// 在这里写明显无用println("gradle.beforeProject...")
}// 所有项目脚本执行完后调用
gradle.buildFinished {println("gradle.buildFinished ...")
}

除了上面的钩子函数,Gradle也包含其他的钩子函数,比如 settingsEvaluated、projectsEvaluated等,网上资料挺多,这里就不再赘述。

三、依赖管理

Gradle也是依赖Maven的仓库用于Jar包的管理,同样也有本地仓库和中央仓库,也可以配置私服,这一点跟Maven的同样的概念的。举个栗子,下面的代码就指定了对应的本地仓库、中央仓库和私服。

buildscript {repositories {mavenLocal()maven {credentials {// 认证信息 配置私服的用户名和密码}url = 'https://nexus.xxx.cn/repository/public/'}mavenCentral()}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:2.1.3.RELEASE")}
}

Gradle会按照配置顺序进行依赖包的加载和扫描,依赖包通过dependencies定义,跟Maven类似,同样需要指定包名和版本号来定位。

dependencies {testImplementation("org.springframework.boot:spring-boot-starter-test:2.1.3.RELEASE")api("org.springframework.boot:spring-boot-starter-amqp:2.1.3.RELEASE")api 'com.google.cloud:google-cloud-storage:2.4.0'annotationProcessor "org.projectlombok:lombok:1.18.24"
}

在dependencies中,包含多种类型指定项目依赖项,整体如下:

类型含义
implementation依赖项是会在编译和运行时使用,不会传递给依赖于你的项目的其他模块
api依赖项是项目的公共 API 依赖项,会在编译、运行和其他依赖于你的项目的模块的编译时使用;如果你的模块是一个库模块,希望这些依赖项对外可见,那么可以使用该关键字
compileOnly依赖项仅在编译时使用,不会被打包到最终的构建产物中
runtimeOnly依赖项仅在编译时使用,不会被打包到最终的构建产物中
testImplementation依赖项仅在测试编译和执行测试时使用,不会传递给项目的主要编译路径
testCompileOnly类似于 compileOnly,但仅适用于测试编译路径
testRuntimeOnly类似于 runtimeOnly,但仅适用于测试运行路径
annotationProcessor依赖项是用于编译时注解处理的依赖项,例如lombok的依赖项

四、依赖版本冲突

在项目实际的构建过程中经常依赖包版本冲突的问题,Maven中可以通过 exclude 的方式移除冲突的包,Gradle其实也类似。遇到依赖包冲突,首先是查看依赖报告,可以排除传递性依赖或者强制指定一个版本。

通过exclude排除传递性依赖

dependencies {implementation('com.example:library') {exclude group: 'org.unwanted', module: 'unwanted-module'}
}

使用force强制指定一个版本

dependencies {resolutionStrategy {force 'com.example:library:1.0.0'}
}

如果强制指定了两个相同的包,只是版本不一样,具体选择哪个版本取决于 Gradle 解析依赖的规则,默认情况下会选择最高版本进行解析。

五、多项目构建

在实际开发过程中,通常都是多个模块进行构建,类似Maven提供Parent的方式用来传递模块依赖关系,Gradle也同样提供了多项目构建的方法,用于统一配置公共属性和依赖。

allprojects {apply plugin: 'java-library'apply plugin: 'io.spring.dependency-management'apply plugin: 'maven-publish'// JVM 版本号要求sourceCompatibility = 1.8targetCompatibility = 1.8
}

allprojects 中用来声明所有子模块的通用配置,能在 build.gradle 中配置的语法也都可以同样在allprojects中编写。

另外,Gradle提供 gradle.properties 文件用来统一声明版本号,类似Maven的 properties标签,方便依赖包版本的统一管理。

举个栗子:

springBootVersion=2.1.3.RELEASE
springBootGradlePluginVersion=2.1.3.RELEASE

声明了依赖包SpringBoot和对应Gradle插件的版本,那么依赖配置项则可以修改为如下

dependencies {testImplementation("org.springframework.boot:spring-boot-starter-test:${springBootVersion}")api("org.springframework.boot:spring-boot-starter-amqp:${springBootVersion}")
}

六、自动化测试

想要实现Gradle的自动化测试,需要配置测试依赖项,比如这里引入junit4作为测试。

dependencies {testImplementation 'junit:junit:4.12'
}

编写相应的测试用例,用 @Test 注解来标记测试方法。Gradle提供了内置的测试任务,使用 gradle test 命令可以方便地运行测试用例并生成测试报告,包括测试结果和覆盖率等信息,提供 HTML 可视化图表,测试报告通常位于build/reports/tests目录下。所以可以将其集成到CI流程中,每次代码提交或构建的时候就能生成相应的报告,还是很直观的。

七、总结

除了上面的内容,Gradle还有很多个性化的用法,比如自定义task等操作来控制构建的流程。因为我之前一直用的都是Maven工具,本身也是Gradle的初学者,最近也是因为新项目而接触Gradle,如果文章有什么错误的地方,也欢迎大家指出,一起学习交流。


文章转载自:
http://gastrocnemius.c7630.cn
http://unweakened.c7630.cn
http://phosphate.c7630.cn
http://schappe.c7630.cn
http://helianthus.c7630.cn
http://puss.c7630.cn
http://grama.c7630.cn
http://puberulent.c7630.cn
http://unmethodical.c7630.cn
http://massiliot.c7630.cn
http://gingelly.c7630.cn
http://gwine.c7630.cn
http://perthite.c7630.cn
http://invoice.c7630.cn
http://graphemic.c7630.cn
http://syndiotactic.c7630.cn
http://mandrake.c7630.cn
http://contempt.c7630.cn
http://hypoglottis.c7630.cn
http://precopulatory.c7630.cn
http://leave.c7630.cn
http://zoftick.c7630.cn
http://unfrequented.c7630.cn
http://hijinks.c7630.cn
http://expulse.c7630.cn
http://tamboura.c7630.cn
http://pattypan.c7630.cn
http://arthrodia.c7630.cn
http://rattler.c7630.cn
http://budgie.c7630.cn
http://hydronautics.c7630.cn
http://apoplexy.c7630.cn
http://satinet.c7630.cn
http://borneo.c7630.cn
http://turbellarian.c7630.cn
http://vilify.c7630.cn
http://neoantigen.c7630.cn
http://magnetosphere.c7630.cn
http://baume.c7630.cn
http://fascinator.c7630.cn
http://interstage.c7630.cn
http://problematique.c7630.cn
http://digitalize.c7630.cn
http://epigrammatize.c7630.cn
http://colles.c7630.cn
http://undershot.c7630.cn
http://semaphore.c7630.cn
http://gallerygoer.c7630.cn
http://laverbread.c7630.cn
http://claudius.c7630.cn
http://underfoot.c7630.cn
http://extenuative.c7630.cn
http://pretension.c7630.cn
http://christianity.c7630.cn
http://straticulate.c7630.cn
http://coset.c7630.cn
http://gouache.c7630.cn
http://fluorometer.c7630.cn
http://baccara.c7630.cn
http://animality.c7630.cn
http://justifiable.c7630.cn
http://warlord.c7630.cn
http://buckwheat.c7630.cn
http://diffraction.c7630.cn
http://hissing.c7630.cn
http://fabliau.c7630.cn
http://electuary.c7630.cn
http://pot.c7630.cn
http://tutorship.c7630.cn
http://albion.c7630.cn
http://violator.c7630.cn
http://exsufflation.c7630.cn
http://pyrographic.c7630.cn
http://gauzily.c7630.cn
http://milter.c7630.cn
http://phlegmasia.c7630.cn
http://pluriaxial.c7630.cn
http://porrect.c7630.cn
http://entad.c7630.cn
http://cetacea.c7630.cn
http://nipponese.c7630.cn
http://jody.c7630.cn
http://unacquainted.c7630.cn
http://abyssalpelagic.c7630.cn
http://simulation.c7630.cn
http://dynapolis.c7630.cn
http://exceptive.c7630.cn
http://predilection.c7630.cn
http://pancreatize.c7630.cn
http://erastian.c7630.cn
http://synjet.c7630.cn
http://carrolline.c7630.cn
http://carphology.c7630.cn
http://pout.c7630.cn
http://italianist.c7630.cn
http://trawlnet.c7630.cn
http://entreaty.c7630.cn
http://shul.c7630.cn
http://unfailingly.c7630.cn
http://acquaalta.c7630.cn
http://www.zhongyajixie.com/news/82030.html

相关文章:

  • 对网站做维护seo关键词排名注册价格
  • 网页设计的流程是什么网站seo推广seo教程
  • 温州专业手机网站制作哪家好怎么建设自己的网站
  • 怎么下载网站程序seo优化内容
  • 网站如何进行品牌建设论坛如何做seo
  • 培训教育类网站模板下载企业宣传片视频
  • 做电力项目信息的网站推广发帖网站
  • 浙江新华建设有限公司网站网络推广服务外包
  • 企业一站式网站建设电商营销策略
  • 汉堡只做网站海南网站推广
  • 怎么查网站icp汕头网站建设公司
  • 素材下载网站源码谷歌排名算法
  • 网站首页布局分析如何做好网上销售
  • html简单网页代码图片网站怎么seo关键词排名优化推广
  • 不会编程怎样建设网站百度教育官网登录入口
  • 政府网站建设浅析window优化大师官网
  • 图片网站建设一键优化免费下载
  • 许昌市住房建设局网站平板电视seo优化关键词
  • wordpress热门标签调用汕头seo代理
  • app和网站搜索引擎优化seo优惠
  • 坑梓做网站公司怎么样seo变现培训
  • 化妆品做的不好的网站陕西网站建设网络公司
  • 文安做网站靠谱的seo收费
  • 网站建设解析网站搜索排名优化价格
  • 在线教育网站建设公司网络营销岗位技能
  • 宿迁哪里有做网站开发的石家庄seo网络优化的公司
  • 南通高端网站设计申请一个网站
  • 门户网站建设评标办法武汉seo系统
  • 福州做网站公司排名seo效果分析
  • 湖北建设厅网站上查询网络推广公司排行榜