updates
This commit is contained in:
141
bundles/create-java-project.ts
Normal file
141
bundles/create-java-project.ts
Normal file
@@ -0,0 +1,141 @@
|
||||
#!/usr/bin/env runts -- --allow-all
|
||||
|
||||
import {
|
||||
args,
|
||||
existsPath,
|
||||
log,
|
||||
makeDirectory,
|
||||
term,
|
||||
writeStringToFile,
|
||||
} from "../libraries/deno-commons-mod.ts";
|
||||
import { parseArgs } from "jsr:@std/cli/parse-args";
|
||||
|
||||
const DOT_GIT_IGNORE = ".gitignore";
|
||||
|
||||
const DEFAULT_GIT_IGNORE: string[] = [
|
||||
"build",
|
||||
"classes",
|
||||
".DS_Store",
|
||||
".gradle",
|
||||
".classpath",
|
||||
".project",
|
||||
".settings",
|
||||
"*.iml",
|
||||
"*.ipr",
|
||||
"*.iws",
|
||||
];
|
||||
|
||||
const DIRS: string[] = [
|
||||
"src/main/java",
|
||||
"src/main/resources",
|
||||
"src/test/java",
|
||||
"src/test/resources",
|
||||
];
|
||||
|
||||
const BUILD_JSON = "build.json";
|
||||
const BUILD_GRADLE = "build.gradle";
|
||||
|
||||
interface BuildFiles {
|
||||
build: string;
|
||||
jarGradle: string;
|
||||
springBootGradle: string;
|
||||
}
|
||||
|
||||
const BUILD_FILES_MAP: Record<string, BuildFiles> = {
|
||||
"8": {
|
||||
build: "build.json",
|
||||
jarGradle: "build_jar_template.gradle",
|
||||
springBootGradle: "build_springboot_template.gradle",
|
||||
},
|
||||
};
|
||||
|
||||
const SCRIPT_URL_PREFIX = "https://script.hatter.ink/@latest/";
|
||||
|
||||
// build.json | build_springboot_template.gradle | build_jar_template.gradle
|
||||
|
||||
async function writeGitIgnore(): Promise<void> {
|
||||
await writeStringToFile(
|
||||
DOT_GIT_IGNORE,
|
||||
DEFAULT_GIT_IGNORE.join("\n") + "\n",
|
||||
);
|
||||
}
|
||||
|
||||
async function createDirs(): Promise<void> {
|
||||
for (const dir of DIRS) {
|
||||
await makeDirectory(dir);
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchScript(
|
||||
scriptName: string,
|
||||
localName?: string,
|
||||
): Promise<string> {
|
||||
const scriptUrl = `${SCRIPT_URL_PREFIX}${scriptName}`;
|
||||
const localScriptName = localName ?? scriptName;
|
||||
log.info(`Fetch script: ${scriptUrl} -> ${localScriptName}`);
|
||||
const scripResponse = await fetch(scriptUrl);
|
||||
if (scripResponse.status !== 200) {
|
||||
throw new Error(
|
||||
`Fetch script: ${scriptUrl} -> ${localScriptName} failed, status: ${scripResponse.status}`,
|
||||
);
|
||||
}
|
||||
await writeStringToFile(localScriptName, await scripResponse.text());
|
||||
}
|
||||
|
||||
function showHelp() {
|
||||
console.log(
|
||||
term.auto(`[blue][b]create-java-project.ts[//] - Create Java project
|
||||
|
||||
[blue][b]create-java-project.ts[//] --help|-h - for help
|
||||
[blue][b]create-java-project.ts[//] --jdk VERSION springboot|jar - create springboot or jar project
|
||||
|
||||
Supported JDK:
|
||||
- 8, 1.8`),
|
||||
);
|
||||
}
|
||||
|
||||
async function handleJdk(buildFiles: BuildFiles, flags: any): Promise<void> {
|
||||
let buildGradleFile = null;
|
||||
if (flags._[0] == "springboot") {
|
||||
buildGradleFile = buildFiles.springBootGradle;
|
||||
} else if (flags._[0] == "jar") {
|
||||
buildGradleFile = buildFiles.jarGradle;
|
||||
} else {
|
||||
throw new Error(`Invalid target: ${flags._[0]}`);
|
||||
}
|
||||
|
||||
if (await existsPath(BUILD_JSON) || await existsPath(BUILD_GRADLE)) {
|
||||
throw new Error(`File ${BUILD_JSON} or ${BUILD_GRADLE} already exists`);
|
||||
}
|
||||
|
||||
await fetchScript(buildFiles.build, BUILD_JSON);
|
||||
await fetchScript(buildGradleFile, BUILD_GRADLE);
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const flags = parseArgs(args(), {
|
||||
boolean: [
|
||||
"help",
|
||||
],
|
||||
string: [
|
||||
"jdk",
|
||||
],
|
||||
alias: {
|
||||
h: "help",
|
||||
},
|
||||
});
|
||||
|
||||
if (flags.help || flags._.length === 0) {
|
||||
showHelp();
|
||||
return;
|
||||
}
|
||||
|
||||
if (flags.jdk == "8" || flags.jdk == "1.8") {
|
||||
const buildFiles = BUILD_FILES_MAP["8"];
|
||||
await handleJdk(buildFiles, flags);
|
||||
} else {
|
||||
throw new Error(`Invalid JDK: ${flags.jdk ?? "not-assigned"}`);
|
||||
}
|
||||
}
|
||||
|
||||
main().catch((e) => log.error(e));
|
||||
Reference in New Issue
Block a user