fork属性

広告

前のページで実行対象としたプログラムは下記のようにしていました。

public class test{
  public static void main(String args[]){
    System.out.println("Antの実験です");
  }
}

実はクラス名の前の「public」を省略するとエラーとなります。

Javaタスク利用時のエラー

エラーは下記のようなものです。

[java] java.lang.IllegalAccessException: Class org.apache.tools.ant.taskdef
s.ExecuteJava can not access a member of class test with modifiers "public stati
c"

よく原因は分からないのですが「fork」属性を"yes"にすると問題なく動くようです。

デフォルトでは「fork」属性はセットされていないので、Antが動いているJVMと同じJVM上でプログラムを実行します。これに対して「fork」属性をセットすると、Antが動いているJVMとは別のJVMを使ってプログラムが実行されます。

では試してみます。今度は対象となるプログラムのクラス名の前の「public」を省略しています。

test.java

class test{
  public static void main(String args[]){
    System.out.println("Antの実験です");
  }
}

またビルドファイルは下記のようにします。

build4.xml

<?xml version="1.0" encoding="Shift_JIS"?>

<project name="antsample" default="compile">

  <property name="src" location="./src"/>
  <property name="class" location="./class"/>

  <target name="compile">
    <javac srcdir="${src}" destdir="${class}" />
  </target>

  <target name="exec" depends="compile">
    <java classname="test" classpath="${class}" fork="yes" />
  </target>

</project>

ではantを実行してみます。

fork属性

今度は無事実行できました。なぜこうなるのかはちょっと分かっていないので分かり次第また書き直します。

( Written by Tatsuo Ikura )