# executable .jar und lib's



## Saduras (11. Okt 2010)

Hi,

ich hab ein Java-Programm/Spiel geschrieben und wollte es Heute einer Freundin zeigen.
Ich hab ein JAR-File mit NetBeans erstellt.
Das ausführbare JAR-File funktioniert bei mir auf meinem Mac unter OS X einwandfrei.
Bei ihr klappte es aber nicht und wie ich dann feststellen musste bei mir selbst unter Windows auch nicht.

Ich vermute, dass es daran liegt, dass ich eine Klasse benutze, die in der Standart Java-lib nicht dabei ist.

```
import net.java.dev.transparentlayout.*;
```

Die Frage ist nun: wie kann das JAR-File so erzeugen, dass es trotzdem funktioniert (also die notwendigen lib-einträge dabei sind)???

Danke!
Gruß,
Saduras


----------



## Gast2 (11. Okt 2010)

netbeans erstellt dir im dist ordner nen ordner lib der alle abhängigkeiten enthält.
den ordner legst du einfach deinem jar file bei, dann läuft das auch auf anderen rechnern.,


----------



## Saduras (11. Okt 2010)

oh, da hätte man ja drauf kommen können…danke!

gibt es auch eine Möglichkeit den Ordner mit in die JAR-Datei zu bekommen, so das man am Ende nur eine Datei hat?


----------



## Gast2 (11. Okt 2010)

Ja es gibt programme die dir alles in eine jar packen können (z.b. Deliver Your Java Application in One-JAR™ !). Ob und wie gut die funktionieren weiß ich allerdings nicht.
Warum lieferst du das Programm nicht in nem Verzeichnis aus? Dann hast du auch die Möglichkeit libs etc. im nachhinein mal auszutauschen. Nen hübsches start batch dabei und gut is


----------



## Saduras (11. Okt 2010)

Da es mein erstes JAVA-Programm ist, dass ich in meiner Freitzeit selbst geschrieben hab, hab ich mir noch nicht all zu viele Gedanken gemacht, wie ich es am besten publiziere.

Im Prinzip würd ich eine einzelne Datei in der alles drin ist, und die noch update-fähig ist schick finden.
Aber vielleicht ist es wirklich besser das ganze als Verzeichnes zu verteilen. Lässt sich so sicher auch leichter Plattformunabhänig konzipieren. Dann muss ich mich nur noch schlau machen, wie man so eine batch-datei schreibt. ^_^

Danke für die schnellen und präzisen Antworten.


----------



## Gast2 (11. Okt 2010)

Zum starten deines Programms reicht dir schon folgendes:

```
start java -jar deineJar.jar
```
bzw. ohne Konsole:

```
start javaw -jar deineJar.jar
```


----------



## Saduras (12. Okt 2010)

EikeB hat gesagt.:


> netbeans erstellt dir im dist ordner nen ordner lib der alle abhängigkeiten enthält.
> den ordner legst du einfach deinem jar file bei, dann läuft das auch auf anderen rechnern.,



Ich bin nun dazu gekommen, es aus zu probieren und leider funktioniert es nicht. 
In dem lib Ordner befindet sich nur eine swing-layout-1.0.4.jar. In der konnte ich keine class-Datei für das transparent Layout finden... oder gibt es noch etwas, woran es liegen könnte?


----------



## krazun (12. Okt 2010)

Saduras hat gesagt.:


> Ich bin nun dazu gekommen, es aus zu probieren und leider funktioniert es nicht.
> In dem lib Ordner befindet sich nur eine swing-layout-1.0.4.jar. In der konnte ich keine class-Datei für das transparent Layout finden... oder gibt es noch etwas, woran es liegen könnte?




Ich würde es einmal über die Kommandozeile starten, mit dem Befehlen die EikeB schon oben gepostet hat. Dann kannst du ganz genau sehen woran es liegt das es nicht startet, weil er dir bei einem Start per Kommandozeile die Fehlermeldung dort ausgibt.

Ansonsten hab ich keine Ahnung wie genau das bei NetBeans läuft, aber bei Eclipse kann man bei der runnable-jar Erstellung z.b. "package required librarys into generated jar" aktivieren. Dann packt er automatisch alle benötigten Klassen der diversen Librarys mit in deine jar Datei.

Kann es sein das du https://transparentlayout.dev.java.net/ benutzt? Dann versuchs mal mit http://transparentlayout.dev.java.net/files/documents/4162/24697/transplayout-1.01.jar

mfg,
krazun


----------



## Gastredner (12. Okt 2010)

Du musst die in dem lib-Ordner enthaltenen Bibliotheken dem CLASSPATH hinzufügen, damit es funktioniert. Entweder erledigst du dies in einer Batch- bzw. Shell-Datei, mit der du das Programm startest, oder du fügst deine Bibliotheken über das Manifest deiner Jar-Datei dem CLASSPATH hinzu:

```
Class-Path: lib/swing-layout-1.0.4.jar
```
Die Leerzeile am Ende der Datei nicht vergessen!


----------



## Saduras (12. Okt 2010)

Folgendes spukt die Konsole unter Windows beim Aufrufen aus:

```
Exception in thread "main" java.lang.NoClassDefFoundError: net/java/dev/transparentlayout/TransparentLayout
```

Es liegt also definitiv an der Verwendung ders Transparent Layout. Die entsprechende jar-Datei hatte ich dabei im lib Verzeichnis (danke krazun), aber die hat NetBeans natürlich nicht eingetragen...

Mir ist auch aufgefallen, laut NetBeans gehört das Transparent Layout zur Java 1.6 Standartbibliothek. Was sicherlich der Grund ist warum es im lib Verzeichnis nach dem build auf fehlt. Wie lässt sich das beheben?

Wie sieht der batch-Befehl zum hinzufügen des CLASSPATH aus? Eine Batch-Datei hilft mir ja nur unter Windows weiter, für OS X/Unix brauch ich dann eine Shell-Datei? (meineShellDatei.shell und sonst auch die Konsolenbefehle drin?)

*EDIT:*
Ich hab es nun zum Laufen bekommen in dem ich die jar-Datei für das Transparent Layout in NetBeans extra noch mal als lib eingetragen hab. Dann generiert NetBeans alles auch so, dass es auch unter Windows bzw. an einem anderem Rechner funktioniert.
Die jar-Datei für das Transparent Layout liegt bei mir unter lib/ext/. Ist es normal, dass es als Teil der standart Bibliothek erkannt wird?


----------



## Danny02 (17. Okt 2010)

Saduras hat gesagt.:


> Im Prinzip würd ich eine einzelne Datei in der alles drin ist, und die noch update-fähig ist schick finden.
> Aber vielleicht ist es wirklich besser das ganze als Verzeichnes zu verteilen.



Es gibt etwas das JNLP gennant wird, damit kann man in einer XML datei alle sache über ein programm definieren(wie Libs, start parameter, versions info usw)

in die datei schreibt man dann rein wo die einzel tiele der datei heruntergeladen werden können und nach einem einzigen klick auf diese JNLP datei wird das Programm installiert.

Diese Technik würd für Applets und Webstart benutzt, lässt sich aber auch für einfach e installer routine misbrauchen


----------

