繁体   English   中英

如何在类路径中使用ant包含多个jar?

[英]How can include multiple jars in the classpath using ant?

我在“src”文件夹中有一堆.java文件,这些文件依赖于“lib”文件夹中的三个jar。 我有以下build.xml文件:

<?xml version="1.0"?>
<project name="MyProj" basedir=".">
 <property name="src"   value="src"/>
 <property name="build" value="build"/>
 <property name="lib"   value="lib"/>


 <path id="master-classpath">
   <fileset dir="${lib}">
     <include name="activemq-all-5.1-SNAPSHOT.jar"/>
     <include name="geronimo-jms_1.1_spec-1.1.1.jar"/>
     <include name="activemq-core-5.3.0.jar"/>
   </fileset>
 </path>

 <javac destdir="${build}">
   <src path="${src}"/>
   <classpath refid="master-classpath"/>
 </javac>

</project>

编译很好,但是当我尝试并运行时,我得到了

“java.lang.NoClassDefFoundError:javax / jms / Destination”

但是,当我使用Eclipse在jar路径中包含jar时,这个程序运行并编译得很好。

编辑:所以我将jar复制到具有编译类的文件夹中。 主方法的类是NDriver.class。 当我尝试:

java -classpath ./geronimo-jms_1.1_spec-1.1.1.jar:./activemq-core-5.3.0.jar:./activemq-all-5.1-SNAPSHOT.jar NDriver

这给出了:

线程“main”中的异常java.lang.NoClassDefFoundError:NDriver

我很感激任何帮助。

运行应用程序时,需要将编译时使用的jar放在类路径 遗憾的是,您没有提供有关如何实际运行它的任何细节,因此很难提供更多指导。

更新:包含已编译类的目录也需要添加到类路径中。 如果从包含已编译类的目录启动java ,则可以使用. 指定当前目录。 将它添加到类路径中,如下所示,告诉java也在那里查找类(我已经添加.activemq-all-5.1-SNAPSHOT.jar ):

java -classpath ./geronimo-jms_1.1_spec-1.1.1.jar:./activemq-core-5.3.0.jar:./activemq-all-5.1-SNAPSHOT.jar:. NDriver

一种方式(与你的变量略有不同)

<path id="classpath">
    <fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>

<manifestclasspath property="manifest.classpath" jarfile="${jarfile}">
    <classpath refid="classpath"/>
</manifestclasspath>

<target name="jar" depends="compile" description="create the jar">
    <jar destfile="${jarfile}" basedir="${build.dir}">
        <manifest>
            <attribute name="Manifest-Version" value="${manifest-version}"/>
            <attribute name="Created-By" value="${ant.java.version}"/>
            <attribute name="Main-Class" value="${main-class}"/>
            <attribute name="Class-Path" value="${manifest.classpath}"/>
        </manifest>
    </jar>
</target>

当然,我假设您正在创建一个jar并运行它(包括那里的类路径)。 另一种选择是使用一个run目标,该目标使用<java>标记并在那里显式使用类路径。

运行程序时,库jar是否包含在类路径中? Eclipse会自动添加这些,但您需要在从命令行运行程序时指定它们。

根据我的经验,似乎Eclipse通常会在类路径中包含类和jar,而不显式使用类路径声明。 实际上,有时很难从Eclipse的构建中删除类(它们必须被删除或清除)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM