运行用Ant构建的Java时缺少类错误

运行用Ant构建的Java时缺少类错误,java,ant,Java,Ant,我修改了一些代码 当我尝试在目录中运行Ant时,由于缺少类而失败。我可以使用ant的-lib选项指定现有类的位置。编译工作正常,但是创建的dist-ZIP文件似乎缺少库,因为当我尝试运行它时,我看到与缺少的类相关的错误,这些类是我用-lib选项指定的类,所以这可能是由于我使用-lib选项的方式 如何强制常规Ant命令包含使用-lib命令指定的其他类?您可以编写一个目标,将lib目录/文件复制到zip文件中。 假设创建一个临时目录,然后复制文件,然后执行复制lib目录的目标,然后执行zip临时目录

我修改了一些代码

当我尝试在目录中运行Ant时,由于缺少类而失败。我可以使用ant的-lib选项指定现有类的位置。编译工作正常,但是创建的dist-ZIP文件似乎缺少库,因为当我尝试运行它时,我看到与缺少的类相关的错误,这些类是我用-lib选项指定的类,所以这可能是由于我使用-lib选项的方式


如何强制常规Ant命令包含使用-lib命令指定的其他类?

您可以编写一个目标,将lib目录/文件复制到zip文件中。 假设创建一个临时目录,然后复制文件,然后执行复制lib目录的目标,然后执行zip临时目录

<target name="copyLib">
    <copy todir="${temp.dir}">
         <fileset dir="${lib.dir}">
            <include name="*.jar" />                        
        </fileset>
    </copy>
</target>


更新路径并将此目标调用到创建zip目标中。

您可以编写一个目标,将库目录/文件复制到zip文件中。 假设创建一个临时目录,然后复制文件,然后执行复制lib目录的目标,然后执行zip临时目录

<target name="copyLib">
    <copy todir="${temp.dir}">
         <fileset dir="${lib.dir}">
            <include name="*.jar" />                        
        </fileset>
    </copy>
</target>


更新路径并将此目标调用到创建zip目标中。

编译器任务可能如下所示:

<javac srcdir="${base}/src" 
      destdir="${base}/classes" 
      classpath="${base}/lib">
</javac>
<zip
    destfile="${base}/dist.jar"
    basedir="${base}/classes"
    includes="..."
    excludes="...">
</zip>

因此,源代码在类中编译并压缩到jar中,但用于编译的库不包括在jar中,它们是运行时依赖项

编译器任务可能如下所示:

<javac srcdir="${base}/src" 
      destdir="${base}/classes" 
      classpath="${base}/lib">
</javac>
<zip
    destfile="${base}/dist.jar"
    basedir="${base}/classes"
    includes="..."
    excludes="...">
</zip>

因此,源代码在类中编译并压缩到jar中,但用于编译的库不包括在jar中,它们是运行时依赖项

我建议您使用文件集在ANT脚本顶部声明路径,如下所示

<path id="build.path">
    <fileset dir="lib" includes="*.jar"/>
</path>

与强制用户指定正确的“-lib”参数相比,更不容易出错

最后,可以使用相同的文件集在正在创建的zip文件中包含相同的jar:

  <zip destfile="${dist.dir}/mycode.zip">
    ..
    ..
    <fileset dir="lib" includes="*.jar"/>
  </zip>

..
..

我建议您使用文件集在ANT脚本顶部声明路径,如下所示

<path id="build.path">
    <fileset dir="lib" includes="*.jar"/>
</path>

与强制用户指定正确的“-lib”参数相比,更不容易出错

最后,可以使用相同的文件集在正在创建的zip文件中包含相同的jar:

  <zip destfile="${dist.dir}/mycode.zip">
    ..
    ..
    <fileset dir="lib" includes="*.jar"/>
  </zip>

..
..

谢谢,我对ant知之甚少。我该怎么做呢?这听起来像是我需要的。谢谢,我对蚂蚁知之甚少。我该怎么做呢?这听起来像是我需要的。这假设${base}/lib有java类,而不是一组jar。根据ANT文档,
classpath
有一个类似路径的结构,因此它完全可以是一个包含jar的文件夹,您需要为每个jar
指定一个jar,但
也可以工作。这假设${base}/lib有java类,并且不是一组jars根据ANT文档,
classpath
具有类似路径的结构,因此它可以完美地成为一个包含jar的文件夹,您需要为每个jar指定一个jar
,但是
也可以工作