Files
js-scripts/scripts/build-util.js
2025-04-05 16:57:26 +08:00

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();