Files
2026Technology-Competition/scripts/download-pmd.mjs
T

55 lines
1.7 KiB
JavaScript

import { existsSync, mkdirSync, createWriteStream, unlinkSync } from 'fs';
import { resolve, dirname } from 'path';
import { fileURLToPath } from 'url';
import { get } from 'https';
const __dirname = dirname(fileURLToPath(import.meta.url));
const rootDir = resolve(__dirname, '..');
const libDir = resolve(rootDir, 'jars', 'pmd', 'lib');
const PMD_VERSION = '7.26.0';
const PMD_JARS = [
`pmd-core-${PMD_VERSION}.jar`,
`pmd-java-${PMD_VERSION}.jar`,
`pmd-javascript-${PMD_VERSION}.jar`,
`pmd-jsp-${PMD_VERSION}.jar`,
];
const MAVEN_BASE = `https://repo1.maven.org/maven2/net/sourceforge/pmd`;
function downloadFile(url, dest) {
return new Promise((resolvePromise, reject) => {
const file = createWriteStream(dest);
get(url, (response) => {
if (response.statusCode === 302 || response.statusCode === 301) {
downloadFile(response.headers.location, dest).then(resolvePromise).catch(reject);
return;
}
response.pipe(file);
file.on('finish', () => { file.close(); resolvePromise(); });
file.on('error', (err) => { unlinkSync(dest); reject(err); });
}).on('error', (err) => { unlinkSync(dest); reject(err); });
});
}
if (!existsSync(libDir)) {
mkdirSync(libDir, { recursive: true });
}
for (const jar of PMD_JARS) {
const moduleName = jar.replace(`-${PMD_VERSION}.jar`, '').replace('pmd-', '');
const url = `${MAVEN_BASE}/pmd-${moduleName}/${PMD_VERSION}/${jar}`;
const dest = resolve(libDir, jar);
if (existsSync(dest)) {
console.log(`Skip: ${jar} (exists)`);
continue;
}
console.log(`Downloading: ${url}`);
await downloadFile(url, dest);
console.log(`Done: ${jar}`);
}
console.log('PMD JARs download complete.');