1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Java, Eclipse -> Compilieren?

Dieses Thema im Forum "OS X-Developer" wurde erstellt von MACRASSI, 02.02.07.

  1. MACRASSI

    MACRASSI Gelbe Schleswiger Reinette

    Dabei seit:
    21.11.04
    Beiträge:
    1.754
    Ich hab ein paar einfache Programme in Eclipse mit Java geschrieben.
    Diese wollte ich nun so Compilieren, das ich sie im Terminal aufrufen kann.
    Also hab ich mir gedacht, das ich ja den Befehl javac benutzen könnte.
    Aber Falsch gedacht, denn ich bekomme immer ein paar Fehlermeldungen.

    Wenn ich aber das Programm in Eclipse ausführe geht es ohne Probleme.
    Was hab ich falsch gemacht?
    Wie kann ich es hinbekommen, das ich mein Programm dann im Terminal ausführen kann?

    Gruß Rasmus
     
  2. Wishi

    Wishi Gast

    Hmmh...

    ... gib mal den Quelltext raus. Dann kann ich vielleicht was Genaues sagen. Ansonsten: mit cd in die Verzeichnisse navigieren, dann javac MeinProgramm.java, das dann starten mit java MeinProgramm. Das mit den Endungen ist wichtig.

    Vielleicht hast Du per Interfaces vererbt und eine fehlerhafte Manifestdatei? Weiß nicht... also wenn Obriges nicht gut istm wär der Quelltext ganz hilfreich.

    Gruß,
    Wishi
     
  3. svn

    svn Prinzenapfel

    Dabei seit:
    20.01.06
    Beiträge:
    553
    hast du bedacht, dass deine Packages mit angegeben werden müssen?
    javac de/package/lala.java

    für
    package de.package;
     
  4. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Hallo,

    gibt doch bitte mal die Fehlermeldungen an, die Dir um die Ohren geschmissen werden.

    Aber warum willst Du das eigentlich mit javac nochmal übersetzten wenn Du es schon übersetzt hast?

    Was auch noch interessant wäre: Nutzt du packages? Bindest du irgendwelche Libraries ein?
     
  5. MACRASSI

    MACRASSI Gelbe Schleswiger Reinette

    Dabei seit:
    21.11.04
    Beiträge:
    1.754
    Ich hab java in der Schule und da heben wir ein .jar File oder so importiert, in dem so Befehle für die Console sind, und die benutze ich auch.
    Diese ganzen Consolen befehle (bei mir: Console.readInt(); zum Beispiel) werden dann beim Terminalaufruf von javac so komisch unterstrichen...

    Ich möchte halt einfach nur, das ich das Programm auf meinem Mac ausführen kann, auch wenn ich nicht Eclipse auf habe...

    Gruß Rasmus
     
  6. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Hast Du beim kompilieren auch die .jar, die ihr in der Schule verwendet, eingebunden?
    Ohne die können die Klassen die da drinnen sind nicht gefunden werden.
     
  7. commander

    commander Baldwins roter Pepping

    Dabei seit:
    25.02.04
    Beiträge:
    3.210
    Der javac benötigt zum Kompilieren exakt den gleichen Klassenpfad wie Deine Applikation (Server/Client/Shared-Klassen nicht vegessen!). Die libs gibst Du über den Klassenpfad (-classpath) an. Eclipse macht das unsichtbar im Hintergrund anhand Deiner Projektdaten auch so - ohne die Compileranweisung auszugeben. Minus-Punkt für Eclipse... ;)

    Beispiel:

    >javac -classpath examples;/Library/examplejar;/Users/macrassi/mein.jar *.java

    Du musst alle jars angeben, sonst wird ein 'Cannot resolve Symbol' zur Compilerzeit oder ein 'NoClassDefFound' (beim Klassenladen oder Reflectionzugriff) zur Laufzeit ausgegeben.

    Gruß,

    .commander
     
  8. Haley

    Haley Carola

    Dabei seit:
    10.10.06
    Beiträge:
    111
    du weißt eh dass es auch eine eclipse mac version gibt, mit der man deine programme probemlos kompilieren kann, gell :)
     
  9. MACRASSI

    MACRASSI Gelbe Schleswiger Reinette

    Dabei seit:
    21.11.04
    Beiträge:
    1.754
    Das es ne Eclipse Version für mac gibt weiß ich. Die benutze ich auch.
    Aber wie mach ich denn dann daraus ne Datei, die ich auch ohne Eclipse öffenen kann?

    Gruß Rasmus
     
  10. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Z.B. so:

    Du markierst im Navigationsbaum dein Projekt, wählst export aus.
    Dann erscheint ein Fenster, dort wählst Du Java -> JAR file und füllst den rest so aus wie du in brauchst. Am schluss wählst du deine Manifest-Datei (CLASS-PATH nicht vergessen) ... und fertig.

    Dann sollte am gewünschten Ort eine ausführbare .jar-Datei sein.
     
  11. MACRASSI

    MACRASSI Gelbe Schleswiger Reinette

    Dabei seit:
    21.11.04
    Beiträge:
    1.754
    So, jetzt hab ich so ein .jar file auf meinem Desktop. Wie öffen ich das denn?
    (Doppelklick klappt nicht)

    Gruß Rasmus
     
  12. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Dann ist das entweder eine Anwendung die nur die System.out als ausgabe nutzt, oder es passt was nicht, darum:

    Terminal öffnen,
    Code:
    cd Desktop
    java -jar DEINJARFILE.jar
    
    ;)
     
  13. MACRASSI

    MACRASSI Gelbe Schleswiger Reinette

    Dabei seit:
    21.11.04
    Beiträge:
    1.754
    Also, ich hab Ausgaben mit System.out.println usw.
    Aber ich bekomme im Terminal immer diesen Fehler, sobald ich dieses java -jar DATEINAME.jar eingebe..

    Failed to load Main-Class manifest attribute from

    Was heißt denn das?

    Gruß Rasmus

    Ps. Ich hab vorher noch nie ein Programm anders als in Eclipse zum laufen gebracht...
     
  14. mullzk

    mullzk Linsenhofener Sämling

    Dabei seit:
    04.01.04
    Beiträge:
    2.529
    jar-files brauchen eine manifest-datei, wo unter anderem festgelegt wird, welches die startklasse mit der main-methode ist. hast du diese datei bereits erstellt? (eclipse macht dies mW immer noch nicht für dich. werde ich nie begreifen warum...)
     
  15. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Wenn Du das Jar-File als ausführbar haben willst, dann muss der Datei eine Manifest-Datei "beigelegt" werden.

    Die ManifestDatei ist nix anderes wie eine Textdatei. Enthalten sein muss mindestens ein Eintrag für die Klasse, die die main-Methode enthält.

    Machen wir doch mal ein konkretes Beispiel :)

    Zuerst setzen wir mal die Manifest-Version... das musst Du zwar nicht, aber ist ordentlicher:

    Code:
    Manifest-Version: 1.0
    Du hast im package de.macrassi die Klasse Loader in der die main-methode ist, dann lautet der Eintrag dafür im Manifest


    Code:
    Main-Class: de.macrassi.Loader
    So, nun willst du noch eine Bibliothek einbinden, in der Klassen sind, die Du in einem Projekt nutzt. Diese Bibliothek heisst orginellerweise Bibliothek.jar und liegt, weil du ordentlich bist, im Unterordner lib

    Dafür sieht dann der eintrag so aus.

    Code:
    Class-Path: lib/Bibliothek.jar
    Die komplette Datei würde dann also so aussehen:

    Code:
    Manifest-Version: 1.0
    Main-Class: de.macrassi.Loader
    Class-Path: lib/Bibliothek.jar
    So.. und wie verwendest Du nun das ganze?

    Du legst in deinem eclipse-Project ein Textfile mit dem Namen Manifest an und füllst es mit den Einträgen (natürlich auf deine Anwendung angepasst!).. dann wählst Du wieder exportieren.
    Ich glaube beim 4. Schritt (hab grad kein eclipse da) wirst du nach dem Manifest gefragt. Dort wählst Du dann, dass du ein vorhandenes benutzen willst und wählst das von dir erstellte. Wenn das jar-file dann gebaut ist (ist übrigens fast nix anderes wie ein zip) sollte es auch ausführbar sein.

    Die Frage wegen dem System.out. hatte folgenden Grund:
    Wenn deine Anwendung keine graphische Oberfläche hat, sondern nur über System.out arbeitet, dann wirst du bei einem doppelklick auf die Datei nicht viel sehen, denn wohin soll die Ausgabe denn erfolgen? Fenster hast Du ja keines erstellt. Darum musst Du bei solchen Sachen mit dem Terminal arbeiten, da dort eine Ausgabe erfolgt.
     
  16. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Auf wunsch macht eclipse das schon, nur sobald mensch eine Bibliothek einbindet, ist das von eclispe erstellte manifest ziemlich nutzlos, weil mehr als Main-Class steht nicht drin. Den Class-Path muss mensch dann von Hand eintragen, was aber soweit kein Problem ist, weil das Manifest liegt im Projektbaum.
     
  17. MACRASSI

    MACRASSI Gelbe Schleswiger Reinette

    Dabei seit:
    21.11.04
    Beiträge:
    1.754
    Irgendwie klappt das alles noch nicht so wie ich das gerne hätte.
    In der Schule Arbeiten wir auch mit so befehlen wie Console.readInt(); und so.
    Dazu müssen wir dann erstmal support.console importieren.
    Ich hab einfach mal nen Screenshot drangehängt und vielleicht könntet ihr einfach mal da reinzeichnen.

    Gruß Rasmus
    Ps. Tut mir leid, das ich das immer noch nicht so wirklich verstehe... (ich würde gerne das Programm: Kino.java als Programm später haben...
     

    Anhänge:

  18. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Du darfst das natürlich nicht lib/Bibliothek.jar nennen.

    Der Klassenpfad (Class-Path) muss den Pfad zu den Bibliotheken enthalten (relativ oder absolut!). Wenn ich das richtig sehe, hast Du tools.jar und files.jar
    eingebungen. Also muss dein Klassenpfad auf die beiden zeigen.

    Er sieht also dann (ungefähr) so aus

    Code:
    Class-Path: /Users/Rasmus/....../files.jar; /Users/Rasmus/....../tools.jar
    Die ...... sind nur Platzhalter, weil aus dem Screenshot kann ich nicht den genauen Pfad erkennen ;)

    Und wie Du siehst, kannst Du mit Semikolen getrennt mehrere Bibiliotheken angeben.
     
  19. MACRASSI

    MACRASSI Gelbe Schleswiger Reinette

    Dabei seit:
    21.11.04
    Beiträge:
    1.754
    So, hab ich jetzt so gemacht.
    Jetzt bekomme ich auch einen anderen Fehler:

    Exception in thread "main" java.lang.NoClassDefFoundError: de/Arrays/Kino


    Gruß Rasmus
    Ps. Kann es sein, das ich nicht de.Array.Kino schreiben muss sondern Einstieg.Arrays.Kino? Weil ja mein Projekt Einstieg heißt.

    Gruß Rasmus
     
  20. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Du musst es nur Arrays.Kino nennen.
     

Diese Seite empfehlen