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

151 lines
5.4 KiB
JavaScript

#! /usr/bin/env runjs
var argsEx = require('component-args.js');
var json = require('component-json-ex.js');
var gpg = require('component-gpg-ex.js');
var DefaultRollCounter = Packages.me.hatter.tools.commons.io.DefaultRollCounter;
// need pom?
var REPO_BASEURLS = {
'central': {
'jar': 'https://search.maven.org/remotecontent?filepath={gid}/{aid}/{ver}/{aid}-{ver}.jar',
'src': 'https://search.maven.org/remotecontent?filepath={gid}/{aid}/{ver}/{aid}-{ver}-sources.jar',
'pom': 'https://search.maven.org/remotecontent?filepath={gid}/{aid}/{ver}/{aid}-{ver}.pom'
},
'aliyun_central': {
'jar': 'https://maven.aliyun.com/repository/central/{gid}/{aid}/{ver}/{aid}-{ver}.jar',
'src': 'https://maven.aliyun.com/repository/central/{gid}/{aid}/{ver}/{aid}-{ver}-sources.jar',
'pom': 'https://maven.aliyun.com/repository/central/{gid}/{aid}/{ver}/{aid}-{ver}.pom'
}
};
var gpgEncryptedAuthToken = {/**LINES
-----BEGIN PGP MESSAGE-----
Comment: GPGTools - https://gpgtools.org
hQEMAwpgonLPA1NTAQf+MowR8XeAd6jtJhHE6s8FwmXyYEI1R8J3kEo+XBnUWXph
dVQYHUAj+lWl9Pd8YpJmImT+Qf9mseZSi0wbkUi6N1UJogwtx4sAu9szvLcEhYa2
68Oyl+AY8jdn608OKqXRwG8z4HVrzdFgyEBuyJ/GafDH+bXcLYNtROcb63FlMlhJ
zLymaJD85W3uKlmYqJ0/OHLxn+fruRvZz0ZxlN1w3lj8t0wqLk+cOcTVMZkpdiYD
BGj8fkS/OTQBBNACmsCJDoUdBEMSRpjU3z55Zn5EGK0R3uTkZfuo+pJjGaZEtz8m
kuM0Yxyvq38fzPC9zrGQKsyXBOH3B8/x7GqcNDEVRtJnAWDu4syv3FkiGAzyHiKZ
nEupU97rz+XL5fKU89i6+ttAAC+xIMkASAde/Z5CdOdGjwfjx3u7U+c8XmaAcQtE
ibIucc2d0dsCkynzket0EfqExEXj4NUqxmwIS118vKMZAwap3FnaxQ==
=fjt8
-----END PGP MESSAGE-----
*/};
var SITE_PROXY_MAP = {
"hatterink": "https://hatter.ink/pget.action?__auth_token={auth_token}&target={target}"
};
var __cachec_authToken = null;
var getRealUrl = (args, url) => {
var readlUrl = url;
var proxy = args.val('p', 'proxy');
if (proxy != null) {
var proxyUrl = SITE_PROXY_MAP[proxy];
if (proxyUrl == null) {
xprintln('[WARN] Unknown proxy: ' + proxy);
} else {
xprintln('[INFO] Using proxy: ' + proxy);
if (__cachec_authToken == null) {
__cachec_authToken = gpg.decryptArmor(gpgEncryptedAuthToken);
}
readlUrl = proxyUrl.replace('{auth_token}', __cachec_authToken).replace('{target}', encodeURIComponent(url));
}
}
return readlUrl;
};
var main = () => {
var args = argsEx.parseDefARGs(['use-wget']);
if (args == null || (args.length != 1 && args.length != 3)) {
println('Usage:');
println('mvnjar.js [--use-wget] [-r, --repo] [-p, --proxy] gid aid ver');
println('mvnjar.js [--use-wget] [-r, --repo] [-p, --proxy] gid:aid:ver');
println(' -r, --repo <REPO> x(central), central, aliyun_central')
println(' -p, --proxy <SITE> Site, hatterink')
return;
}
var repo = args.val('r', 'repo')
if (repo == null || repo == 'x') { repo = 'central'; }
var gid, aid, ver;
if (args.length == 1) {
var splitedArgs1 = $STR(args[0]).split(':');
if (splitedArgs1.length != 3) {
xprintln('[ERROR] Format error: ' + args[0]);
return;
}
gid = splitedArgs1[0];
aid = splitedArgs1[1];
ver = splitedArgs1[2];
} else {
gid = args[0];
aid = args[1];
ver = args[2];
}
var baseUrls = REPO_BASEURLS[repo];
if (baseUrls == null) {
xprintln('[ERROR] Repo not defined: ' + repo);
return;
}
var urlJar = baseUrls.jar;
var urlSrc = baseUrls.src;
var urlPom = baseUrls.pom;
var uj = urlJar.replace(/{gid}/g, gid.replace(/\./g, '/')).replace(/{aid}/g, aid).replace(/{ver}/g, ver);
println('JAR: ' + uj);
if (args.flg('use-wget')) {
$$.shell().commands('wget', uj, '-O', aid + '-' + ver + '.jar').run();
} else {
__.httprequest.fromUrl(getRealUrl(args, uj)).get(__.rfile.from(aid + '-' + ver + '.jar').file(), new DefaultRollCounter().prefix('Downloading ... '));
}
var hasSrc = true;
var us = urlSrc.replace(/{gid}/g, gid.replace(/\./g, '/')).replace(/{aid}/g, aid).replace(/{ver}/g, ver);
println('SRC: ' + us);
try {
if (args.flg('use-wget')) {
$$.shell().commands('wget', us, '-O', aid + '-' + ver + '-sources.jar').run();
} else {
__.httprequest.fromUrl(getRealUrl(args, us)).get(__.rfile.from(aid + '-' + ver + '-sources.jar').file(), new DefaultRollCounter().prefix('Downloading ... '));
}
} catch(e) {
hasSrc = false;
println('[WARN] download src failed.')
}
if (urlPom) {
var up = urlPom.replace(/{gid}/g, gid.replace(/\./g, '/')).replace(/{aid}/g, aid).replace(/{ver}/g, ver);
println('POM: ' + up);
if (args.flg('use-wget')) {
$$.shell().commands('wget', up, '-O', aid + '-' + ver + '-.pom').run();
} else {
__.httprequest.fromUrl(getRealUrl(args, up)).get(__.rfile.from(aid + '-' + ver + '.pom').file(), new DefaultRollCounter().prefix('Downloading ... '));
}
}
var b = {
repo: {
gid: gid,
aid: aid,
jar: aid + '-' + ver + '.jar',
pom: aid + '-' + ver + '.pom',
staticVersion: ver
}
};
if (hasSrc) {
b.repo.src = aid + '-' + ver + '-sources.jar';
}
var j = json.prettyJSON(b);
println(j);
__.rfile.from('build.json').write(j);
println('done')
};
main();