feat: 生成示例文件

This commit is contained in:
Luke 2025-06-24 17:53:01 +08:00
parent 0a236d914d
commit df7736a82a

View File

@ -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.");