Avatar billede fredand Forsker
03. december 2007 - 21:52 Der er 10 kommentarer og
1 løsning

How to initiate my Hibernate Config form a Jar?

Hello!

I have a small app in a packed in a Jar. (I pack it from Eclipse)
(Run from eclipse everything works perfect)

But when I run it from the jar file like "java -jar hibernatetest.jar"
I get a:
java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration
java.lang.ExceptionInInitializerError


In my manifest.mf I have added a classpath:
Manifest-Version: 1.0
Main-Class: javaapplication.NameJavaApplication
Class-Path: lib/ant-antlr-1.6.5.jar;lib/antlr-2.7.5H3.jar;lib/asm-attrs.jar;lib/asm.jar;lib/cglib-2.1.2.jar;lib/commons-collections-2.1.1.jar;lib/commons-logging-1.0.4.jar;lib/dom4j-1.6.1.jar;lib/ehcache-1.1.jar;lib/hibernate3.jar;lib/jta.jar;lib/log4j-1.2.11.jar;lib/mysql-connector-java-3.0.15-ga-bin.jar

The structure of jar looks like
javaapplication
META-INF
lib
hibernate.cfg.xml

Dou you see what I miss?
Avatar billede fredand Forsker
03. december 2007 - 21:54 #1
Manifest lokks like:
Manifest-Version: 1.0
Main-Class: javaapplication.NameJavaApplication
Class-Path: lib/ant-antlr-1.6.5.jar;lib/antlr-2.7.5H3.jar;lib/asm-attrs.jar;lib/asm.jar;lib/cglib-2.1.2.jar;lib/commons-collections-2.1.1.jar;lib/commons-logging-1.0.4.jar;lib/dom4j-1.6.1.jar;lib/ehcache-1.1.jar;lib/hibernate3.jar;lib/jta.jar;lib/log4j-1.2.11.jar;lib/mysql-connector-java-3.0.15-ga-bin.jar

... looks like string goot cut off in prev message.
Avatar billede fredand Forsker
03. december 2007 - 21:55 #2
Que!!
Chopped of again:
Manifest-Version: 1.0
Main-Class: javaapplication.NameJavaApplication
Class-Path: lib/ant-antlr-1.6.5.jar;lib/antlr-2.7.5H3.jar;lib/asm-attrs.jar;lib/asm.jar;
lib/cglib-2.1.2.jar;lib/commons-collections-2.1.1.jar;lib/commons-logging-1.0.4.jar;lib/dom4j-1.6.1.jar;
lib/ehcache-1.1.jar;lib/hibernate3.jar;lib/jta.jar;lib/log4j-1.2.11.jar;
lib/mysql-connector-java-3.0.15-ga-bin.jar
Avatar billede arne_v Ekspert
03. december 2007 - 23:19 #3
Jeg mener at du bruger mellemrum og ikke semikolon i class-path i manifest !
Avatar billede arne_v Ekspert
03. december 2007 - 23:19 #4
I think you use space and not semicolon in class-path in manifest !
Avatar billede fredand Forsker
04. december 2007 - 21:06 #5
Hello!

Thanks for your reply.
Unfortenately I did not mange to fix it.
The Manifest looks like:

Manifest-Version: 1.0
Main-Class: javaapplication.NameJavaApplication
Class-Path: lib\ant-antlr-1.6.5.jar lib\antlr-2.7.5H3.jar ...

I have also tried "/" instead of "\".

So if you got any ideas please let me know.

Correct me if I am wrong when I say that you should be able to have jars in jars, and load classes from them during runtime?

Best regards
Fredrik
Avatar billede arne_v Ekspert
04. december 2007 - 21:17 #6
space is correct

/ should work

\ may work

make sure that you have a newline after the last jar file
Avatar billede arne_v Ekspert
04. december 2007 - 21:23 #7
A bit of studying reveals that there is a 70 or 72 character limit on jar file manifest lines.

Try split before 70 characters and start with a space at the next line.
Avatar billede fredand Forsker
06. december 2007 - 19:54 #8
Hello!

My conclusion is that you can not create an app in a jar that depends on other jars inside this jar.

Instead it looks like I have to unzip all my other jars and pack the class files in them together with my own classes.

In my small app I created an ant build script:

<?xml version="1.0" encoding="UTF-8"?>

<project name="hibernatetest" default="jar" basedir=".">

    <target name="unjar">
        <unzip src="lib/*.jar" dest="bin/"/>
        <unzip src="lib/antlr-2.7.5H3.jar" dest="bin/"/>
        <unzip src="lib/asm-attrs.jar" dest="bin/"/>
        <unzip src="lib/asm.jar" dest="bin/"/>
        <unzip src="lib/cglib-2.1.2.jar" dest="bin/"/>
        <unzip src="lib/commons-collections-2.1.1.jar" dest="bin/"/>
        <unzip src="lib/commons-logging-1.0.4.jar" dest="bin/"/>
        <unzip src="lib/dom4j-1.6.1.jar" dest="bin/"/>
        <unzip src="lib/ehcache-1.1.jar" dest="bin/"/>
        <unzip src="lib/hibernate3.jar" dest="bin/"/>
        <unzip src="lib/jta.jar" dest="bin/"/>
        <unzip src="lib/log4j-1.2.11.jar" dest="bin/"/>
        <unzip src="lib/mysql-connector-java-3.0.15-ga-bin.jar" dest="bin/"/>
    </target>
   
    <target name="jar" depends="unjar">
        <jar destfile="hibernatetest.jar" basedir="bin/">
            <manifest>
                  <attribute name="Main-Class" value="javaapplication.NameJavaApplication"/>
            </manifest>
        </jar>
    </target>
       
</project>

Now I can move the hibernatetest.jar to any other location and run it with:
java -jar hibernatetest4.jar

I would love to be proven wrong, beacuse I do not think it looks great. I would feel much better if I could establish the same from Eclipse but with jars in jars.

BTW
I do feel that you should have the poinst Arne!

Best regards
Fredrik
Avatar billede arne_v Ekspert
06. december 2007 - 20:10 #9
Ugh.

No - you can not have jar files inside a jar file (with standard classloader).

I thougth lib/xxx.jar was an external file ...

I missed the last question 04/12-2007 21:06:15 !
Avatar billede fredand Forsker
07. december 2007 - 09:36 #10
Hello Arne!

Thanks alot for your time and answers! I always learn alot from you!

I do insists that you should have the points. So please leave an "answer" so I can reward you!

Best regards
Fredrik
Avatar billede arne_v Ekspert
07. december 2007 - 15:04 #11
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester