Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Eclipse Projekt exportieren , aber bestimmte Verzeichnisse auslassen
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.
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
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.
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.
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*
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).