package, jar file und classpath



  • Hallo
    ich habe 2 Klassen A und B, die zu einem package gehören. sie lassen sich kompilieren.(javac A.java B.java)
    danach habe ich einen jar aus der 2 klassen erstellt mit einer manifest(A als main-klasse) und classpath fuer den jar gesetzt aber beim ausfueren bekomme ich immer eine fehler:
    Exception in thread "main" java.lang.NoClassDefFoundError: A <wrong name: server/A>

    die Klassen und die jar-datei liegen unter root\server

    -----------------Klasse A-------------

    package server;
    
    public class A {
    
    private B b = null;//referenz von Klasse B
    public static boolean debug = true;
    
    public A() {
    super(); 
    }
    
    public static void main(String[] args) 
    { 
    System.out.println("test"); 
    }
    
    }
    

    -------------------Klasse B-------------

    package server;
    
    public class B {
    
    public B() {
    super();
    if(A.debug == true)// zugriff auf Klasse A
    System.out.println("aus B: debug ist true"); 
    }
    
    public void f()
    {
    if(A.debug == true)
    System.out.println("aus B.funktion");
    }
    
    }
    

    ----------manifest -----------

    Manifest-Version: 1.0 
    Main-Class: A
    

    -----------------------

    jar cmf manifest.txt server.jar *.class
    set CLASSPATH=pfad von jar datei
    java -jar server.jar
    

    was mache da falsch ? kann jemand helfen ?[code]

    gruss
    youssef



  • Vielleicht musst du

    Main-Class: server.A

    schreiben? Glaube ja und außerdem muss dein jar auch die den Paketen entsprechende Ordnerstruktur haben.
    Also solltest du vielleicht lieber ein Verzeichnis höher gehen und dann schreiben:

    jar -cmf manifest.txt server.jar server

    Und vielleicht solltest du das Archiv mal mit WinRar oder so öffnen und gucken ob auch wirklich dein manifest drin steckt. Mir ist es dauern passiert, dass meins nicht drin war, weil meins, das ich per m-Option angegeben hatte, einfach zu kurz war. Offenbar. Jedenfalls wurde dann einfach immer irgendein generiertes Manifest reingepackt und nicht meins. Dann habe ich ein paar Zeilen mehr reingeschrieben (Manifest-Version: 1.0, Version: 1.0, oder sowas) und dann wurde meins auch übernommen.


Anmelden zum Antworten