通过 javac -classpath xxx 我们可以指定 classpath 用于编译,而在 ant 中如何做呢?
很简单,如下:
-------------------- build.xml ---------------------
<path id="prj.classpath">
<pathelement location="./lib/jsr166y.jar" />
</path>
<target name="compile" depends="init" description="Compile Java Code">
<javac srcdir="src" destdir="build/classes">
<classpath refid="prj.classpath" />
</javac>
</target>
------------------------------------------------------
同样,我们常用 $make run 来运行程序,如下,我们实现 $ant run
-------------------- build.xml ---------------------
<target name="run" depends="package">
<exec executable="java">
<arg line="-classpath lib/jsr166y.jar -jar dist/hello-fj.jar" />
</exec>
</target>
------------------------------------------------------
<exec> 不支持 <classpath> 这个 tag (当然不支持,ant都不知道你是否运行 java 这个 executable)。
<exec> 支持啥,参考这里:
http://ant.apache.org/manual/CoreTasks/exec.html------------------------------------------------------
2009-07-05
上面的 <arg line="-classpath lib/jsr166y.jar -jar dist/hello-fj.jar" /> 这句话是有问题的。我们来做个试验:
小程序:
public class MyHello {
public static void main(String[] args) {
System.out.println(System.getProperty("java.class.path"));
}
}
$ java MyHello
. -- 默认是 .
$ java -cp lib/jsr166y.jar MyHello
Exception in thread "main" java.lang.NoClassDefFoundError: MyHello
$ java -cp .:lib/jsr166y.jar MyHello
.:lib/jsr166y.jar
$ java -cp .:lib/a.jar -jar lib/jsr166y.jar MyHello
Failed to load Main-Class manifest attribute from
lib/jsr166y.jar
发现了么,-jar 会把 "java.class.path" 修改为 lib/jsr166y.jar,-cp .:lib/a.jar 没有起作用。
恩,所以我们上面的 ant 脚本要这样写:
<arg line="-classpath lib/jsr166y.jar:dist/hello-fj.jar MainClass" />
当然,在实际应用中,我们可以用 shell 直接将 $CLASSPATH 设置好,然后启动 java 即可。
评论