如何把Jar包添加到Ngrinder的WorkerProcess的classpath里面

时间:2021-08-19 09:12:56

在Ngrinder里面添加一个新功能,引用到apache的csv的包。部署完后调用发现报类找不到的错。看了下启动的command,确实没有把jar包放在workprocess启动的classpath里面。

分析了下源码,workerprocess启动的命令是由WorkerProcessCommandLine构建。

public WorkerProcessCommandLine(GrinderProperties properties,
                                  Properties systemProperties,
                                  String jvmArguments,
                                  Directory workingDirectory)

WorkProcessCommandLine 构建的class path有两个来源,

1. 传进来的GrinderProperties,property文件传进来的时候带的classpath是测试项目引用的jar包列表。

2. systemProperties。

systemProperties是用AgentImplementationEx传进来的。

						final WorkerProcessCommandLineEx workerCommandLine = new WorkerProcessCommandLineEx(properties,
								filterSystemClassPath(rebasedSystemProperty, handler, m_logger), jvmArguments,
			    					script.getDirectory());

其中的filterSystemClassPath最终会调用下面这个方法来觉得使用哪些jar

	public String filterClassPath(String classPath, Logger logger) {
		List<String> classPathList = new ArrayList<String>();
		for (String eachClassPath : checkNotNull(classPath).split(File.pathSeparator)) {
			String filename = FilenameUtils.getName(eachClassPath);
			if (isUsefulJar(filename) || isUsefulReferenceProject(eachClassPath)) {
				logger.trace("classpath :" + eachClassPath);
				classPathList.add(eachClassPath);
			}

		}
		return StringUtils.join(classPathList, File.pathSeparator);
	}

所以最终的方案就需要在isUsefulJar的列表里面把需要的jar包名包括进去。