251 lines
9.4 KiB
JavaScript
251 lines
9.4 KiB
JavaScript
#! /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 <FLAGS>');
|
|
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();
|