Java 如何设置Cobertura saveGlobalProjectData的保存目录?
在筛选大量Stackoverflow主题时,我发现了如何使用反射调用saveGlobalProjectData:Java 如何设置Cobertura saveGlobalProjectData的保存目录?,java,file,path,save,cobertura,Java,File,Path,Save,Cobertura,在筛选大量Stackoverflow主题时,我发现了如何使用反射调用saveGlobalProjectData: String methodName = "saveGlobalProjectData"; Class saveClass = Class.forName(className); java.lang.reflect.Method saveMethod = saveClass.getDeclaredMethod(methodName, new Class[0]); saveMethod.
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文件,但在此处合并):
希望此解决方案能够帮助所有希望使用反射调用并使用特定名称将文件保存到特定目录的人。两条注释:1)第一个代码段缺少“className”的值/声明。这很重要。2) 发布解决方案的礼仪/推荐方式是先用短语表达问题,然后自己发布答案。这样,寻找问题的人可以更好地找到你的问题,人们也可以提供其他答案,或者将来提供更多更新版本。
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");
}