Files
js-scripts/components/component-javahome.js
2025-04-04 17:19:07 +08:00

68 lines
2.3 KiB
JavaScript

var OSUtil = Packages.me.hatter.tools.commons.os.OSUtil;
var getJavaHomeFromJdks = (version) => {
var jdksPath = $$.file('~/.jssp/jdks');
if (!(jdksPath.exists() && jdksPath.isDirectory())) {
return null;
}
var jdkVersions = $ARRAY(jdksPath.listFiles()).filter((p) => {
return p.isDirectory();
}).map((p) => {
var jdkVersion = p.getName();
if (jdkVersion.startsWith('jdk-')) {
jdkVersion = jdkVersion.substring('jdk-'.length);
} else if (jdkVersion.startsWith('jdk')) {
jdkVersion = jdkVersion.substring('jdk'.length);
}
return [jdkVersion, p.getAbsolutePath()];
}).sort((a, b) => {
return b[0] - a[0];
});
for (var i = 0; i < jdkVersions.length; i++) {
if (jdkVersions[i][0].startsWith(version)) {
return jdkVersions[i][1];
}
}
return null;
};
var getJavaHomeFromBuildConfig = (version) => {
var buildConfigRFile = __.rfile.from('~/.jssp/config/buildconfig.json');
if (buildConfigRFile.notExists()) {
return null;
}
var buildConfigJSON = JSON.parse(buildConfigRFile.string());
if (buildConfigJSON['java'] && buildConfigJSON['java']['versions']) {
var versions = buildConfigJSON['java']['versions'];
for (var i = 0; i < versions.length; i++) {
if (versions[i].startsWith(version)) {
return buildConfigJSON['java'][versions[i]]['home'];
}
}
}
return null;
}
var getJavaHome = (version) => {
if ((version == null) || ($STR(version) == '')) { return null; }
if (OSUtil.isMacOS()) {
var jversions = $$.shell().commands('/usr/libexec/java_home', '-version', version).start();
if (jversions[1] && $STR(jversions[1].toString()).contains('Unable to find any JVMs matching version')) {
return null;
}
return jversions[0].toString().trim();
} else {
var javaHomeFromJdks = getJavaHomeFromJdks(version);
if (javaHomeFromJdks != null) {
return javaHomeFromJdks;
}
var javaHomeFromBuildConfig = getJavaHomeFromBuildConfig(version);
return javaHomeFromBuildConfig;
}
};
if (typeof exports == 'object') {
exports.getJavaHome = getJavaHome;
}