# Eclipse Projekt exportieren , aber bestimmte Verzeichnisse auslassen



## delphiking1980 (25. Mai 2011)

Hallo,

ich möchte ein Projekt exportieren und möchte dabei aber nicht alle Verzeichnisse mit exportieren, wie kann ich dem Eclipse das beibringen ?

Mfg

Delphiking1980


----------



## Antoras (25. Mai 2011)

```
File > Export > General > Archive File / File System
```

Und dann auswählen was du brauchst.


----------



## delphiking1980 (25. Mai 2011)

Ja das weiß ich nur leider wollte ich das als Ausführbare Jar Datei haben.


----------



## Wildcard (25. Mai 2011)

Export as Runnable Jar?


----------



## delphiking1980 (25. Mai 2011)

Aber da exportiert dieser mir das gesamte Java Projekt ohne das ich angeben kann ob ich ein oder mehr Verzeichnisse auslassen möchte.


----------



## Wildcard (25. Mai 2011)

Wenn du export as jar (nicht runnable jar) machst kannst du auswählen was alles inkludiert wird.
Wenn du auf der letzten Wizard Page eine Main Class angibst ist das jar auch ausführbar.


----------



## delphiking1980 (25. Mai 2011)

Okay jetzt klappt das aber es fehlen nun die Bibliotheken aber ich denke mal dazu muss nur der Classpath angepasst werden.

Danke für deine (späte) Hilfe.


----------



## Wildcard (26. Mai 2011)

Nein, der normale Jar Export Wizard verpackt keine Bibliotheken in die Jar. Jar in Jar ist in Java nicht möglich, der Classloader kann das nicht.
Der Export Runnable Jar Wizard ist ein 'poor man's deployment' nicht wirklich für den professionellen Einsatz gedacht, sondern um 'mal schnell was lauffähiges zu haben'.
Der Wizard kann sich dabei aus 2 Tricks bedienen um mit verschachtelten Bibltiotheken umzugehen
1. Die Bibliotheken werden entpackt und dann in das neue Archiv verpackt
2. Es wird ein spezieller hierarchischer Classloader injiziert der jar in jar lesen kann.

Beide Ansätze bringen Probleme mit sich.
zu 1)
-Manche Lizenzen erlauben es nicht das sie neu gepackt werden und man verstößt dadurch gegen eine Lizenz
-Wenn du mehrere Bibliotheken einbindest kann es passieren das sich Dateien die in mehr als einem Archive vorhanden sind gegenseitig überschreiben
-Wenn die Bibliotheken elektronisch signiert waren kann das zu Problemen führen

zu 2)
-Der Code der letzlich ausgeführt wird ist nicht mehr identisch zu dem Code den du kompiliert hast (da ja ein Classloader untergeschoben werden muss)
-Wenn die Applikation (oder die Bibliotheken) mit Classloadern hantieren können zur Laufzeit Probleme auftreten die dann im Nachhinein schwer aufzuspüren sind


----------



## delphiking1980 (26. Mai 2011)

Aber wie bekomme ich jetzt meinen Fat Client zum laufen ?

Also im Java Projekt habe ich auch die gesamte Doku drin und natürlich den Sourcecode aber das beides soll meins bleiben.

Quasi benötige ich eine möglichkeit nur den bin Ordner und die Bibliotheken zu exportieren.


----------



## MarderFahrer (26. Mai 2011)

Wildcard hat gesagt.:


> zu 2)
> -Der Code der letzlich ausgeführt wird ist nicht mehr identisch zu dem Code den du kompiliert hast (da ja ein Classloader untergeschoben werden muss)
> -Wenn die Applikation (oder die Bibliotheken) mit Classloadern hantieren können zur Laufzeit Probleme auftreten die dann im Nachhinein schwer aufzuspüren sind



Was genau für Probleme? Denn ich mache es derzeit genau auf diese Weise, ich exportiere meine Applikation als jar, welches sämtliche 3rdParty jars die es benötigt ebenfalls beinhaltet.
Ich weiß, das der Export Wizard von Eclipse dabei folgende Datei während des Exports nutzt. jar-in-jar-loader.zip.
Ich frage mich jetzt, was da zur Laufzeit passiert könnte. Für mich sieht das erstellte jar File 1a aus.
Soweit ich das beurteilen kann verhält sich das jar genauso wie das über Eclipse gestartete Programm.


----------



## delphiking1980 (26. Mai 2011)

Und wie genau hast du dein jar erstellt ???

Möchte ungern mein Projekt zerpflücken.


----------



## MarderFahrer (26. Mai 2011)

Also im grunde kannst du dein Programm mit dem Eclipse Wizard als runnable jar exportieren. Dort ist dann, wie du schon bemerkt hast, alles aus deinem Projekt drin. Auch src und Doku.

Wenn du z.b 7zip hast, könntest du einfach in das Archiv reingehen und die Sachen löschen, die du da nicht haben willst. Da das jar ja eh nur mit den kompilierten class Dateien arbeitet, sollte das eigentlich keine Probleme geben, wenn man so etwas wie den src Ordner oder den Doku Ordner löscht.


----------



## delphiking1980 (26. Mai 2011)

Danke das wird wohl die einfachste möglichkeit sein, mal sehen was sich noch so mit Ant machen läßt


----------



## MarderFahrer (26. Mai 2011)

http://www.java-forum.org/ides-tools/118599-ant-anfaengerfragen-ant-main-class.html#post764648

Hier hatte ich unlängst mal mein build.xml gepostet. Es emuliert eigentlich "nur" dass, was meiner Meinung nach der Eclipse Wizard auch macht. Es buildet meine Sourcen, erstellt ein runnable Jar. 
Nur anstelle meiner Main Methode und meines Buildpaths kommt hier noch der jar-in-jar-loader ins Spiel bei dem man quasi alle jars definieren kann, die ebenfalls mit ins jar kommen sollen.
Damit das ganze funktioniert, muss die jar-in-jar-loader.zip im root Verzeichnis des Projektes liegen. Also auf der selben Ebene wie das "bin" und "src" Verzeichnis. Wo ich das jar-in-jar-loader.zip herhabe weiß ich jetzt gar nicht genau. Ich glaub ich hab irgendwo im Internet gelesen wo sich das File befindet. Es ist ja Teil von Eclipse und "versteckt" sich irgendwo in der Ordnerstruktur der Eclipse Installation.
Ich habs einfach mal hier angehängt falls es jemand braucht.

Die Pfade, wo sich das gebuildete jar dann befinden soll bzw. wo die sourcen zum kompilieren liegen müssten natürlich im script noch angepasst werden. Aber ansonsten müsste es funktionieren. Ich nutze es ja wie gesagt selber hier und hatte noch keine von den weiter Oben beschriebenen Problemen. *dreimal auf Holz klopf*


----------



## Wildcard (26. Mai 2011)

> Was genau für Probleme? Denn ich mache es derzeit genau auf diese Weise, ich exportiere meine Applikation als jar, welches sämtliche 3rdParty jars die es benötigt ebenfalls beinhaltet.


In der Regel wird durch den Classloader nichts passieren, aber manche Bibliotheken verwenden viel Classloader Magic, ein speziell angepasster Classloader kann also theoretisch alle möglichen Probleme verursachen, muss aber nicht. Konkrete Beispiele kann ich dir auch keine geben da ich diesen Wizard nicht benutze.
Eine Anwendung die man vertreibt sollte IMO keine Bibliotheken verpacken. Lieber Webstart nehmen, oder (das machen die meisten Java Programme) zB ein Distributions Zip erstellen das der Anwender entpackt. Die externen Libraries kommen dann in 'lib' oder so und du kannst die Lizenzen dazu packen.

Mit Ant kann man sowas machen, aber Maven ist meistens die bessere Idee (mit Maven muss man auch keine jars in sein Projekt stecken).


----------

