class Main {
public static void main(String[] args) {
....
}
}
シェルを介してプログラムを開始する: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をプライベートメソッドで起動すると、同じセキュリティメカニズムを通過しませんか?
この質問は似ていますが、私はまだ理解していません