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

在ant构建中包含hibernate jar依赖项

  •  2
  • Patrick  · 技术社区  · 16 年前

    我试图为一个使用hibernate的项目编译一个可运行的jar文件。我试图构造一个ant build.xml文件来简化构建过程,但是在最终的jar文件中包含hibernate3.jar时遇到了问题。

    如果我运行ant脚本,我会设法包含所有的库jar,并将它们放在最终jar文件的根目录中。当我运行jar文件时,我得到一个

    java.lang.NoClassDefFoundError: org/hibernate/Session 
    

    错误。如果我在Eclipse中使用内置的export to jar,那么只有选择“extract required libraries into jar”才能工作。但这会使jar膨胀,并包含太多的项目(即单元测试)。

    Manifest-Version: 1.0
    Main-Class: main.ServerImpl
    Class-Path: ./ antlr-2.7.6.jar commons-collections-3.1.jar dom4j-1.6.1.jar
    hibernate3.jar javassist-3.9.0.GA.jar jta-1.1.jar slf4j-api-1.5.11.jar 
    slf4j-simple-1.5.11.jar mysql-connector-java-5.1.12-bin.jar rmiio-2.0.2.jar 
    commons-logging-1.1.1.jar
    

    build.xml的部分如下所示:

    <target name="dist" depends="compile" description="Generates the Distribution Jar(s)">
        <mkdir dir="${dist.dir}" />
        <jar destfile="${dist.dir}/${dist.file.name}.jar" basedir="${build.prod.dir}" filesetmanifest="mergewithoutmain">
            <manifest>
                <attribute name="Main-Class" value="${main.class}" />
                <attribute name="Class-Path" value="./ ${manifest.classpath} " />
                <attribute name="Implementation-Title" value="${app.name}" />
                <attribute name="Implementation-Version" value="${app.version}" />
                <attribute name="Implementation-Vendor" value="${app.vendor}" />
            </manifest>
            <zipfileset refid="hibernatefiles" />
            <zipfileset refid="slf4jfiles" />
            <zipfileset refid="mysqlfiles" />
            <zipfileset refid="commonsloggingfiles" />
            <zipfileset refid="rmiiofiles" />
        </jar>
    </target>
    

    我还尝试将manifest类路径设置为“.”、“./”,并且只设置库jar,但设置为完全没有区别。我希望有一个简单的方法来解决我的问题。。。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Victor Sorokin    16 年前

    因为不能在类路径中指定jar-inside-jar,所以这种方法不起作用。 你只需要一个罐子 你的

    #!/bin/sh
    java -cp ./hibernate.jar:./mycode.jar... my.Main
    

    (这是大多数人所做的),或者您可以将所有lib jar解压到包含 编译 类,然后jar result dir返回到单个jar文件(这就是maven jar和dependencies打包所做的)。

    推荐文章