2010-07-27 20 views
2

J'ai une application java simple qui imprime `bonjour monde! ' sur la console. Il est emballé dans app.jar. structure pot:Créer un fichier jar qui peut être exécuté sur n'importe quelle machine

principale/Hello.class - ma classe principale avec la méthode de println roussir

META-INF/MANIFEST.MF

fichier contient Manifest suivant:

Manifest-Version: 1.0 
Main-Class: main.Hello 

Tout va bien.

Mais lorsque vous avez une dépendance que les problèmes commencent. Je ne suis pas sûr mais pense que dans ce cas vous devez mettre toutes les bibliothèques dans le fichier jar. Si je les mets dans META-INF/lib, je dois spécifier "Class-Path" dans le manifeste. A quoi ressemblera "Class-Path"?

P.S Il y a quelques questions qui ressemblent mais je n'ai pas trouvé de réponse appropriée.

Répondre

1

J'ai tendance à utiliser un script de construction ANT pour empaqueter mon application et tous les fichiers jar nécessaires. Je trouve que cela rend la vie beaucoup plus facile une fois que vous l'avez fait fonctionner correctement.

fichier build.xml ressemble à:

<project default="create_run_jar" name="Create Runnable Jar for MyProject"> 
    <!--ANT 1.7 is required --> 
    <target name="create_run_jar"> 
     <jar destfile="my-runnable-jar.jar"> 
      <manifest> 
       <attribute name="Main-Class" value="my.MainClass"/> 
       <attribute name="Class-Path" value="."/> 
      </manifest> 
      <fileset dir="E:/path/to/my/project/bin"/> 
      <fileset dir="E:/path/to/my/project/classes"/> 
      <zipfileset src="E:/path/to/library/some-library.jar"/> 
     </jar> 
    </target> 
</project> 

Notez que si vous utilisez Eclipse, vous pouvez simplly faire Fichier/Exporter .../fichier jar Runnable et il fera tout pour vous (y compris production ANT build.xml).

1

Vous n'avez pas besoin de spécifier quelque chose de spécial si vous déballez les bibliothèques et les intégrez dans votre projet. Si vous faites cela, vous devriez avoir un dossier "principal", et si vous avez org.apache.foo en tant que bibliothèque externe, vous aurez également un dossier "org" au plus haut niveau.

+0

C'est extrêmement difficile mais ça fonctionne. Je souhaite inclure les fichiers JAR dans le fichier META-INF/lib afin que la question soit toujours ouverte. – Jeriho

+0

ne semble pas être une bonne pratique pour moi. Je pense que l'OP a raison de dire qu'il vaut mieux mettre des jarres dans votre pot et les ajouter au classpath. –