feat: 生成示例文件
This commit is contained in:
parent
0a236d914d
commit
df7736a82a
@ -7,19 +7,24 @@ import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 项目脚手架生成任务。<br>
|
||||
* 根据 {@link Project} 元数据自动创建标准项目目录结构,并生成示例入口文件 <code>src/main.snow</code>。
|
||||
* 根据 {@link Project} 元数据自动创建标准项目目录结构,并生成示例入口文件
|
||||
* <code>main.snow</code>。
|
||||
*
|
||||
* <p>
|
||||
* 生成内容包括:
|
||||
* <ul>
|
||||
* <li>src/ —— 源码目录</li>
|
||||
* <li>test/ —— 测试源码目录</li>
|
||||
* <li>build/ —— 编译输出目录</li>
|
||||
* <li>dist/ —— 打包输出目录</li>
|
||||
* <li>src/main.snow —— “Hello, Snow!” 示例入口</li>
|
||||
* <li><code>src/</code> —— 源码根目录</li>
|
||||
* <li><code>src/{group package}/</code> —— 按 <code>project.group</code> 创建的包路径
|
||||
* (如 <code>com.example</code> → <code>src/com/example/</code>)</li>
|
||||
* <li><code>test/</code> —— 测试源码目录</li>
|
||||
* <li><code>build/</code> —— 编译输出目录</li>
|
||||
* <li><code>dist/</code> —— 打包输出目录</li>
|
||||
* <li><code>src/{group package}/main.snow</code> —— 示例入口文件</li>
|
||||
* </ul>
|
||||
* 如目录或入口文件已存在,则自动跳过,不会覆盖。
|
||||
* </p>
|
||||
@ -42,7 +47,8 @@ public final class GenerateTask implements Task {
|
||||
* 执行脚手架生成流程,创建标准目录和入口示例文件。
|
||||
* <ul>
|
||||
* <li>若相关目录不存在则创建</li>
|
||||
* <li>若 <code>src/main.snow</code> 不存在则写入模板</li>
|
||||
* <li>若设置了 <code>project.group</code>,则在 <code>src/</code> 下新建对应包路径</li>
|
||||
* <li>示例入口文件 <code>main.snow</code> 写入包路径目录</li>
|
||||
* <li>生成过程输出进度信息</li>
|
||||
* </ul>
|
||||
*
|
||||
@ -52,13 +58,24 @@ public final class GenerateTask implements Task {
|
||||
public void run() throws IOException {
|
||||
Path root = Paths.get(".").toAbsolutePath();
|
||||
|
||||
// 创建标准目录
|
||||
List<Path> dirs = List.of(
|
||||
/* ---------- 1. 构造待创建目录列表 ---------- */
|
||||
List<Path> dirs = new ArrayList<>(List.of(
|
||||
root.resolve("src"),
|
||||
root.resolve("test"),
|
||||
root.resolve("build"),
|
||||
root.resolve("dist")
|
||||
);
|
||||
));
|
||||
|
||||
/* ---------- 2. 处理 group:追加包目录 ---------- */
|
||||
String group = project != null ? project.getGroup() : null;
|
||||
Path srcDir = root.resolve("src");
|
||||
Path packageDir = srcDir; // 默认直接在 src 下
|
||||
if (group != null && !group.isBlank()) {
|
||||
packageDir = srcDir.resolve(group.replace('.', '/'));
|
||||
dirs.add(packageDir);
|
||||
}
|
||||
|
||||
/* ---------- 3. 创建目录 ---------- */
|
||||
for (Path dir : dirs) {
|
||||
if (Files.notExists(dir)) {
|
||||
Files.createDirectories(dir);
|
||||
@ -66,11 +83,11 @@ public final class GenerateTask implements Task {
|
||||
}
|
||||
}
|
||||
|
||||
// 创建 src/main.snow 示例入口文件
|
||||
Path mainSnow = root.resolve("src").resolve("main.snow");
|
||||
/* ---------- 4. 写入示例入口文件 main.snow ---------- */
|
||||
Path mainSnow = packageDir.resolve("main.snow");
|
||||
if (Files.notExists(mainSnow)) {
|
||||
Files.writeString(mainSnow, SnowExample.getMainModule());
|
||||
System.out.println("[generate] created src/main.snow");
|
||||
System.out.println("[generate] created " + root.relativize(mainSnow));
|
||||
}
|
||||
|
||||
System.out.println("[generate] project scaffold is ready.");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user