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。
+ *
*
* 生成内容包括:
*
- * - src/ —— 源码目录
- * - test/ —— 测试源码目录
- * - build/ —— 编译输出目录
- * - dist/ —— 打包输出目录
- * - src/main.snow —— “Hello, Snow!” 示例入口
+ * src/ —— 源码根目录
+ * src/{group package}/ —— 按 project.group 创建的包路径
+ * (如 com.example → src/com/example/)
+ * test/ —— 测试源码目录
+ * build/ —— 编译输出目录
+ * dist/ —— 打包输出目录
+ * src/{group package}/main.snow —— 示例入口文件
*
* 如目录或入口文件已存在,则自动跳过,不会覆盖。
*
@@ -42,7 +47,8 @@ public final class GenerateTask implements Task {
* 执行脚手架生成流程,创建标准目录和入口示例文件。
*
* - 若相关目录不存在则创建
- * - 若
src/main.snow 不存在则写入模板
+ * - 若设置了
project.group,则在 src/ 下新建对应包路径
+ * - 示例入口文件
main.snow 写入包路径目录
* - 生成过程输出进度信息
*
*
@@ -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.");