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.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* 项目脚手架生成任务<br> * 项目脚手架生成任务<br>
* 根据 {@link Project} 元数据自动创建标准项目目录结构并生成示例入口文件 <code>src/main.snow</code> * 根据 {@link Project} 元数据自动创建标准项目目录结构并生成示例入口文件
* <code>main.snow</code>
*
* <p> * <p>
* 生成内容包括 * 生成内容包括
* <ul> * <ul>
* <li>src/ 源码目录</li> * <li><code>src/</code> 源码根目录</li>
* <li>test/ 测试源码目录</li> * <li><code>src/{group package}/</code> <code>project.group</code> 创建的包路径
* <li>build/ 编译输出目录</li> * <code>com.example</code> <code>src/com/example/</code></li>
* <li>dist/ 打包输出目录</li> * <li><code>test/</code> 测试源码目录</li>
* <li>src/main.snow Hello, Snow! 示例入口</li> * <li><code>build/</code> 编译输出目录</li>
* <li><code>dist/</code> 打包输出目录</li>
* <li><code>src/{group package}/main.snow</code> 示例入口文件</li>
* </ul> * </ul>
* 如目录或入口文件已存在则自动跳过不会覆盖 * 如目录或入口文件已存在则自动跳过不会覆盖
* </p> * </p>
@ -42,7 +47,8 @@ public final class GenerateTask implements Task {
* 执行脚手架生成流程创建标准目录和入口示例文件 * 执行脚手架生成流程创建标准目录和入口示例文件
* <ul> * <ul>
* <li>若相关目录不存在则创建</li> * <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> * <li>生成过程输出进度信息</li>
* </ul> * </ul>
* *
@ -52,13 +58,24 @@ public final class GenerateTask implements Task {
public void run() throws IOException { public void run() throws IOException {
Path root = Paths.get(".").toAbsolutePath(); Path root = Paths.get(".").toAbsolutePath();
// 创建标准目录 /* ---------- 1. 构造待创建目录列表 ---------- */
List<Path> dirs = List.of( List<Path> dirs = new ArrayList<>(List.of(
root.resolve("src"), root.resolve("src"),
root.resolve("test"), root.resolve("test"),
root.resolve("build"), root.resolve("build"),
root.resolve("dist") 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) { for (Path dir : dirs) {
if (Files.notExists(dir)) { if (Files.notExists(dir)) {
Files.createDirectories(dir); Files.createDirectories(dir);
@ -66,11 +83,11 @@ public final class GenerateTask implements Task {
} }
} }
// 创建 src/main.snow 示例入口文件 /* ---------- 4. 写入示例入口文件 main.snow ---------- */
Path mainSnow = root.resolve("src").resolve("main.snow"); Path mainSnow = packageDir.resolve("main.snow");
if (Files.notExists(mainSnow)) { if (Files.notExists(mainSnow)) {
Files.writeString(mainSnow, SnowExample.getMainModule()); 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."); System.out.println("[generate] project scaffold is ready.");