在筛选一系列Stackoverflow主题时,我发现了如何使用反射调用saveGlobalProjectData:
String methodName = "saveGlobalProjectData";
Class saveClass = Class.forName(className);
java.lang.reflect.Method saveMethod = saveClass.getDeclaredMethod(methodName, new Class[0]);
saveMethod.invoke(null, new Object[0]);
logger.debug("Saved coverage data");
我遇到的问题是将数据保存到工作目录。在我的情况下,这是我们部署的ear文件。这很有趣。
如果您要更改此代码保存的目录,则必须更改系统属性
net.sourceforge.cobertura.datafile
在我的情况下,这意味着使用以下行编辑spc-jboss.conf.1文件:
-Dnet.sourceforge.cobertura.datafile=/tmp/cobertura/cobertura_integration.ser
您会注意到您也可以重命名该文件!额外奖金!
但有一点需要注意的是,我发现这个变量是在服务器启动时早期由cobertura运行的。获取此变量的cobertura代码会缓存结果(当前工作目录,请参阅下文),并且不会覆盖它。这意味着您无法在运行的代码中设置此项并希望更改文件位置或名称。它必须在服务器配置中完成。
Cobertura代码(形成不同的.java文件,但在此处合并):
public static File getDefaultDataFile() {
// return cached defaultFile
if (defaultFile != null) {
return defaultFile;
}
// load and cache datafile configuration
ConfigurationUtil config = new ConfigurationUtil();
defaultFile = new File(config.getDatafile());
return defaultFile;
}
public String getDatafile() {
return getProperty("net.sourceforge.cobertura.datafile",
"cobertura.ser");
}
希望此解决方案能够帮助所有想要使用反射调用并将文件保存到具有特定名称的特定目录的人。