• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Java, Eclipse -> Compilieren?

MACRASSI

Gelbe Schleswiger Reinette
Registriert
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
 

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
 

svn

Prinzenapfel
Registriert
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;
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
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?
 

MACRASSI

Gelbe Schleswiger Reinette
Registriert
21.11.04
Beiträge
1.754
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?
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
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
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

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.
 

commander

Baldwins roter Pepping
Unvergessen
Registriert
25.02.04
Beiträge
3.206
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
 

Haley

Carola
Registriert
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 :)
 

MACRASSI

Gelbe Schleswiger Reinette
Registriert
21.11.04
Beiträge
1.754
du weißt eh dass es auch eine eclipse mac version gibt, mit der man deine programme probemlos kompilieren kann, gell :)
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
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
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.
 

MACRASSI

Gelbe Schleswiger Reinette
Registriert
21.11.04
Beiträge
1.754
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.
So, jetzt hab ich so ein .jar file auf meinem Desktop. Wie öffen ich das denn?
(Doppelklick klappt nicht)

Gruß Rasmus
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
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

;)
 

MACRASSI

Gelbe Schleswiger Reinette
Registriert
21.11.04
Beiträge
1.754
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

;)
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...
 

mullzk

Linsenhofener Sämling
Registriert
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...)
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
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.
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
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...)

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.
 

MACRASSI

Gelbe Schleswiger Reinette
Registriert
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

  • Bild 2.jpg
    Bild 2.jpg
    61,4 KB · Aufrufe: 321

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
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...

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.
 

MACRASSI

Gelbe Schleswiger Reinette
Registriert
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