J'essaye de construire un programme exécutable de pot qui dépend du pot externe téléchargé. Dans mon projet, je les ai inclus dans le chemin de génération et je peux les exécuter et les déboguer dans Eclipse.
Quand j'ai essayé de l'exporter dans un bocal, je peux exécuter le programme mais je ne peux pas quand j'essaie d'appuyer sur un bouton qui inclut les appels de fonction et les classes du bocal externe. J'ai édité les variables d'environnement (Windows XP) CLASSPATH pour inclure les chemins de tous les pots externes, mais cela ne fonctionne pas.
Un point à noter est que j'ai reçu des avertissements de compilation lors de l'exportation de mon fichier exécutable, mais il ne montre aucune description des avertissements.
Quelqu'un voudrait-il bien vouloir fournir un guide complet sur la façon d'inclure un programme jar externe en utilisant eclipse?
Eclipse 3.5 a une option pour empaqueter les bibliothèques requises dans le pot exécutable. Fichier -> Exporter ... Choisissez le pot exécutable et cliquez sur suivant. La fenêtre d'exportation du fichier exécutable possède un bouton radio où vous pouvez choisir de regrouper les bibliothèques requises dans le fichier.
Vous pouvez le faire en écrivant un manifeste pour votre pot . Jetez un œil à l'en-tête Class-Path . Eclipse a une option pour choisir votre propre manifeste lors de l'exportation.
L'alternative consiste à ajouter la dépendance au chemin de classe au moment où vous appelez l'application:
win32: Java.exe -cp app.jar;dependency.jar foo.MyMainClass
*nix: Java -cp app.jar:dependency.jar foo.MyMainClass
Comment inclure les pots de votre projet dans votre pot exécutable:
J'utilise la version Eclipse: 3.7.2 fonctionnant sur Ubuntu 12.10. Je vais aussi vous montrer comment faire le build.xml
pour que vous puissiez faire le ant jar
à partir de la ligne de commande et créez votre pot avec d'autres pots importés qui y sont extraits.
Fondamentalement, vous demandez à Eclipse de construire le build.xml qui importe vos bibliothèques dans votre bocal pour vous.
Lancez Eclipse et créez un nouveau Java, créez un nouveau package 'mypackage', ajoutez votre classe principale: Runner
Mettez ce code là-dedans.
Incluez maintenant le mysql-connector-Java-5.1.28-bin.jar
d'Oracle qui nous permet d'écrire Java pour se connecter à la base de données MySQL. Pour ce faire, cliquez avec le bouton droit sur le projet -> propriétés -> Java chemin de construction -> Ajouter un pot externe -> choisissez mysql-connector-Java-5.1.28-bin.jar.
Exécutez le programme dans Eclipse, il devrait fonctionner et vous indique que le nom d'utilisateur/mot de passe n'est pas valide, ce qui signifie qu'Eclipse est correctement configuré avec le bocal.
Dans Eclipse, accédez à File
-> Export
-> Java
-> Runnable Jar File
. Vous verrez cette boîte de dialogue:
Assurez-vous de configurer la case à cocher "enregistrer en tant que script ant". C'est ce qui fait que vous pouvez utiliser la ligne de commande pour faire un ant jar
plus tard.
Ensuite, allez dans le terminal et regardez le script ant:
Donc, vous voyez, j'ai exécuté le pot et il n'a pas généré d'erreur car il a trouvé le mysql-connector-Java-5.1.28-bin.jar
intégré à l'intérieur Hello.jar
.
Regardez dans Hello.jar: vi Hello.jar
et vous verrez de nombreuses références à com/mysql/jdbc/stuff.class
Faire ant jar
sur la ligne de commande pour faire tout cela automatiquement: Renommer buildant.xml
à build.xml
et remplacez le nom cible par create_run_jar
à jar
.
Ensuite, à partir de MyProject
vous tapez ant jar
et boom. Vous avez votre pot dans MyProject. Et vous pouvez l'invoquer en utilisant Java -jar Hello.jar
et tout fonctionne.
Comme bonne pratique, vous pouvez utiliser un Ant Script (Eclipse est livré avec) pour générer votre fichier JAR. Dans ce JAR, vous pouvez avoir toutes les bibliothèques dépendantes.
Vous pouvez même définir l'en-tête de chemin de classe du MANIFEST pour pointer vers les fichiers de votre système de fichiers, ce n'est pas une bonne pratique cependant.
Exemple de script Ant build.xml:
<project name="jar with libs" default="compile and build" basedir=".">
<!-- this is used at compile time -->
<path id="example-classpath">
<pathelement location="${root-dir}" />
<fileset dir="D:/LIC/xalan-j_2_7_1" includes="*.jar" />
</path>
<target name="compile and build">
<!-- deletes previously created jar -->
<delete file="test.jar" />
<!-- compile your code and drop .class into "bin" directory -->
<javac srcdir="${basedir}" destdir="bin" debug="true" deprecation="on">
<!-- this is telling the compiler where are the dependencies -->
<classpath refid="example-classpath" />
</javac>
<!-- copy the JARs that you need to "bin" directory -->
<copy todir="bin">
<fileset dir="D:/LIC/xalan-j_2_7_1" includes="*.jar" />
</copy>
<!-- creates your jar with the contents inside "bin" (now with your .class and .jar dependencies) -->
<jar destfile="test.jar" basedir="bin" duplicate="preserve">
<manifest>
<!-- Who is building this jar? -->
<attribute name="Built-By" value="${user.name}" />
<!-- Information about the program itself -->
<attribute name="Implementation-Vendor" value="ACME inc." />
<attribute name="Implementation-Title" value="GreatProduct" />
<attribute name="Implementation-Version" value="1.0.0beta2" />
<!-- this tells which class should run when executing your jar -->
<attribute name="Main-class" value="ApplyXPath" />
</manifest>
</jar>
</target>
Essayez l'extension Fat-jar. Il comprendra tous les pots externes à l'intérieur du pot.
regardez @ Java-jar-ignores-classpath-Workaround