0

我在包客户端中有一个简单的类 FabricClient,它带有一个公共静态 void main()。这个包位于我项目的“bin”目录中。从 bin 目录,在命令行中,我可以执行这个类中的 main 如下:

user@sys /c/projects/myproject/bin
$ java -classpath .;c:\dir\my.jar client.FabricClient

我想从我手动运行 java 命令的父目录 (/c/projects/myproject) 执行我的 ant build.xml 文件。我尝试使用 dir 属性如下:

  <target name="run-client">
    <java classname="client.FabricClient"
        classpath="${classpath}"
        fork="true"
        failonerror="true"
        dir="./bin">
     </java>          
  </target>

我的类路径变量确实具有当前目录以及命令行上使用的 my.jar 的目录(用于编译该类的我的 ant 命令适用于相同的变量)

以下是用于生成类路径的设置

  <property name="my.jar" location="c:\dir\my.jar" />
  <property name="classpath" location=".:${my.jar}:." />

我得到典型的 java.lang.NoClassDefFound 错误:client/FabricClient

我正在使用 Ant 1.7.0 版

如果我将 build.xml 文件移动到 bin 并删除 dir 属性,它工作正常。您可以从本地目录以外的目录运行 java 吗?我认为这就是 dir 属性所做的。

4

2 回答 2

1

ant 中的路径通常是这样引用的:

<java classname="client.FabricClient"
    fork="true"
    failonerror="true"
    dir="./bin">
    <classpath>
         <pathelement location="C:/dir/my.jar"/>        
    </classpath>

它更具可读性和可靠性

于 2011-03-10T14:39:45.460 回答
0

您的类路径应该包含文件my.jar,而不是my.jar 所在的目录。

于 2011-03-10T14:22:29.917 回答