#! /usr/bin/env runjs var argsEx = require('component-args.js'); var jsonEx = require('component-json-ex.js'); var System = java.lang.System; var OSUtil = Packages.me.hatter.tools.commons.os.OSUtil; var jdkPackageBaseURL = 'http://publicbucket-1251781687.coscd.myqcloud.com/'; var jdkPackages = [ { 'jdk': 'jdk-7u80-linux-x64.tar.gz', 'sha256': 'bad9a731639655118740bee119139c1ed019737ec802a630dd7ad7aab4309623' }, { 'jdk': 'jdk-8u121-linux-x64.tar.gz', 'sha256': '97e30203f1aef324a07c94d9d078f5d19bb6c50e638e4492722debca588210bc' }, { 'jdk': 'jdk-9.0.4_linux-x64_bin.tar.gz', 'sha256': '90c4ea877e816e3440862cfa36341bc87d05373d53389ec0f2d54d4e8c95daa2' } ]; var printHelp = () => { println('build-util.js '); println(); println('-h, --help Print help'); println(' --init Init build.json'); println(' --init-java Init Java config'); println(' --list List Java versions'); println(' --list-jdks List JDK packages'); return; }; var initBuildJSON = () => { var buildGradle = $$.file('build.gradle'); var buildJSON = $$.file('build.json'); if ((buildGradle.exists()) && (buildJSON.exists())) { xprintln('[ERROR] File build.gradle and build.json exists.'); } print('Input project name: '); var projectName = System.console().readLine(); if (!(projectName)) { xprintln('[ERROR] Project name cannot be empty.'); return; } print('Select Java(1.6, 1.7, 1.8, 9.0, default 1.8): '); var javaVersion = System.console().readLine(); javaVersion = $STR(javaVersion || '1.8'); if (!(['1.6', '1.7', '1.8', '9.0'].contains(javaVersion))) { xprintln('[ERROR] Unknow java version: ' + javaVersion); return; } print('Select Builder(ant, gradle, maven, default gradle): '); var builder = System.console().readLine(); builder = $STR(builder || 'gradle'); if (!(['ant', 'gradle', 'maven'].contains(builder))) { xprintln('[ERROR] Unknow builder: ' + builder); return; } var builderVersion; if ($STR(builder) == 'ant') { builderVersion = '1.7'; } else if ($STR(builder) == 'maven') { print('Select Maven(2.2.1, 3.5.2, default 3.5.2): '); builderVersion = System.console().readLine(); builderVersion = $STR(builderVersion || '3.5.2'); if (!(['2.2.1', '3.5.2'].contains(builderVersion))) { xprintln('[ERROR] Unknow builder version: ' + builderVersion); return; } } else { print('Select Gradle(1.0, 3.1, default 3.1): '); builderVersion = System.console().readLine(); builderVersion = $STR(builderVersion || '3.1'); if (!(['1.0', '3.1'].contains(builderVersion))) { xprintln('[ERROR] Unknow builder version: ' + builderVersion); return; } } println('[INFO] Name : ' + projectName); println('[INFO] Java : ' + javaVersion); println('[INFO] Builder : ' + builder + '/' + builderVersion); if ($STR(builder) == 'ant') { xprintln('[ERROR] Ant currently is not supported!!!'); return; } if (($STR(builder) == 'gradle') && (!(buildGradle.exists()))) { xprintln('[INFO] Create file: ' + buildGradle.getName()); var buildGradleContent = $$.httpRequest().skipCertCheck().url('https://repo.examp1e.org/attachment/build.gradle').get().string(); buildGradleContent = buildGradleContent.replace('//BASE_PROJECT_NAME//', projectName); buildGradleContent = buildGradleContent.replace('//SOURCE_COMPATIBILITY//', javaVersion); buildGradleContent = buildGradleContent.replace('//TARGET_COMPATIBILITY//', javaVersion); buildGradleContent = buildGradleContent.replace('//JAVA_COMPILE//', ((builderVersion == '1.0') ? 'Compile' : 'JavaCompile')); print('Use maven repo(Y/N)? '); var useMavenRepo = System.console().readLine(); if ($STR(useMavenRepo).toLowerCase() == 'y') { buildGradleContent = buildGradleContent.replace(/\/\/DISABLE_MVN_REPO\/\/ /g, ''); } $$.rFile(buildGradle).write(buildGradleContent); } if (!(buildJSON.exists())) { xprintln('[INFO] Create file: ' + buildJSON.getName()); var bJSON = { 'java': javaVersion, 'builder': { 'name': builder, 'version': builderVersion } }; $$.rFile(buildJSON).write(jsonEx.prettyJSON(bJSON)); } if (($STR(builder) == 'gradle')) { print('Need init app(Y/N)? '); var initApp = System.console().readLine(); if ($STR(initApp).toLowerCase() == 'y') { $$.shell().inheritIO().commands('runjs', '-u', 'https://repo.examp1e.org/app/build.js', 'initapp').run(); } } if ($$.file('src').exists()) { print('Need init eclipse(Y/N)? ') var initEclipse = System.console().readLine(); if ($STR(initEclipse).toLowerCase() == 'y') { if (($STR(builder) == 'gradle') && $$.file('build.gradle').exists()) { $$.shell().inheritIO().commands('runjs', '-u', 'https://repo.examp1e.org/app/build.js', 'eclipse').run(); } if (($STR(builder) == 'maven') && $$.file('pom.xml').exists()) { $$.shell().inheritIO().commands('runjs', '-u', 'https://repo.examp1e.org/app/build.js', 'eclipse:eclipse').run(); } } } var gitignore = $$.file('.gitignore'); if (!(gitignore.exists())) { print('Need create .gitignore(Y/N)? ') var createGitIgnore = System.console().readLine(); if ($STR(createGitIgnore).toLowerCase() == 'y') { var defaultGitIgnore = [ 'build', 'classes', '.DS_Store', '.gradle', '.classpath', '.project', '.settings' ]; $$.rFile(gitignore).write(defaultGitIgnore.join('\n')); } } xprintln('[SUCCESS] Done!'); }; var getBuildConfigJSON = () => { return $$.file('~', '.jssp', 'config', 'buildconfig.json'); }; var getCurrentJavaHome = () => { var javaHome = $$.prop('java.home'); var javaHomeFile = $$.file(javaHome); if ($STR(javaHomeFile.getName()) == 'jre') { if ($$.file(javaHomeFile.getParentFile(), 'bin', 'java').exists()) { javaHome = javaHomeFile.getParentFile().getAbsolutePath(); } } return javaHome; }; var initJavaVersion = () => { var javaVersion = $$.prop('java.version'); var javaHome = getCurrentJavaHome(); var buildConfig = getBuildConfigJSON(); var buildConfigJSON = JSON.parse((buildConfig.exists() && $$.rFile(buildConfig).string()) || '{}'); if (buildConfigJSON['java'] && buildConfigJSON['java'][javaVersion]) { xprintln('[WARN] Java config exists.'); xprintln('[INFO] Configed JAVA_HOME path: ' + buildConfigJSON['java'][javaVersion]['home']); return; } println('[INFO] Current Java version : ' + javaVersion); println('[INFO] Current JAVA_HOME : ' + javaHome); print('Add Current Java to build config(Y/N)?'); var addJava = System.console().readLine(); if ($STR(addJava).toLowerCase() == 'y') { buildConfigJSON['java'] = buildConfigJSON['java'] || {}; buildConfigJSON['java'][javaVersion] = buildConfigJSON['java'][javaVersion] || {}; buildConfigJSON['java'][javaVersion]['home'] = javaHome; buildConfigJSON['java']['versions'] = buildConfigJSON['java']['versions'] || []; buildConfigJSON['java']['versions'].push(javaVersion); $$.rFile(buildConfig).write(jsonEx.prettyJSON(buildConfigJSON)); } }; var main = () => { var args = argsEx.parseARGS(['h', 'help', 'init', 'init-java', 'list', 'list-jdks']); if (args.flags.flg('init')) { initBuildJSON(); } else if (args.flags.flg('init-java')) { if (OSUtil.isMacOS()) { xprintln('[WARN] macOS DO NOT need init java, build.js will use /usr/libexec/java_home.'); } else { initJavaVersion(); } } else if (args.flags.flg('list-jdks')) { println('Dowload base URL: ' + jdkPackageBaseURL); jdkPackages.forEach((jdk) => { println(' ' + jdk.jdk + repeat(' ', (30 - jdk.jdk.length)) + ' - ' + jdk.sha256); }); } else if (args.flags.flg('list')) { if (OSUtil.isMacOS()) { $$.shell().inheritIO().commands('/usr/libexec/java_home', '-V').run(); } else { var buildConfig = getBuildConfigJSON(); if (!(buildConfig.exists())) { xprintln('[ERROR] build config file not found.'); return; } var buildConfigJSON = JSON.parse($$.rFile(buildConfig).string()); if (buildConfigJSON['java'] && buildConfigJSON['java']['versions']) { var versions = buildConfigJSON['java']['versions'].sort(); println('Matching Java Virtual Machines (' + versions.length + '):'); versions.forEach((v) => { println(' ' + v + ': ' + buildConfigJSON['java'][v]['home']); }); } println(); println(getCurrentJavaHome()); } } else { if (!(args.flags.flg('h', 'help'))) { xprintln('[ERROR] Args error!'); println(); } printHelp(); } }; main();