相关疑难解决方法(0)

使用Ant时java.security.AccessControlException,但从控制台调用java时运行正常

我有以下Ant <java>任务:

<property name="classpath-run.msg" refid="run.classpath"/>
<echo message="running the app with classpath = ${classpath-run.msg}"/>
<echo message="Java version used (ant.java.version): ${ant.java.version}"/>
<echo message="Java version used (    java.version): ${java.version}"/>
<java classname ="${project.MainClass.name}">
    <permissions>
        <grant class="java.security.AllPermission"/>
        <grant class="javax.management.MBeanTrustPermission" action="register"/>  
    </permissions>
    <classpath refid="run.classpath"/>
</java>
Run Code Online (Sandbox Code Playgroud)

当我运行Ant时执行任务失败(见下面的跟踪).当我复制粘贴回显的类路径并使用java -classpath从命令行运行我的代码时,执行成功!

在这两种情况下都使用相同版本的java.

我怎么可能观察到不同的行为?一个java.security.AccessControlException坐在堆栈跟踪的根,但我已经给予我的Ant的java任务中的所有安全权限,包括明确的MBeanTrustPermission的行动寄存器也出现在堆栈跟踪.

跟踪(在Ant下运行时)如下:

 [java] java.lang.ExceptionInInitializerError
 [java]     at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:194)
 [java]     at org.apache.tools.ant.taskdefs.Java.run(Java.java:771)
 [java]     at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:221)
 [java]     at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:135)
 [java]     at org.apache.tools.ant.taskdefs.Java.execute(Java.java:108) …
Run Code Online (Sandbox Code Playgroud)

java ant

8
推荐指数
3
解决办法
1万
查看次数

标签 统计

ant ×1

java ×1