2017-10-17 1 views
0

La commande javapackager dans Java 8 est capable de créer des exécutables autonomes. Les exemples sur le Web utilisent généralement un seul fichier jar, mais j'ai plusieurs fichiers jar qui doivent être regroupés dans l'application. La documentation indique qu'il est possible d'indiquer au bundler le chemin de classe envoyant classPath=path via l'option -B. Cependant, dans le fichier <applicationname>.cfg résultant dans l'application conditionnée il y a une ligne qui ditComment puis-je spécifier un chemin de classe pour les exécutables créés avec javapackager?

app.classpath= 

qui n'est pas affecté du tout par l'argument classPath, mais je dois modifier manuellement pour inclure tous les pots utilisés par le application pour le faire fonctionner.

Tout cela est sur macOS, je ne pouvais pas l'essayer sur une autre plateforme pour le moment.

Un aperçu très apprécié - un exemple de travail utilisant plus d'un pot, par exemple.

Répondre

0

J'ai ce problème et trouvé une solution alternative qui ne nécessite pas de modifier le chemin de classe du fichier cfg. Mon approche utilise Maven mais cela peut être fait avec Ant ou scripting; nécessite juste plus de travail. L'idée est de créer un seul fichier JAR contenant tout le contenu de votre jar principal et tous les jarres dépendants. Cela peut être fait avec un seul plugin Maven comme ceci:

  <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.2-beta-4</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <archive> 
        <manifest> 
         <mainClass>com.yourapp.MainClass</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

Je mis la phase d'exécution à prepare-package pour qu'il fonctionne avant que le regroupement de l'application, mais vous pouvez changer cela au besoin. Le résultat final est un seul jar nommé <appName>-<version>-jar-with-dependencies.jar qui contient le contenu extrait de tous les jars dépendants. Vous pouvez le tester en utilisant java -jar <jarName> avant de l'utiliser avec javapackager.

+0

Nous vous remercions de votre suggestion. Cela fonctionne probablement, mais pourrait également avoir des implications sur les licences, car il n'est pas toujours possible de reconditionner les fichiers JAR que vous recevez de tiers. Donc, une solution au problème d'origine serait encore appréciée. – ukor