class Main {
public static void main(String[] args) {
....
}
}
通过 shell 启动程序:java Main
按预期工作,但通过 ant 启动程序:
<target name="run" depends="cmp">
<java classname="Main" classpath="."/>
</target>`
导致此错误:
java.lang.IllegalAccessException: Class org.apache.tools.ant.taskdefs.ExecuteJava can not access a member of class Main with modifiers "public static"
JLS 第 12.3.3 节符号引用的解析:
IllegalAccessError:遇到了一个符号引用,它指定了一个字段的使用或分配,或方法的调用,或类的实例的创建,包含该引用的代码无权访问,因为该字段或方法是声明为私有、受保护或默认访问(非公共),或者因为该类未声明为公共。
所以org.apache.tools.ant.taskdefs.ExecuteJava
无法执行该方法,因为它的封闭类是私有的,但是如果我用私有方法启动指向 .class 的 jvm,它不会通过相同的安全机制?
这个问题类似,但我还是不明白