From df7736a82a55aa2d226214e789efcb0e83cfb508 Mon Sep 17 00:00:00 2001 From: Luke Date: Tue, 24 Jun 2025 17:53:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=94=9F=E6=88=90=E7=A4=BA=E4=BE=8B?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jcnc/snow/pkg/tasks/GenerateTask.java | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/jcnc/snow/pkg/tasks/GenerateTask.java b/src/main/java/org/jcnc/snow/pkg/tasks/GenerateTask.java index 5c820a9..83b9253 100644 --- a/src/main/java/org/jcnc/snow/pkg/tasks/GenerateTask.java +++ b/src/main/java/org/jcnc/snow/pkg/tasks/GenerateTask.java @@ -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; /** * 项目脚手架生成任务。
- * 根据 {@link Project} 元数据自动创建标准项目目录结构,并生成示例入口文件 src/main.snow。 + * 根据 {@link Project} 元数据自动创建标准项目目录结构,并生成示例入口文件 + * main.snow。 + * *

* 生成内容包括: *

* 如目录或入口文件已存在,则自动跳过,不会覆盖。 *

@@ -42,7 +47,8 @@ public final class GenerateTask implements Task { * 执行脚手架生成流程,创建标准目录和入口示例文件。 * * @@ -52,13 +58,24 @@ public final class GenerateTask implements Task { public void run() throws IOException { Path root = Paths.get(".").toAbsolutePath(); - // 创建标准目录 - List dirs = List.of( + /* ---------- 1. 构造待创建目录列表 ---------- */ + List 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.");