0
<project name="MyProject" default="run" basedir=".">
    <description>
        simple example build file
    </description>
  <!-- set global properties for this build -->
  <property name="src" location="./src"/>
  <property name="build" location="./build"/>
  <property name="lib" location="./lib"/>
  <property name="zmq.dir" location="/usr/local/share/java"/>

  <path id="classpath.compile">
      <fileset dir="${lib}">
          <include name="**/*.jar"/>
      </fileset>
      <pathelement location="${zmq.dir}/zmq.jar"/>
  </path>

  <path id="classpath.run">
     <path refid="classpath.compile"/>
      <fileset dir="${build}/classes">
          <include name="**/*.class"/>
      </fileset>
  </path>

  <target name="clean"
        description="clean up" >
    <delete dir="${build}"/>
  </target>

  <target name="init" depends="clean">
    <!-- Create the build directory structure used by compile -->
    <mkdir dir="${build}"/>
    <mkdir dir="${build}/classes"/> 
  </target>

  <target name="compile" depends="init"
        description="compile the source " >
    <property name="compile.classpath" refid="classpath.compile"/>
    <echo message="Compiling with classpath ${compile.classpath}"/>
    <javac srcdir="${src}" 
           destdir="${build}/classes">
        <classpath refid="classpath.compile"/>
    </javac>
  </target>

  <target name="run" depends="compile">
    <property name="run.classpath" refid="classpath.run"/>
    <echo message="Running with classpath ${run.classpath}"/>
    <java fork="true"
          dir="${build}/classes"
          classname="jgf.EMDR_Client"
          classpathref="classpath.run"/>
  </target>
</project>

プロジェクトを実行すると、java.lang.ClassNotFoundException: jgf.EMDR_Client

コンパイルして実行するためのクラスパスをエコーし​​ます

コンパイルは次のとおりです。

/Users/JGF/Projects/emdr/lib/json_simple-1.1.jar:/usr/local/share/java/zmq.jar

実行は次のとおりです。

/Users/JGF/Projects/emdr/lib/json_simple-1.1.jar:/usr/local/share/java/zmq.jar:/Users/JGF/Projects/emdr/build/classes/jgf/EMDR_Client.class

私のJAVA_HOMEは:/Library/Java/Home

ant java dir 属性は壊れていますか?

ここに画像の説明を入力

ここに画像の説明を入力

4

1 に答える 1

3

パスもIMHOで機能するはずですが、クラスパスタグを使用する必要があります。しかし、正しく使用してください。クラスをパスに直接追加しないでください。jar またはディレクトリのみを追加してください。

<path id="classpath.run">
  <path refid="classpath.compile"/>
  <pathelement location="${build}/classes" />
</path>

次のようなパスが表示されます。

/Users/JGF/Projects/emdr/lib/json_simple-1.1.jar:/usr/local/share/java/zmq.jar:/Users/JGF/Projects/emdr/build/classes

Java は最初に jar を調べ、次に directory を調べます/Users/JGF/Projects/emdr/build/classes

クラス を見つけるためにjgf.EMDR_Client、Java は という名前EMDR_Client.classのサブディレクトリで という名前のファイルを探しますjgf。これで、クラスが見つかるはずです。

繰り返しますが、クラスパス要素はクラスファイルではなく、ディレクトリまたは JAR ファイル (圧縮されたディレクトリ) です。

于 2012-12-17T13:34:27.587 に答える