RFR: JDK-8212780: JEP 343: Packaging Tool Implementation

Kevin Rushforth kevin.rushforth at oracle.com
Wed May 1 23:17:22 UTC 2019


I got most of the way through the platform-independent Java code today. 
Here is my feedback so far.

NOTE: I don't think any of these need to be addressed prior to 
integration, so you can either fix them in a follow-on webrev or file a 
bug for fixing after integration.

GENERAL:

* Several files (e.g., Arguments.java) have unused imports that can be 
removed. Maybe this can be done along with expanding wild-card imports.


src/jdk.jpackage/share/classes/module-info.java:

* I see that jdk.jpackage requires java.desktop. It looks like this is 
only needed by the Linux installers to get the size of application 
icons. If so, then perhaps this dependency could be moved to 
`linux/classes/module-info.java.extra`?


src/jdk.jpackage/share/classes/jdk/jpackage/internal/JPackageToolProvider.java:

* Should JPackageToolProvider::run log the exception it catches? 
Although normal error handling shouldn't throw exceptions, it might be 
useful.


src/jdk.jpackage/share/classes/jdk/jpackage/main/Main.java:

* The following will prefix the version message with "jpackage version "

     private static final String version = bundle.getString("MSG_Version")
             + " " + System.getProperty("java.version");

Similar tools such as jlink and jmod don't prefix their output, but 
instead simply print the value of the "java.version" property.


src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/ResourceLocator.java:

* It would be helpful to add a comment to highlight its usage. Also, for 
classes such as this where it is not expected that anyone should create 
an instance, a private constructor might be useful?


src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java:

* The following two constants can be (default) package-scope, since it 
isn't used outside the package (and if it were, the BundlerParamInfo 
class would need to be public in order for it to be useful) :

     public static final BundlerParamInfo<Boolean> CREATE_APP_IMAGE =
     public static final BundlerParamInfo<Boolean> CREATE_INSTALLER =


* The "hasAppImage" field is set but not used (which might be OK, unless 
you meant to use it for argument validation)


src/jdk.jpackage/share/classes/jdk/jpackage/internal/AbstractAppImageBuilder.java:

* This file could use a class comment

* What is the purpose of the following?

     excludeFileList.add(".*\\.diz");

If it really is needed, a comment would be helpful.


* The following on line 195 could use try-with-resources:

         PrintStream out = new PrintStream(cfgFileName);


src/jdk.jpackage/share/classes/jdk/jpackage/internal/AbstractBundler.java:

* IMAGES_ROOT can be package-scope


src/jdk.jpackage/share/classes/jdk/jpackage/internal/AbstractImageBundler.java:

* Spelling error on line 36

 > or as an intermeadiate step in "create-installer" mode.

should be "intermediate"


* In extractFlagsFromVersion, other than throwing an exception, is there 
a need to pattern match older JDK versions? The minimum that jpackage 
needs to support is JDK 11, so we should be able to assume JEP 322 
compliant version numbers. Might this allow for a simplification?


src/jdk.jpackage/share/classes/jdk/jpackage/internal/BundleParams.java:

* I think the following comment is obsolete, since the support for the 
"JavaFX-Application-Class" jar manifest entry is no longer in jpackage:

     // Note we look for both JavaFX executable jars and regular 
executable jars
     // As long as main "application" entry point is the same it is main 
class
     // (i.e. for FX jar we will use JavaFX manifest entry ...)


-- Kevin



More information about the core-libs-dev mailing list