代码之家  ›  专栏  ›  技术社区  ›  James

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

  •  3
  • James  · 技术社区  · 15 年前

    我在“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.noclassedeffounderror: javax/jms/目的地”

    不过,当我使用Eclipse在buildPath中包含jar时,这个程序运行和编译都很好。

    编辑:所以我把jar复制到了包含编译类的文件夹中。主方法的类是ndriver.class。当我尝试:

    Java类路径 /geronimo-jms_1.1_spec-1.1.1.jar:/activemq-core-5.3.0.jar:/activemq-all-5.1-snapshot.jar N驱动程序

    这给出:

    线程“main”中出现异常 java.lang.noclasdeffounderror(Java.lang.noclasdeffounderror: N驱动程序

    我很感谢你的帮助。

    4 回复  |  直到 15 年前
        1
  •  3
  •   Pascal Thivent    15 年前

    运行 应用程序。遗憾的是,您没有提供任何关于您实际运行情况的详细信息,因此很难提供更多指导。

    更新: 包含已编译类的目录也需要添加到类路径中。如果你发射 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
    
        2
  •  2
  •   Davide    15 年前

    单向(与您的变量稍有不同)

    <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> 标记并显式使用那里的类路径。

        3
  •  1
  •   Andreas Kraft Vinod Joshi    15 年前

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

        4
  •  0
  •   peter.murray.rust    15 年前

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