- 浏览: 1030299 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
繁星水:
Useful!!
Object-C之(Null)与(Bool) -
pacer123:
请问注解@ApiModelProperty 在哪个jar包下面 ...
Micro Service工具集之Swagger:可测试的样式化API文档 -
sucheng2016:
这东东真的好用么/
对象转换利器之Dozer -
zzq0324:
http://git.oschina.net/zzq0324/ ...
基于Spring-WS的Restful API的集成测试 -
lrz0534:
你好,我在maven上面下载了swagger-springmv ...
Micro Service工具集之Swagger:可测试的样式化API文档
最近在项目中遇到一个不大,但是还蛮烦人的问题,在Maven的约定中,一个标准Java项目的代码结构如下:
当‘gradle idea’构建intelliJ项目文件时,会自动帮忙设置好所有的Source Root,Test Source Root。但是,在我工作的部门中,我们希望可以把测试分为unit,intg2个类别,这样可以更加容易区分测试的目的,同时提供了Build Pipeline分别运行不同类别测试的能力。因此,我们部门内的标准Java项目结构如下:
有了这个目录结构之后我们剩下2个问题要解决:
1. 如何区分运行IntegrationTest和Unit Test
2. 如何保证‘gradle idea’以后,无需重新设置Test Source Root。因为gradle不具备识别新的代码结构的能力。
如何写一个Gradle Plugin
语言:
Java,Groovy,Scala都可,推荐用Groovy,毕竟Gradle本质上来说就是一个用Groovy写的DSL,使用Groovy可以更一致一点。
注入方式:
Gradle支持3种形式的定制Plugin注入:
个人觉得,都想到要自己写一个Plugin了,那么一定是有多个项目公用这个Plugin了,否则的话,直接把Plugin的代码直接写到脚本里就好了。因此,要定制Plugin,在我看来,一定是需要以一个单独的jar形式注入的。
写project-structure Plugin:
在Gradle中,写一个Plugin非常简单,首先,添加项目依赖,我使用Groovy来写插件,所以添加了localGroovy依赖。
然后写Plugin的实现代码,实现代码只需要实现Plugin<Project>接口即可,在我的实现代码中,做了两件事,一是定制了项目的代码结构,二是添加了integrationTest Task,该Task只运行*IntegrationTest.class, 这样可以在Build Pipeline分阶段运行Unit Test和IntegrationTest。
接着,在项目的src/main/resources/META-INF/gradle-plugins目录下,创建一个文件:<plugin-name>.properties,在该文件中指定Plugin的实现类:
在项目中使用该Plugin
首先,需要在build.gradle脚本中引入该Plugin的jar包依赖,可以是以文件的形式,当然个人更推荐的是把jar包发布到Maven库中,以Maven依赖的形式的注入,本例中使用的是本地文件依赖:
有了这个插件之后,就可以通过‘gradle test’和‘gradle integrationtTest’区别运行UnitTest和IntrgrationTest了。
最后,解决自动设置Test Source Root的问题,只需要在build.gradle为ideaModule Task增加识别Test Source Root的能力即可:
当然,我们也可以把它写到Plugin中去,在设置为Project-Structrue之后:
project --src --main --java --resources --test --java --resources
当‘gradle idea’构建intelliJ项目文件时,会自动帮忙设置好所有的Source Root,Test Source Root。但是,在我工作的部门中,我们希望可以把测试分为unit,intg2个类别,这样可以更加容易区分测试的目的,同时提供了Build Pipeline分别运行不同类别测试的能力。因此,我们部门内的标准Java项目结构如下:
project --src --main --java --resources --test --common --java --unit --java --resources --intg --java --resources
有了这个目录结构之后我们剩下2个问题要解决:
1. 如何区分运行IntegrationTest和Unit Test
2. 如何保证‘gradle idea’以后,无需重新设置Test Source Root。因为gradle不具备识别新的代码结构的能力。
如何写一个Gradle Plugin
语言:
Java,Groovy,Scala都可,推荐用Groovy,毕竟Gradle本质上来说就是一个用Groovy写的DSL,使用Groovy可以更一致一点。
注入方式:
Gradle支持3种形式的定制Plugin注入:
- 1. 直接把Plugin源代码直接写在Build Script里面。
- 2. 把Pluigin源代码写到rootProjectDir/buildSrc/src/main/groovy目录下
- 3. 用一个单独的project来写Plugin源代码,然后以jar依赖的形式注入项目。
个人觉得,都想到要自己写一个Plugin了,那么一定是有多个项目公用这个Plugin了,否则的话,直接把Plugin的代码直接写到脚本里就好了。因此,要定制Plugin,在我看来,一定是需要以一个单独的jar形式注入的。
写project-structure Plugin:
在Gradle中,写一个Plugin非常简单,首先,添加项目依赖,我使用Groovy来写插件,所以添加了localGroovy依赖。
apply plugin: 'groovy' dependencies { compile gradleApi() compile localGroovy() }
然后写Plugin的实现代码,实现代码只需要实现Plugin<Project>接口即可,在我的实现代码中,做了两件事,一是定制了项目的代码结构,二是添加了integrationTest Task,该Task只运行*IntegrationTest.class, 这样可以在Build Pipeline分阶段运行Unit Test和IntegrationTest。
import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.tasks.testing.Test class ProjectStructurePlugin implements Plugin<Project> { @Override void apply(Project project) { project.logger.info "Configuring Project Structure for $project.name" project.configurations { integrationTestCompile { extendsFrom testCompile } integrationTestRuntime { extendsFrom integrationTestCompile, testRuntime } } configureSourceSets(project) addIntegrationTestTask(project) } private void addIntegrationTestTask(Project project) { Test intgTest = project.getTasks().create("integrationTest", Test.class); intgTest.testClassesDir = project.sourceSets.integrationTest.output.classesDir intgTest.includes = ["**/*IntegrationTest.class"] intgTest.inputs.dir 'src' intgTest.outputs.dir project.sourceSets.integrationTest.output.classesDir project.check.dependsOn project.integrationTest intgTest.dependsOn project.test } private void configureSourceSets(Project project) { project.sourceSets { test { java { srcDir 'src/test/unit/java' srcDir 'src/test/common/java' } resources { srcDir 'src/test/unit/resources' } } integrationTest { java { srcDir 'src/test/intg/java' srcDir 'src/test/common/java' } resources { srcDir 'src/test/intg/resources' } compileClasspath = project.sourceSets.main.output + project.sourceSets.test.output + project.configurations.integrationTestCompile runtimeClasspath = output + compileClasspath + project.configurations.integrationTestRuntime } } } }
接着,在项目的src/main/resources/META-INF/gradle-plugins目录下,创建一个文件:<plugin-name>.properties,在该文件中指定Plugin的实现类:
implementation-class=com.xianlinbox.plugins.ProjectStructurePlugin
在项目中使用该Plugin
首先,需要在build.gradle脚本中引入该Plugin的jar包依赖,可以是以文件的形式,当然个人更推荐的是把jar包发布到Maven库中,以Maven依赖的形式的注入,本例中使用的是本地文件依赖:
buildscript { dependencies { classpath fileTree(dir: 'libs', include: '*.jar') } }然后,注入编写的插件,注意,该插件必须和java plugin一起使用,因为其中使用到SourceSets属性是从该插件中引入进来的:
apply plugin: 'java' apply plugin: 'project-structure'
有了这个插件之后,就可以通过‘gradle test’和‘gradle integrationtTest’区别运行UnitTest和IntrgrationTest了。
最后,解决自动设置Test Source Root的问题,只需要在build.gradle为ideaModule Task增加识别Test Source Root的能力即可:
apply plugin: 'idea' ... idea { module { testSourceDirs += file('src/test/intg/java') testSourceDirs += file('src/test/intg/resources') } }
当然,我们也可以把它写到Plugin中去,在设置为Project-Structrue之后:
...... compileClasspath = project.sourceSets.main.output + project.sourceSets.test.output + project.configurations.integrationTestCompile runtimeClasspath = output + compileClasspath + project.configurations.integrationTestRuntime project.idea { module { testSourceDirs = testSourceDirs + new File('src/test/intg/java') + new File('src/test/intg/resources') } }
发表评论
-
关于并发的思考
2015-02-08 22:33 4275并发数 并发数和2个因 ... -
使用Hystrix守护应用(3)
2015-01-02 22:04 12830监控HystrixCommand 除了隔离依赖服务的调用外,H ... -
使用Hystrix守护应用(2)
2014-12-30 14:35 16766接上篇(http://ningandjiao.iteye.co ... -
使用Hystrix守护应用(1)
2014-12-30 14:28 15193Hystrix(https://github.com/Netf ... -
Mac下同时安装多个版本的JDK
2014-04-14 21:42 33126JDK8 GA之后,小伙伴们喜大普奔,纷纷跃跃欲试,想体验一下 ... -
性能测试工具之Gatling
2014-01-15 19:27 17225Gatling一直是久闻其名但 ... -
JavaMail测试工具之GreenMail
2014-01-08 19:13 7324不管现在各种Mock框架的运用有多广,我个人在写单元测试的时候 ... -
Restful Spring MVC应用的Request验证
2013-12-26 15:05 23302在开放平台的时候,尤其是坐Rest服务的时候,因为用户可以给你 ... -
Spring MVC中的异常处理
2013-12-25 13:13 24104在一个良好的Rest架构的应用中,所有的异常都应该有对应的Ht ... -
Spring 4.0升级小贴士
2013-12-22 19:40 11396随着Spring4.0的发布,很多同志估计都在考虑升级的事情了 ... -
Spring4.0给我们带来什么?
2013-12-22 17:13 44963JDK8 对JDK8的支持,这个目前来说还是探索性质,毕竟Ja ... -
RESTful API版本控制策略
2013-12-15 19:51 31610做RESTful开放平台,一方面其API变动越少, 对API调 ... -
对象转换利器之Dozer
2013-12-14 22:46 19791在Java的世界中,经常会 ... -
基于Spring-WS的Restful API的集成测试
2013-11-28 19:41 8922在很多Java企业级应用中,Spring占据了非常重要的位置, ... -
TDD Of Spring JMS
2013-11-25 19:53 1706不知何时养成了习惯,在没有一个可运行的测试的时候,个人完全没有 ... -
Micro Service工具集之Swagger:可测试的样式化API文档
2013-09-28 19:55 44663在我之前的一篇博文中,介绍了Yammer开发团队贡献的开源微服 ... -
进击的Java开发
2013-07-14 20:48 5852今天在公司的邮件组中看到一组很有趣的讨论,这是我最喜欢目前公司 ... -
说说SpringBatch的领域概念
2013-06-21 20:32 3580谈到Spring Batch,会谈到 ... -
做项目时需要考虑的安全性问题
2013-04-16 20:20 4727在开发一个项目的时候,大家经常会忽略项目的安全性问题,有很多的 ... -
使用Gradle部署jar包到Maven中央库
2013-04-12 16:15 24088Maven作为目前Java界最好的Dependency管理系统 ...
相关推荐
Android Studio Gradle离线包下载,其中包含:gradle-1.10-all.zip; gradle-1.11-all.zip; gradle-2.0-all.zip; gradle-2.2.1-all.zip; gradle-2.2-all.zip; gradle-2.3-all.zip;gradle-2.10-all.zip; gradle-...
Gradle-Plugin-User-Guide-Chinese-Verision, Gradle Plugin User Guide 中文翻译
gradle-6.7-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.7-all.zip gradle-6.6.1-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.6.1-all.zip gradle-6.6-...
Android gradle 资源下载 gradle-6.7.1-all.zip gradle-4.10.1-all.zip
gradle-6.7.1-bin.zip gradle-6.7.1-bin.zip gradle-6.7.1-bin.zipgradle-6.7.1-bin.zip gradle-6.7.1-bin.zip gradle-6.7.1-bin.zip gradle-6.7.1-bin.zipgradle-6.7.1-bin.zipgradle-6.7.1-bin.zip gradle-6.7.1-...
gradle-8.0-all和gradle-8.0-bin最新版本,因国内下载极其慢,我就上传上来了,希望大家可以用到。请尽快深刻通过!
Android Gradle5.1.1 - 5.5.1共7个版本的...gradle-5.1.1-all.zip gradle-5.1-all.zip gradle-5.2-all.zip gradle-5.3.1-all.zip gradle-5.3-all.zip gradle-5.4.1-all.zip gradle-5.4-all.zip gradle-5.5.1-all.zip
gradle-6.7.1-bin离线包
gradle的如下版本gradle-6.7.1-bin.rar gradle的如下版本gradle-6.7.1-bin.rar gradle的如下版本gradle-6.7.1-bin.rar gradle的如下版本gradle-6.7.1-bin.rar
gradle-7.3.3-bin
gradle-5.6.4-all.zip gradle-5.4.1-all.zip gradle-5.1.1-all.zip gradle-4.10.1-all.zip gradle-4.4-all.zip
L21-Gradle Plugin-讲义.pdf
gradle-8.2-bin.zip
gradle-eclipse-aar-plugin, 在 Eclipse 上,使用 Android AAR库的Gradle插件 gradle-eclipse-aar-plugin Gradle插件在 Eclipse 上使用 Android AAR库。使用这个插件,你可以管理Gradle的依赖项,并在 Eclipse 上...
文件包含gradle-6.0.1-all.zip和gradle-6.0.1-bin.zip 下载后放到本地目录,设置distributionUrl即可进行编译 如需其他资源可以留言
gradle-7.0.2-bin(最新版配套使用)
offline-android-gradle-plugin-preview.zip文件126M,2020/06/22日官网下载的。离线编译工程用
gradle-7.2-all,gradle-7.0.2-bin
gradle-7.2-bin.rar
具体说,就是在c盘,你的用户名的文件夹内有一个 .gradle文件夹,以此打开里面的子文件夹到最后一层文件夹里,把这个zip包放到这里就可以。无需解压。然后到studio的界面,在file菜单下面,单击sync with gradle ...