2017-08-01 1 views
2

J'essaie java 9-ea (jdk-9 + 180) et le nouveau javapackager pour créer une image native à partir d'un module simple mais je reçois une exception nullpointer. Est-ce que quelqu'un sait si je suis juste trop tôt ou si je n'utilise pas les bons commutateurs de commande afin de le faire fonctionner? La commande jlink fonctionne bien, mais pas le javapackager. J'utilise le dernier jdk-9 + 180 au moment de l'écriture. J'ai essayé les deux avec les commutateurs -native exe et -native image mais le même type d'erreur se produit. J'ai également essayé ceci sur mon Mac créant un dmg natif avec le commutateur -native dmg, mais la même erreur se produit sur cette plate-forme. Je suis vraiment après avoir utilisé le javapackager ici pour être en mesure de regrouper la construction dans exe/dmg.Erreur lors de la tentative d'empaquetage de l'image native avec javapackager dans java 9-ea?

Edit 1: J'ai déposé un rapport de bogue sur cette question et il peut maintenant être visible à l'adresse suivante: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8186661

Mon module-info.java:

module my.module { 
    requires javafx.graphics; 
    requires javafx.fxml; 
    exports sample; 
} 

Première Je crée un pot avec javapackager qui fonctionne très bien:

C:\Java9Test\target>javapackager -createjar -appclass sample.Main -srcdir classes -outdir . -outfile myjar -v

J'ai vérifié que la structure de jar qui en résulte semble correcte avec le module-info.class correct et les deux autres classes dedans.

Les travaux de commande JLINK suivantes et produit une image d'exécution réduite runnable:

C:\Java9Test\target>jlink --output release\MyTestApp --compress=2 --module-path "myjar.jar;C:\Program Files\Java\jdk-9\jmods" --add-modules my.module

Cependant, lorsque vous essayez la commande suivante pour créer l'image native en utilisant javapackager échoue:

C:\Java9Test\target>javapackager -deploy -v -outdir packages -name MyTestApp -native image --module-path "myjar.jar;C:\Program Files\Java\jdk-9\jmods" --add-modules my.module --module my.module/sample.Main

sorties:

Running [C:\Program Files\Java\jdk-9\bin\java.exe, -version] Creating app bundle: MyTestApp in C:\Java9Test\target\packages Exception: java.lang.NullPointerException Exception in thread "main" com.sun.javafx.tools.packager.PackagerException: Error: Bundler "Windows Application Image" (windows.app) failed to produce a bundle. at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateNativeBundles(PackagerLib.java:374) at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateDeploymentPackages(PackagerLib.java:348) at jdk.packager/com.sun.javafx.tools.packager.Main.main(Main.java:496)

Edit 2:

sortie de -native exe drapeau (sous Windows)

Running [C:\Program Files\Java\jdk-9\bin\java.exe, -version] Running [C:\Program Files (x86)\Inno Setup 5\iscc.exe, /?] Detected [C:\Program Files (x86)\Inno Setup 5\iscc.exe] version [5] At least one type of shortcut is required. Enabling menu shortcut. Exception: java.lang.NullPointerException Config files are saved to C:\Users\Username\AppData\Local\Temp\fxbundler17330843784617821035\windows. Use them to customize package. Exception in thread "main" com.sun.javafx.tools.packager.PackagerException: Error: Bundler "EXE Installer" (exe) failed to produce a bundle. at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateNativeBundles(PackagerLib.java:374) at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateDeploymentPackages(PackagerLib.java:348) at jdk.packager/com.sun.javafx.tools.packager.Main.main(Main.java:496)

Edit 3:

sortie de -native dmg pavillon (sur MacOSX)

Building DMG package for MyTestApp Exception: java.lang.NullPointerException Config files are saved to /var/folders/qs/nk3vxsx90q9_pbjs0ypg74r40000gn/T/fxbundler3765252041328710759/macosx. Use them to customize package. Exception in thread "main" com.sun.javafx.tools.packager.PackagerException: Error: Bundler "DMG Installer" (dmg) failed to produce a bundle. at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateNativeBundles(PackagerLib.java:374) at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateDeploymentPackages(PackagerLib.java:348) at jdk.packager/com.sun.javafx.tools.packager.Main.main(Main.java:496)

sortie de -native deb drapeau (Linux Mint)

Running [dpkg-deb, --version] Debian packages should specify a license. The absence of a license will cause some linux distributions to complain about the quality of the application. Exception: java.lang.NullPointerException Config files are saved to /tmp/fxbundler2941553392593775128/linux. Use them to customize package. Exception in thread "main" com.sun.javafx.tools.packager.PackagerException: Error: Bundler "DEB Installer" (deb) failed to produce a bundle. at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateNativeBundles(PackagerLib.java:374) at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateDeploymentPackages(PackagerLib.java:348) at jdk.packager/com.sun.javafx.tools.packager.Main.main(Main.java:496)

sortie de -native rpm drapeau (Linux Mint)

Running [rpmbuild, --version] At least one type of shortcut is required. Enabling menu shortcut. Exception: java.lang.NullPointerException Config files are saved to /tmp/fxbundler2278571164448075269/linux. Use them to customize package. Exception in thread "main" com.sun.javafx.tools.packager.PackagerException: Error: Bundler "RPM Bundle" (rpm) failed to produce a bundle. at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateNativeBundles(PackagerLib.java:374) at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateDeploymentPackages(PackagerLib.java:348) at jdk.packager/com.sun.javafx.tools.packager.Main.main(Main.java:496)

+0

Avez-vous installé Inno Setup 5 et est-il disponible via PATH? Vérifiez le paragraphe 7.4.1 ici http://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html – madduci

+0

Oui, j'ai et maintenant ajouté "edit 2" où vous pouvez voir la sortie de courir avec -native exe drapeau au lieu de -native image. L'erreur ne semble pas être liée à InnoSetup. NullPointerException sur la même ligne quel que soit l'indicateur utilisé (image/exe/dmg/deb/rpm). J'ai rapporté un bug à Oracle ... – jbilander

+0

cela ressemble à un bug sur Windows. Sur Linux, la même commande peut générer des deb, rpm, images. BTW, vous pouvez construire un paquet uniquement sur des systèmes spécifiques (par exemple, DEB/RPM uniquement sur Linux, EXE/MSI uniquement sur Windows, DMG uniquement sur Mac) – madduci

Répondre

2

répondre à ma propre question ici (après ayant reçu une réponse sur le rapport de bug):

Il s'avère que le chemin d'accès du module ne doit contenir que des noms de répertoires, pas des noms de fichiers, donc vous ne pouvez pas spécifier le jar dans le chemin comme vous pouvez le faire avec la commande jlink. Le javapackager fonctionne avec le module-path s'il est défini sur les classes-modules compilées comme ci-dessous, aussi vous n'avez pas besoin de placer le module-path dans le répertoire jmods car il est automatiquement récupéré.

C:\Java9Test\target>javapackager -deploy -v -outdir packages -name MyTestApp -native image --module-path C:\Java9Test\target\classes --module my.module/sample.Main

Cependant, l'exécutable Construisons résultant MyTestApp.exe ne fonctionnait pas pour moi, rien ne se passait quand il est invoqué (double clic). Aussi la construction est assez volumineuse et il semble que vous ne pouvez pas utiliser les drapeaux --compress=2 et --strip-debug comme vous pouvez avec jlink. Cependant, j'ai découvert que vous pouvez réellement remplacer le contenu du dossier d'exécution produit avec le javapackager avec la sortie de la commande jlink donnant à la construction une empreinte beaucoup plus petite et le MyTestApp.exe fonctionne lorsqu'il est invoqué! Je pourrais également supprimer le java.exe et le javaw.exe du dossier runtime\bin remplacé aussi que le msvcp120.dll et le msvcr120.dll du dossier principal MyTestApp puisque ces dossiers sont déjà dans le dossier MyTestApp\runtime\bin.

MyTestApp structure -folder:

folder-structure.

+0

avec le chemin d'accès au module vers vos fichiers Java, vous devez également chaîner le chemin vers le dossier Java jmods: - C: \ Java9Test \ target \ classes C: \ Program Files \ Java \ jdk-9 \ jmods – madduci

+0

En fait, il n'est pas nécessaire de le faire car le chemin vers jmods est automatiquement récupéré par le javapackager. Cependant, lors de l'exécution de la commande jlink, il semble nécessaire de le faire. – jbilander