我正在学习使用安全管理器,我在运行单元测试时收到此错误:
Exception in thread "main" java.security.AccessControlException: access denied ("java.io.FilePermission" "C:\Users\[username]\AppData\Local\NetBeans\Cache\7.4\executor-snippets\junitvmwatcher1469887727677239882.properties" "write")
对该目录授予权限很简单。问题是我在不同的计算机上运行此代码。理想情况下,我想做这样的事情:
permission java.io.FilePermission "*/NetBeans/Cache/7.4/-", "write";
但显然SecurityManager无法识别路径开头的通配符。我尝试过使用星号和破折号。两者都不起作用。
基本上,我想让我的测试运行而不需要硬编码绝对路径。还有另一种方法可以达到这个目的吗?
答案 0 :(得分:1)
您可以使用property expansion in policy files:
例如,权限java.io.FilePermission“$ {user.home}”,“read”; 将展开“$ {user.home}”以使用“user.home”系统属性的值。
你可以设置:
permission java.io.FilePermission "${user.home}/AppData/Local/NetBeans/-", "write";
得到你想要的东西?