# HG changeset patch # User herrick # Date 1537226096 14400 # Node ID 628a283daa6c96e2239ce9acc9f7e393ce5bfc02 # Parent 93db8a13c4c543736ad8211122b5d57605d63e68 8210505: Unable to create an installer from an app-image on linux Reviewed-by: almatvee diff -r 93db8a13c4c5 -r 628a283daa6c src/jdk.packager/linux/classes/jdk/packager/internal/linux/LinuxDebBundler.java --- a/src/jdk.packager/linux/classes/jdk/packager/internal/linux/LinuxDebBundler.java Mon Sep 17 16:22:44 2018 -0400 +++ b/src/jdk.packager/linux/classes/jdk/packager/internal/linux/LinuxDebBundler.java Mon Sep 17 19:14:56 2018 -0400 @@ -347,9 +347,18 @@ } } - private boolean prepareProto(Map p) { - File appDir = StandardBundlerParam.getPredefinedAppImage(p); - if (appDir == null) { + private boolean prepareProto(Map p) + throws IOException { + File appImage = StandardBundlerParam.getPredefinedAppImage(p); + File appDir = null; + + // we either have an application image or need to build one + if (appImage != null) { + appDir = new File(APP_IMAGE_ROOT.fetchFrom(p), + APP_NAME.fetchFrom(p)); + // copy everything from appImage dir into appDir/name + IOUtils.copyRecursive(appImage.toPath(), appDir.toPath()); + } else { appDir = APP_BUNDLER.fetchFrom(p).doBundle(p, APP_IMAGE_ROOT.fetchFrom(p), true); } diff -r 93db8a13c4c5 -r 628a283daa6c src/jdk.packager/linux/classes/jdk/packager/internal/linux/LinuxRpmBundler.java --- a/src/jdk.packager/linux/classes/jdk/packager/internal/linux/LinuxRpmBundler.java Mon Sep 17 16:22:44 2018 -0400 +++ b/src/jdk.packager/linux/classes/jdk/packager/internal/linux/LinuxRpmBundler.java Mon Sep 17 19:14:56 2018 -0400 @@ -273,11 +273,20 @@ } } - private boolean prepareProto(Map params) { - File appDir = StandardBundlerParam.getPredefinedAppImage(params); - if (appDir == null) { - appDir = APP_BUNDLER.fetchFrom(params).doBundle( - params, RPM_IMAGE_DIR.fetchFrom(params), true); + private boolean prepareProto(Map p) + throws IOException { + File appImage = StandardBundlerParam.getPredefinedAppImage(p); + File appDir = null; + + // we either have an application image or need to build one + if (appImage != null) { + appDir = new File(RPM_IMAGE_DIR.fetchFrom(p), + APP_NAME.fetchFrom(p)); + // copy everything from appImage dir into appDir/name + IOUtils.copyRecursive(appImage.toPath(), appDir.toPath()); + } else { + appDir = APP_BUNDLER.fetchFrom(p).doBundle(p, + RPM_IMAGE_DIR.fetchFrom(p), true); } return appDir != null; } diff -r 93db8a13c4c5 -r 628a283daa6c src/jdk.packager/macosx/classes/jdk/packager/internal/resources/mac/MacBaseInstallerBundler.properties --- a/src/jdk.packager/macosx/classes/jdk/packager/internal/resources/mac/MacBaseInstallerBundler.properties Mon Sep 17 16:22:44 2018 -0400 +++ b/src/jdk.packager/macosx/classes/jdk/packager/internal/resources/mac/MacBaseInstallerBundler.properties Mon Sep 17 19:14:56 2018 -0400 @@ -28,6 +28,9 @@ error.parameters-null=Parameters map is null. error.parameters-null.advice=Pass in a non-null parameters map. +message.app-image-dir-does-not-exist=Specified application image directory {0}\: {1} does not exists +message.app-image-dir-does-not-exist.advice=Confirm that the value for {0} exists + message.could-not-retrieve-name=Could not retrieve gecos name message.app-image-requires-app-name=When using an external app image you must specify the app name. message.app-image-requires-app-name.advice=Set the app name via the -name CLI flag, the fx:application/@name ANT attribute, or via the 'appName' bundler argument. diff -r 93db8a13c4c5 -r 628a283daa6c src/jdk.packager/share/classes/jdk/packager/internal/DeployParams.java --- a/src/jdk.packager/share/classes/jdk/packager/internal/DeployParams.java Mon Sep 17 16:22:44 2018 -0400 +++ b/src/jdk.packager/share/classes/jdk/packager/internal/DeployParams.java Mon Sep 17 19:14:56 2018 -0400 @@ -41,9 +41,6 @@ import java.util.TreeSet; public class DeployParams extends CommonParams { - public enum RunMode { - EMBEDDED, STANDALONE, ALL - } final List resources = new ArrayList<>(); @@ -470,6 +467,29 @@ if (outdir == null) { throw new PackagerException("ERR_MissingArgument", "--output"); } + + boolean hasModule = (bundlerArguments.get( + Arguments.CLIOptions.MODULE.getId()) != null); + boolean hasImage = (bundlerArguments.get( + Arguments.CLIOptions.PREDEFINED_APP_IMAGE.getId()) != null); + boolean hasClass = (bundlerArguments.get( + Arguments.CLIOptions.APPCLASS.getId()) != null); + boolean hasMain = (bundlerArguments.get( + Arguments.CLIOptions.MAIN_JAR.getId()) != null); + + // if bundling non-modular image, or installer without app-image + // then we need some resources and a main class + if (!hasModule && !hasImage && !jreInstaller) { + if (resources.isEmpty()) { + throw new PackagerException("ERR_MissingAppResources"); + } + if (!hasClass) { + throw new PackagerException("ERR_MissingArgument", "--class"); + } + if (!hasMain) { + throw new PackagerException("ERR_MissingArgument", "--main-jar"); + } + } } public boolean validateForBundle() { @@ -484,41 +504,6 @@ return result; } - // could be icon or splash - // TODO: do we still need this class? - static class Icon { - final static int UNDEFINED = -1; - - String href; - String kind; - int width = UNDEFINED; - int height = UNDEFINED; - int depth = UNDEFINED; - RunMode mode = RunMode.ALL; - - Icon(String href, String kind, int w, int h, int d, RunMode m) { - mode = m; - this.href = href; - this.kind = kind; - if (w > 0) { - width = w; - } - if (h > 0) { - height = h; - } - if (d > 0) { - depth = d; - } - } - } - - List icons = new LinkedList<>(); - - public void addIcon( - String href, String kind, int w, int h, int d, RunMode m) { - icons.add(new Icon(href, kind, w, h, d, m)); - } - BundleType bundleType = BundleType.NONE; String targetFormat = null; //means any @@ -668,43 +653,6 @@ bundleParams.setDetectMods(detectmods); } - File appIcon = null; - List> bundlerIcons = new ArrayList<>(); - for (Icon ic: icons) { - // NB: in theory we should be paying attention to RunMode but - // currently everything is marked as webstart internally and - // runmode is not publicly documented property - if (/* (ic.mode == RunMode.ALL || - ic.mode == RunMode.STANDALONE) && */ - (ic.kind == null || ic.kind.equals("default"))) - { - //could be full path or something relative to the output folder - appIcon = new File(ic.href); - if (!appIcon.exists()) { - jdk.packager.internal.Log.debug( - "Icon [" + ic.href + "] is not valid absolute path. " - + "Assume it is relative to the output dir."); - appIcon = new File(outdir, ic.href); - } - } - - Map iconInfo = new TreeMap<>(); -/* - if (ic.href != null) iconInfo.put(ICONS_HREF.getID(), ic.href); - if (ic.kind != null) iconInfo.put(ICONS_KIND.getID(), ic.kind); - if (ic.width > 0) iconInfo.put(ICONS_WIDTH.getID(), - Integer.toString(ic.width)); - if (ic.height > 0) iconInfo.put(ICONS_HEIGHT.getID(), - Integer.toString(ic.height)); - if (ic.depth > 0) iconInfo.put(ICONS_DEPTH.getID(), - Integer.toString(ic.depth)); -*/ - if (!iconInfo.isEmpty()) bundlerIcons.add(iconInfo); - } - // putUnlessNullOrEmpty(ICONS.getID(), bundlerIcons); - - bundleParams.setIcon(appIcon); - Map paramsMap = new TreeMap<>(); if (params != null) { for (Param p : params) { @@ -715,37 +663,6 @@ Map unescapedHtmlParams = new TreeMap<>(); Map escapedHtmlParams = new TreeMap<>(); - // putUnlessNullOrEmpty(JNLPBundler.APPLET_PARAMS.getID(), - // unescapedHtmlParams); - // putUnlessNullOrEmpty(ESCAPED_APPLET_PARAMS.getID(), - // escapedHtmlParams); - -/* - putUnlessNull(WIDTH.getID(), width); - putUnlessNull(HEIGHT.getID(), height); - putUnlessNull(EMBEDDED_WIDTH.getID(), embeddedWidth); - putUnlessNull(EMBEDDED_HEIGHT.getID(), embeddedHeight); - - putUnlessNull(CODEBASE.getID(), codebase); - putUnlessNull(EMBED_JNLP.getID(), embedJNLP); - // embedCertificates - putUnlessNull(ALL_PERMISSIONS.getID(), allPermissions); - putUnlessNull(UPDATE_MODE.getID(), updateMode); - putUnlessNull(EXTENSION.getID(), isExtension); - putUnlessNull(SWING_APP.getID(), isSwingApp); - - putUnlessNull(OUT_FILE.getID(), outfile); - putUnlessNull(INCLUDE_DT.getID(), includeDT); - putUnlessNull(PLACEHOLDER.getID(), placeholder); - putUnlessNull(OFFLINE_ALLOWED.getID(), offlineAllowed); - - putUnlessNull(TEMPLATES.getID(), templatesMap); - - putUnlessNull(FX_PLATFORM.getID(), fxPlatform); - putUnlessNull(JRE_PLATFORM.getID(), jrePlatform); - - putUnlessNull(FALLBACK_APP.getID(), fallbackApp); -*/ // check for collisions TreeSet keys = new TreeSet<>(bundlerArguments.keySet()); keys.retainAll(bundleParams.getBundleParamsAsMap().keySet()); diff -r 93db8a13c4c5 -r 628a283daa6c src/jdk.packager/share/classes/jdk/packager/internal/bundlers/BundleParams.java --- a/src/jdk.packager/share/classes/jdk/packager/internal/bundlers/BundleParams.java Mon Sep 17 16:22:44 2018 -0400 +++ b/src/jdk.packager/share/classes/jdk/packager/internal/bundlers/BundleParams.java Mon Sep 17 19:14:56 2018 -0400 @@ -436,14 +436,6 @@ putUnlessNull(APP_RESOURCES_LIST.getID(), rfs); } - public File getIcon() { - return fetchParam(ICON); - } - - public void setIcon(File icon) { - putUnlessNull(PARAM_ICON, icon); - } - public String getApplicationCategory() { return fetchParam(CATEGORY); }