Ngrinder 源码之Maven 项目
Ngrinder支持Maven结构的测试脚本。使用ScriptHandlerFactory来个脚本选择处理器handler,目前有JythonScriptHandler, GroovyScriptHandler和GroovyMavenProjectHandler三种。 ScriptHandlerFactory初始化的时候会按各个handler的order和displayOrder排序(升序)。
public void init() {
// Sort by the order of scriptHandlers..
Collections.sort(scriptHandlers, new Comparator<ScriptHandler>() {
@Override
public int compare(ScriptHandler o1, ScriptHandler o2) {
return o1.order().compareTo(o2.order());
}
});
// Sort by the order of scriptHandlers..
visibleHandlers = newArrayList();
for (ScriptHandler each : this.scriptHandlers) {
if (!(each instanceof NullScriptHandler)) {
visibleHandlers.add(each);
}
}
Collections.sort(visibleHandlers, new Comparator<ScriptHandler>() {
@Override
public int compare(ScriptHandler o1, ScriptHandler o2) {
return o1.displayOrder().compareTo(o2.displayOrder());
}
});
}
然后选择handler的时候按order升序,找到第一个canHandler为true的处理器返回。
public ScriptHandler getHandler(FileEntry fileEntry) {
for (ScriptHandler handler : scriptHandlers) {
if (handler.canHandle(fileEntry)) {
return handler;
}
}
// Actually nothing is reach here.
throw processException("no matching handler for " + fileEntry.getPath());
}
MavenScriptProjectHandler 判断canhandle就是看根目录下有没有.pom文件
return getFileEntryRepository().hasOne(fileEntry.getCreatedUser(), getBasePath(path) + "/pom.xml");
Maven项目运行时,maven里面依赖的包会自动拷贝到./lib文件夹下
@Override
protected void prepareDistMore(Long testId, User user, FileEntry script, File distDir,
PropertiesWrapper properties, ProcessingResultPrintStream processingResult) {
String pomPathInSVN = PathUtils.join(getBasePath(script), "pom.xml");
MavenCli cli = new MavenCli();
processingResult.println("\nCopy dependencies by running 'mvn dependency:copy-dependencies"
+ " -DoutputDirectory=./lib -DexcludeScope=provided'");
int result = cli.doMain(new String[]{ // goal specification
"dependency:copy-dependencies", // run dependency goal
"-DoutputDirectory=./lib", // to the lib folder
"-DexcludeScope=provided" // but exclude the provided
// library
}, distDir.getAbsolutePath(), processingResult, processingResult);
boolean success = (result == 0);
if (success) {
processingResult.printf("\nDependencies in %s was copied.\n", pomPathInSVN);
LOGGER.info("Dependencies in {} is copied into {}/lib folder", pomPathInSVN, distDir.getAbsolutePath());
} else {
processingResult.printf("\nDependencies copy in %s is failed.\n", pomPathInSVN);
LOGGER.info("Dependencies copy in {} is failed.", pomPathInSVN);
}
// Then it's not necessary to include pom.xml anymore.
FileUtils.deleteQuietly(new File(distDir, "pom.xml"));
processingResult.setSuccess(result == 0);
}
这里有两个注意的地方。
- Ngrinder使用MavenCli来运行maven命令,所以跟本机的maven环境不一样,如果有特殊的maven setting要配置的话要手动给maven指定setting.xml的位置。
public static final File DEFAULT_GLOBAL_SETTINGS_FILE =
new File( System.getProperty( "maven.home", System.getProperty( "user.dir", "" ) ), "conf/settings.xml" );
ngrinder通过获取环境变量maven.home来查找setting.xml, 可以启动的时候加参数-Dmaven.home=xxxxx来指定maven 的配置。
- Ngrinder会把pom文件里面的provided scope的依赖包自动过滤掉,所以对于一些会导致包冲突的artifact可以用scope来exclude掉。
Ngrinder 源码之Maven 项目的更多相关文章
- Springboot源码分析之项目结构
Springboot源码分析之项目结构 摘要: 无论是从IDEA还是其他的SDS开发工具亦或是https://start.spring.io/ 进行解压,我们都会得到同样的一个pom.xml文件 4. ...
- gperftools源码分析和项目应用 - CPU Profiler
gperftools源码分析和项目应用 - CPU Profiler 原文:https://blog.csdn.net/yubo112002/article/details/81076821 原文链接 ...
- IdentityServer4源码解析_1_项目结构
目录 IdentityServer4源码解析_1_项目结构 IdentityServer4源码解析_2_元数据接口 IdentityServer4源码解析_3_认证接口 IdentityServer4 ...
- JAVA上百实例源码以及开源项目
简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬. ...
- 谷歌开源项目Chromium的源码获取与项目构建(Win7+vs10/vs13)
转自:http://blog.csdn.net/kuerjinjin/article/details/23563059 从12年那会儿开始获取源码和构建chromium项目都是按照那时候的官方要求用w ...
- 个人从源码理解angular项目在JIT模式下的启动过程
通常一个angular项目会有一个个模块(Module)来管理各自的业务,并且必须有一个根模块(AppModule)作为应用的入口模块,整个应用都围绕AppModule展开.可以这么说,AppModu ...
- elementUi源码解析(1)--项目结构篇
因为在忙其他事情好久没有更新iview的源码,也是因为后面的一些组件有点复杂在考虑用什么方式把复杂的功能逻辑简单的展示出来,还没想到方法,突然想到element的组件基本也差不多,内部功能的逻辑也差不 ...
- Robotium实践之路源码创建测试项目
1.JDK安装及环境配置 2.Eclipse安装 3.ADT插件安装 4.模拟器安装 5.准备源码 6.引进源码置项目中 .文件 .导入 .选择现有项目置工作空间中 .浏览 .选择项目,选择模拟器版本 ...
- 拼图游戏源码-swift版项目源码
作者fanyinan,源码PuzzleProject,公司的项目中需要一个拼图游戏,之前有手动拼图和随机打乱的功能,近期又由于个(xian)人(zhe)爱(dan)好(teng)自己加入了自动拼图功能 ...
随机推荐
- vue使用scss应该安装哪些依赖
通过vue-cli搭建的项目如果想使用scss的话除了安装sass-loader,还需要安装node-sass cnpm install sass-loader node-sass -D
- In Unix, what is tar, and how do I use it?
In Unix, the name of the tar command is short for tape archiving, the storing of entire file syste ...
- SQL语句复习【专题三】
SQL语句复习[专题三] DML 数据操作语言[insert into update delete]创建表 简单的方式[使用查询的结果集来创建一张表]create table temp as sele ...
- Vim技巧----光标移动
w:向前移动,光标停留在下个单词词首,每次一个单词(单词中不含其他字符如:- \ = +等) W:向前移动,光标停留在下个单词词首,每次一个字符串(字符串可以含有其字符如:- \ = +等,is-a ...
- python模块、面向对象编程
目录: 模块补充 xml 面向对象 一.模块补充 shutil: 文件复制模块:进行文件copy.压缩: 使用方法: 将文件内容拷贝到另一个文件中,可以部分内容 shutil.copyfileobj( ...
- Linux FTP 命令全集
Linux FTP 命令全集 1 前言 下面就所有命令给出解释和例子. 说明: 1. remote-file 指远程文件,即服务器上的文件 2. local-file 指本地文件,即本地机器上的文 ...
- Scala(二)——基础语法(与Java的区分)和函数式编程
Scala快速入门(二) 一.键盘输入 关于基本类型的运算,以及复制运算,条件运算,运算符等知识,均和Java语言一样,这里不过多叙述. val name = StdIn.readLine() Std ...
- 第一章 Vue介绍
5 MVC和MVVM的关系图解 MVVM是前端视图层的分层开发思想,主要把每个页面,分层了M.V和VM.其中,VM是MVVM思想的核心,因为VM是M和V之间的调度者 6 Vue基本代码和MVVM之间对 ...
- 怎么卸载hexo
npm uninstall hexo -g 卸载失败 npm uninstall hexo-cli -g 推荐这个,成功卸载
- Linux常用命令之info、cal、echo命令
info命令,是Linux下info格式的帮助指令 执行man info可以查看info命令的 语法 info(选项)(参数) 选项 -d:添加包含info格式帮助文档的目录: -f:指定要读取的in ...