0
我们遇到了一个长时间运行的Java进程突然吐出java.lang.SecurityException的问题:密封违规:package .. is在JVM运行时覆盖密封的jar后,密封 。如何创建一个java.lang.SecurityException异常:密封违规:package ..被密封
我有点理解这个异常,但为了重现这个(以及后面的内容),我试图人为地创建一个密封的异常,它不工作。
有一个名为 'seal.jar' 与META-INF/MANIFEST.MF文件中像这样一个jar文件:
Manifest-Version: 1.0
Sealed: true
此包中包含A1,A2,A3这样的:
package sealed;
public class A1
{
public A1()
{
System.err.println("Created version 1.0 of " + this.getClass());
}
}
有第二罐子密封2.0.jar具有相同的三个类,但印刷“2.0版” 现在第三jar文件(run.jar)有这样的内容:
import sealed.A1;
import sealed.A2;
import sealed.A3;
public class SealingTest
{
public static void main(String[] args) {
int cnt=0;
try {
while(true) {
if(cnt%3==0) {
new A1();
}
else if(cnt%3==1) {
new A2();
}
else if(cnt%3==2) {
new A3();
}
Thread.sleep(5000);
cnt++;
}
}
catch (Throwable t) {
t.printStackTrace();
}
}
}
而且我认为这将代码,然后将创建当我做下面的密封例外:
C:\CodeStreet\FTP>java -cp run.jar;seal-1.0.jar SealingTest
Created 1.0 of class sealed.A1 # now executing: copy seal-2.0.jar seal-1.0.jar
Created 2.0 of class sealed.A2
Created 2.0 of class sealed.A3
Created 1.0 of class sealed.A1
所以它看起来像A1从密封1.0.jar加载,但是A2从覆盖密封装-1.0.jar。
不应该因为第一个类(A1)从seal-1.0.jar加载而第二个类(A2)被覆盖的文件加载了密封违规?
阅读关于jar包密封的简单教程,以及如何在简单的程序中获得'SecurityException'。 http://www.journaldev.com/1347/java-jar-sealing-packages – Pankaj