2 votes

Inclure les dépendances de la jarre d'hibernate dans la construction d'ant

J'essaie de compiler un fichier jar exécutable pour un projet qui fait appel à Hibernate. J'essaie de construire un fichier ant build.xml pour rationaliser mon processus de construction, mais j'ai des problèmes avec l'inclusion de hibernate3.jar dans le fichier jar final.

Si j'exécute l'ant script je parviens à inclure tous mes jars de bibliothèque, et ils sont mis dans le Root du jar-file final. Lorsque j'exécute le jar-file, j'obtiens un message d'erreur

java.lang.NoClassDefFoundError: org/hibernate/Session 

erreur. Si j'utilise l'exportation intégrée vers le jar dans Eclipse, cela ne fonctionne que si je choisis "extraire les bibliothèques requises dans le jar". Mais cela gonfle le jar, et inclut trop de mon projet (par exemple, les tests unitaires).

Voici le manifeste que j'ai généré :

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

Et la partie du build.xml ressemble à ceci :

<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>

Les 'refids' pour les zipfilesets pointent vers les répertoires d'un répertoire de bibliothèque lib dans la racine du projet. La variable manifest.classpath prend le classpath de tous ces fichiers jar de la bibliothèque, et les aplatit avec pathconvert et mapper.

J'ai également essayé de définir le classpath du manifeste à ".", "./" et seulement le jar de la bibliothèque, mais sans aucune différence. J'espère qu'il y a un remède simple à mes problèmes...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X