Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

Nadja

Trainee

  • "Nadja" is female
  • "Nadja" started this thread

Posts: 74

Date of registration: Apr 11th 2006

1

Wednesday, May 17th 2006, 6:19pm

.jar File

Hallo,
wie ist es gemeint in der Aufgabe 3 der 6-Übung.

Ich sollte ein Package-Paket erstellen ...
Muss ich das nicht mit der Endung .java Speichern ..?

Muss ich das Hauptprogramm doch ach mit import name_vom_Package
auch doch Speichern mit der Endung .java

Muss man package und Hauptprogramm dann seperat dem Compiler übergeben???? oder muss man Sie unter einnader schreiben und dann
in Eins dem Compiler übergeben???

Was ist jetzt mit .jar ?????

Wie kann man aus eine Datei mit der Endung .java eine Datei mit der Endung .jar erstellen..

irgendwie habe ich das nicht so verstanden mit dem lauffähiges .jar-File

kann mir jemand sagen ,was ich als .jar File erstellen muss??????

Danke

  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

2

Wednesday, May 17th 2006, 7:14pm

RE: .jar File

Quoted

Original von Nadja
Was ist jetzt mit .jar ?????

Wie kann man aus eine Datei mit der Endung .java eine Datei mit der Endung .jar erstellen..
Du möchtest also wissen, wie man JAR-Pakete erstellt?

Falls ja: http://www.google.de/search?q=jar+erstellen hilft hier weiter, unter anderem findet man dort Verweise auf http://wiklet.javacore.de/index.php/Jar_…baren_Jar-Datei und http://java.sun.com/docs/books/tutorial/deployment/jar/.

Hilft Dir das weiter?
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

This post has been edited 2 times, last edit by "Joachim" (May 17th 2006, 7:15pm)


Nadja

Trainee

  • "Nadja" is female
  • "Nadja" started this thread

Posts: 74

Date of registration: Apr 11th 2006

3

Wednesday, May 17th 2006, 7:31pm

Danke Joachim...
Also ich wusste nicht oder weiss es bis jetzt noch nicht ,ob man wie gehabt ein Programm mit der Endung .java speichert und dem Compiler übergibt oder wird jetzt alles komplett anders und werden die Programme in anderem Foramt gspeichert und bearbeitet (halt jetzt ein .jar file erzeugt)

Danke für die Seiten
lg

cowhen

Muuuh!

  • "cowhen" is male

Posts: 1,374

Date of registration: Dec 13th 2001

4

Wednesday, May 17th 2006, 8:03pm

Ein JAR ist eine Art Zip-Archiv, dass alle deine Dateien zusammenfasst.

Quoted

JAR files are packaged with the ZIP file format, so you can use them for "ZIP-like" tasks such as lossless data compression, archiving, decompression, and archive unpacking. These are among the most common uses of JAR files, and you can realize many JAR file benefits using only these basic features.

[...]

To perform basic tasks with JAR files, you use the JavaTM Archive Tool provided as part of the Java Development Kit. Because the Java Archive tool is invoked by using the jar command, for convenience we'll call it the "Jar tool".


Ein Jar erstellst du mit dem Befehl

Source code

1
jar cf meinjar.jar meinjava.java


Quoted

The basic format of the command for creating a JAR file is:

jar cf jar-file input-file(s)

Let's look at the options and arguments used in this command:

* The c option indicates that you want to create a JAR file.
* The f option indicates that you want the output to go to a file rather than to stdout.
* jar-file is the name that you want the resulting JAR file to have. You can use any filename for a JAR file. By convention, JAR filenames are given a .jar extension, though this is not required.
* The input-file(s) argument is a space-separated list of one or more files that you want to be placed in your JAR file. The input-file(s) argument can contain the wildcard * symbol. If any of the "input-files" are directories, the contents of those directories are added to the JAR archive recursively.

The c and f options can appear in either order, but there must not be any space between them.

This command will generate a compressed JAR file and place it in the current directory. The command will also generate a default manifest file (in the Deployment trail) for the JAR archive.



Alle Zitate sind von http://java.sun.com/docs/books/tutorial/…asicsindex.html , wo es sehr ausführlich erklärt wird.
plenty of time to relax when you are dead

Nadja

Trainee

  • "Nadja" is female
  • "Nadja" started this thread

Posts: 74

Date of registration: Apr 11th 2006

5

Thursday, May 18th 2006, 10:34am

Hallo,
also es geht immer noch um JAR!!!

Ich habe folgendes gemacht:
1. ein Ordner Namens fruehlingssimulation erstellt
2. in dem Ordner fruehlingssimulation habe ich 2 zusätzliche Ordner erstellt und zwar:
teilnehmer und jahreszeiten

3. im Uelltext der Klasse Blume habe ich folgendes hinzugefügt:
package teilnehmer;

4 im Quelltext der Klasse Wuehlmaus habe ich folgendes hinzugefügt:
package teilnehmer

5. Mit javac Blume.java und javac Wuehlmaus.java habe ich dann die 2 KLassen : Blume.class und Wuehlmaus.class erzeugt

6. Ich habe dann die beiden Klassen Blume.class und Wuehlmaus.class in den Ordner teilnehmer hinterlegt.

Alles lief bestens bis jetzt ....

Ich will jetzt aber auch die 2 übrigen Klassen Simulation und Fruehling erzeugen aber es ging nicht gut!!!

Ich bin wie folgt vorgegangen:
1.Versuch:
package jahreszeiten ; hinzugefügt
den Quelltext unverändert mit javac Fruehling.java dem Compiler übergeben...

Ergebnis:
Hat leider gemeckert weil er halt Blume() und Wuehlmaus() nicht gefunden hat

2.Versuch:
in der Dos-Aufforderungsfenster erstmal folgendes eingegeben:
PATH=%PATH%;C:\.....\User\fruehlingssimulation\teilnehmer;

dann wieder mit javac Fruehling.java

Ging auch nicht ,hat wieder gemeckert.

3.Versuch:
in der Dos-Aufforderungsfenster erstmal folgendes eingegeben:
PATH=%PATH%;C:\.....\User\fruehlingssimulation\teilnehmer;

und im quelltext habe ich folgendes eingegeben:
impoer fruehlingssimulation.teilnehmer.*;

und wieder mit javac Fruehling.java

wieder meckert er ,wieder Blume() und Wuehlmaus(),dass sie halt nicht existieren..

Was mache ich falsch?
war das oben nicht richtig?

Ich will halt ein PAckage namens fruehlingssimulation und unterpackage NAmens teilnehmer bzw. jahreszeiten erstellen.

Die Applikation mit der MAin -Methode muss dann auch im PAckage sein??? oder reicht dann einfach folgendes zuzufügen:

import fruehlingssimulation.teilnehmer.*;
import fruehlingssimulation.jahreszeiten.*;

lg

PhilRM

Gründer

  • "PhilRM" is male

Posts: 867

Date of registration: Dec 9th 2001

Location: Hannover

Occupation: äh... :)

6

Thursday, May 18th 2006, 2:37pm

Also, vereinfacht erklärt:

Jede Java-Applikation hat ein Wurzelverzeichnis (Root). Das ist sozusagen die Basis des ganzen. Bezeichne ich hier als "/". Man könnte auch sagen es handelt sich bei diesem Verzeichnis um das namenlose default-Package.

.java-Dateien enthalten eine oder mehrere Java-Klassen. Jede .java-Datei muss am Anfang der Datei eine einzige package-Deklaration enthalten: package soundso;. Das Package entspricht dem Pfad vom Root aus. Also z.B. bei folgender Verzeichnisstruktur:

/
/foo
/foo/X.java
/foo/bar
/foo/bar/Y.java

enthält X.java die Deklaration "package foo;" und Y.java die Deklaration "package foo.bar;".

Nun möchte man in seinen Klassen natürlich andere Klassen benutzen. Wenn die sich im gleichen Package (=Verzeichnis) befinden, braucht man keine import-Anweisung. Wenn sie das NICHT tun, braucht man eine. Entweder man import das ganze Package, in dem auch die Klasse liegt die man braucht, oder nur die Klasse. Wenn man z.B. in Y.java auf die Klasse foo.X zugreifen will, benötigt Y.java die Anweisung

"import foo.*;"

oder

"import foo.X;".

Nun gehts ans kompilieren. Kompiliert wird am besten aus dem Root-Verzeichnis der Anwendung und zwar alles auf einmal. Also begibt man sich ins Verzeichnis "/" und gibt dort ein:

javac foo/X.java bar/Y.java

Es entstehen .class files jeweils in den richtigen Paketen. Für den Aufruf muss die Engine den CLASSPATH kennen, eine Liste von Roots von Java-Anwendungen. Aufruf des ganzen dann, wenn main() in X:

java -cp . foo.X;

Zum Abschluss kann man das ganze nun noch in ein JAR packen, wenn man mag. Ein JAR enthält genau die Verzeichnisstruktur, wie man sie eh schon hat (+ noch ein bisschen meta-info). Also in "/" wieder aufrufen:

jar -cf meinjar.jar *

Dann kann man auch das Jar zum Aufruf verwenden:

java -cp meinjar.jar foo.X;

Abschließende Worte: Weil das ganze auf Kommandozeile extrem nervt nehme man sich Eclipse: http://www.eclipse.org/
"Sie haben also einen, äh, einen Master of Bachelor?" (Human Resources, T-Systems, Cebit)

Nadja

Trainee

  • "Nadja" is female
  • "Nadja" started this thread

Posts: 74

Date of registration: Apr 11th 2006

7

Thursday, May 18th 2006, 3:45pm

geht das mit eclipse denn einfacher?

kann man PAckages und jar files mit Hilfe von eclipse erzeugen???

PhilRM

Gründer

  • "PhilRM" is male

Posts: 867

Date of registration: Dec 9th 2001

Location: Hannover

Occupation: äh... :)

8

Thursday, May 18th 2006, 4:18pm

Eclipse kann ALLES! :D

Im Ernst, natürlich. Packages und JAR files sind so ziemlich das einfachste am Funktionsumfang einer Java-IDE.

Eclipse ist allerdings natürlich auch selbst ein komplexes Paket. Das brauchst selbst auch wieder Einarbeitungszeit...

Da deine Fragen jedoch relativ grundlegend sind, würde würde ich mir an deiner Stelle ein gutes Buch zu Java holen, und eins zu Eclipse, oder vielleicht eins, in dem beides gleichzeitig erklärt wird. Das ist sicher am einfachsten. Vielleicht kann ja jemand eins empfehlen.
"Sie haben also einen, äh, einen Master of Bachelor?" (Human Resources, T-Systems, Cebit)

Nadja

Trainee

  • "Nadja" is female
  • "Nadja" started this thread

Posts: 74

Date of registration: Apr 11th 2006

9

Thursday, May 18th 2006, 5:19pm

Also ich will das irgendwie manuell mit WIndows machen..


A.java ,B.java,C.java und D.java

Ordnerstruktur sieht wie folgt aus:
C:/Dokumente und Einstellungen\USER\so\
so beinhaltet noch 2 Ordner:
\so\telefon
\so\FAx

in telefon sind : C.java , D.java
in Fax ist: B.java

in so habe ich A.java (Main()) gelegt.

A.java braucht die Klasse B.java
B.java braucht beide Klassen C.java und D.java

wie kann ich das jetzt dem Compiler in einer Einheit übergeben:
etwa so:

javac so\ A.java Fax\B.java telefon\C.java D.java

Ist der Befehl richtig? in A steckt die main()

Ausführen : java -cp.so.A;

Warui

Turner, Serveradmin & Workaholic

  • "Warui" is male

Posts: 717

Date of registration: Apr 25th 2006

Location: Südstadt

Occupation: (iter (B.Sc. Inf, 8)) \n (be-a-slave ("SRA", "Bachelor Thesis")) \n (be-a-programmer-slave ("Freelancer", "Programming"))

10

Saturday, May 20th 2006, 1:33pm

Man verzeihe mir, wenn ich etwas ungehalten bin, aber ich habe gestern 5+ Stunden gebraucht, um mehrere Fehler/Ungenauigkeiten, etc zu fnden und bei allen die richtige Lösung anzuwenden -.-

Zum Ersten darf man auf keinen Fall vergessen, im Manifest-Eintrag "Main-Class" auch die package-Struktur mit abzubilden ....

Source code

1
Main-Class: fruehlingssimulation/Simulation
Es hat wirklich lange gedauert, die info zu finden .... und nein, ich finde sie zwar logisch, aber kein Tick intuitiv ;)

Zum Zweiten ist es ääächt intelligent, die Information über die "trailing newline" in eine FUSS-Note zu schreiben .... da gehören vielleicht schlechte Witze des Autors oder weiterführende Literaturhinweise oder sonst irgendwas hin, aber doch keine Information, die für den Ablauf des Ganzen unabdingbar ist. Mag man dem Dozenten nicht anlasten, dass er kein eigenes Skript geschrieben hat, kann man wohl trotzdem geltend machen, dass er ein vernünftiges hätte raussuchen sollen. Und ja, ich weiß, dass es Literatur, auch online und google gibt .... aber wer vermutet denn bitte den Fehler in einem fehlenden linebreak?

Drittens muss man bei dieser Paketstruktur auch in den übergeordneten Ordner wechseln, bevor man das ganze packt.

Das gilt nebenbei auch fürs Kompilieren! Und die Information hab ich tatsächlich noch nirgendwo gefunden. Und auch die Fehlermeldungen von Java helfen einem kein bisschen weiter, man sucht an den total falschen Stellen:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ java Simulation 
Exception in thread "main" java.lang.NoClassDefFoundError: Simulation (wrong name: fruehlingssimulation/Simulation)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Anhand dieser Fehlermeldung nimmt doch jeder normal denkende Mensch an, dass die Klassendefinition irgendwie nicht in Ordnung ist .... statt einen Ordner hoch zu gehen, von dort zu kompilieren und auszuführen .... erheblich sinnvoller wäre eine Meldung gewesen wie "wrong name: Simulation, expected fruehlingssimulation/Simulation" ... den Stacktrace hätten die sich an der Stelle echt sparen können -.-

Dann is das Geheule um den CLASSPATH an sich doch Quatsch, schließlich sucht Java schon von sich aus zuerst mal in dem Ordner, in dem man sich befindet ... sonst müsste man ja jedesmal, wenn man eine andere .class-Datei ausführen will, die Shell-Variablen ändern :O ... oder?
Außerdem gibt es für das Manifest die Option "Class-Path" ... http://java.sun.com/docs/books/tutorial/…ar/downman.html (Danke für den Link btw.)

Vielleicht helfen die Hinweise

Mata ne
Warui
Erwachsenwerden? Ich mach ja viel Scheiß mit, aber nicht jeden!

This post has been edited 1 times, last edit by "Warui" (May 20th 2006, 1:34pm)