162 if (e.getValue() != null) { 163 result = result.replace(e.getKey(), e.getValue()); 164 } 165 } 166 return result; 167 } 168 } 169 170 public void writeCfgFile(Map<String, ? super Object> params, File cfgFileName, String runtimeLocation) throws IOException { 171 cfgFileName.delete(); 172 173 boolean appCDEnabled = UNLOCK_COMMERCIAL_FEATURES.fetchFrom(params) && ENABLE_APP_CDS.fetchFrom(params); 174 String appCDSCacheMode = APP_CDS_CACHE_MODE.fetchFrom(params); 175 File mainJar = JLinkBundlerHelper.getMainJar(params); 176 Module.ModuleType mainJarType = Module.ModuleType.Unknown; 177 178 if (mainJar != null) { 179 mainJarType = new Module(mainJar).getModuleType(); 180 } 181 182 String mainModule = JLinkBundlerHelper.MAIN_MODULE.fetchFrom(params); 183 184 PrintStream out = new PrintStream(cfgFileName); 185 186 out.println("[Application]"); 187 out.println("app.name=" + APP_NAME.fetchFrom(params)); 188 out.println("app.version=" + VERSION.fetchFrom(params)); 189 out.println("app.preferences.id=" + PREFERENCES_ID.fetchFrom(params)); 190 out.println("app.runtime=" + runtimeLocation); 191 out.println("app.identifier=" + IDENTIFIER.fetchFrom(params)); 192 out.println("app.classpath=" + String.join(File.pathSeparator, CLASSPATH.fetchFrom(params).split("[ :;]"))); 193 194 // The main app is required to be a jar, modular or unnamed. 195 if (mainJarType == Module.ModuleType.Unknown || mainJarType == Module.ModuleType.ModularJar) { 196 if (mainModule != null) { 197 out.println("app.mainmodule=" + mainModule); 198 } 199 } 200 else { 201 String mainClass = JLinkBundlerHelper.getMainClass(params); 202 203 if (mainJar != null && mainClass != null) { 204 // If the app is contained in an unnamed jar then launch it the old 205 // fashioned way and the main class string must be of the format com/foo/Main 206 out.println("app.mainclass=" + mainClass.replaceAll("\\.", "/")); 207 out.println("app.mainjar=" + mainJar); 208 } 209 } 210 211 Integer port = JLinkBundlerHelper.DEBUG_PORT.fetchFrom(params); 212 213 if (port != null) { 214 out.println("app.debug=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=localhost:" + port); 215 } 216 217 //TODO this is a little tricky now with a modular JDK. 218 //out.println("app.java.version=" + ); 219 220 if (appCDEnabled) { 221 out.println("app.appcds.cache=" + appCDSCacheMode.split("\\+")[0]); 222 } 223 224 225 out.println(); 226 out.println("[JVMOptions]"); 227 List<String> jvmargs = JVM_OPTIONS.fetchFrom(params); 228 for (String arg : jvmargs) { 229 out.println(arg); 230 } 231 Map<String, String> jvmProps = JVM_PROPERTIES.fetchFrom(params); 232 for (Map.Entry<String, String> property : jvmProps.entrySet()) { 233 out.println("-D" + property.getKey() + "=" + property.getValue()); 234 } 235 String preloader = PRELOADER_CLASS.fetchFrom(params); 236 if (preloader != null) { 237 out.println("-Djavafx.preloader="+preloader); 238 } 239 | 162 if (e.getValue() != null) { 163 result = result.replace(e.getKey(), e.getValue()); 164 } 165 } 166 return result; 167 } 168 } 169 170 public void writeCfgFile(Map<String, ? super Object> params, File cfgFileName, String runtimeLocation) throws IOException { 171 cfgFileName.delete(); 172 173 boolean appCDEnabled = UNLOCK_COMMERCIAL_FEATURES.fetchFrom(params) && ENABLE_APP_CDS.fetchFrom(params); 174 String appCDSCacheMode = APP_CDS_CACHE_MODE.fetchFrom(params); 175 File mainJar = JLinkBundlerHelper.getMainJar(params); 176 Module.ModuleType mainJarType = Module.ModuleType.Unknown; 177 178 if (mainJar != null) { 179 mainJarType = new Module(mainJar).getModuleType(); 180 } 181 182 String mainModule = JLinkBundlerHelper.MODULE.fetchFrom(params); 183 184 PrintStream out = new PrintStream(cfgFileName); 185 186 out.println("[Application]"); 187 out.println("app.name=" + APP_NAME.fetchFrom(params)); 188 out.println("app.version=" + VERSION.fetchFrom(params)); 189 out.println("app.preferences.id=" + PREFERENCES_ID.fetchFrom(params)); 190 out.println("app.runtime=" + runtimeLocation); 191 out.println("app.identifier=" + IDENTIFIER.fetchFrom(params)); 192 out.println("app.classpath=" + String.join(File.pathSeparator, CLASSPATH.fetchFrom(params).split("[ :;]"))); 193 194 // The main app is required to be a jar, modular or unnamed. 195 if (mainJarType == Module.ModuleType.Unknown || mainJarType == Module.ModuleType.ModularJar) { 196 if (mainModule != null) { 197 out.println("app.mainmodule=" + mainModule); // TODO get app class from main module mainifest. 198 } 199 } 200 else { 201 String mainClass = JLinkBundlerHelper.getMainClass(params); 202 203 if (mainJar != null && mainClass != null) { 204 // If the app is contained in an unnamed jar then launch it the 205 // legacy way and the main class string must be of the format com/foo/Main 206 out.println("app.mainclass=" + mainClass.replaceAll("\\.", "/")); 207 out.println("app.mainjar=" + mainJar); 208 } 209 } 210 211 out.println("packager.java.version=" + System.getProperty("java.version")); 212 213 Integer port = JLinkBundlerHelper.DEBUG_PORT.fetchFrom(params); 214 215 if (port != null) { 216 out.println("app.debug=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=localhost:" + port); 217 } 218 219 if (appCDEnabled) { 220 out.println("app.appcds.cache=" + appCDSCacheMode.split("\\+")[0]); 221 } 222 223 224 out.println(); 225 out.println("[JVMOptions]"); 226 List<String> jvmargs = JVM_OPTIONS.fetchFrom(params); 227 for (String arg : jvmargs) { 228 out.println(arg); 229 } 230 Map<String, String> jvmProps = JVM_PROPERTIES.fetchFrom(params); 231 for (Map.Entry<String, String> property : jvmProps.entrySet()) { 232 out.println("-D" + property.getKey() + "=" + property.getValue()); 233 } 234 String preloader = PRELOADER_CLASS.fetchFrom(params); 235 if (preloader != null) { 236 out.println("-Djavafx.preloader="+preloader); 237 } 238 |