# Maven Converter

> 将 Java 项目转换为标准 Maven 结构，自动重组目录、转换包名（test→example）并生成 pom.xml。当用户需要将非 Maven Java 项目转换为 Maven 项目、重构现有项目为 Maven 标准结构，或请求 Maven 项目设置/转换时使用此技能。

- Skill: `majiayu000/maven-converter` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/maven-converter`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/maven-converter/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/maven-converter

---


# Maven 项目转换器

自动将 Java 项目转换为 Maven 标准结构，包括重组目录、更新包名和生成构建配置。

## 快速开始

在目标项目上运行转换脚本：

```bash
python3 scripts/maven_converter.py [项目路径] [选项]
```

**常用选项：**
- `--dry-run`: 预览更改而不修改文件
- `--group-id`: 设置 Maven groupId（默认：com.example）
- `--artifact-id`: 设置 Maven artifactId（默认：项目目录名）
- `--version`: 设置项目版本（默认：1.0-SNAPSHOT）

**示例：**
```bash
# 预览转换
python3 scripts/maven_converter.py /path/to/project --dry-run

# 执行转换并自定义 groupId
python3 scripts/maven_converter.py /path/to/project --group-id com.mycompany --artifact-id my-app
```

## 功能说明

转换器自动执行以下操作：

1. **创建 Maven 标准结构**
   - `src/main/java/` - 生产源代码
   - `src/main/resources/` - 生产资源文件
   - `src/test/java/` - 测试源代码
   - `src/test/resources/` - 测试资源文件

2. **重组文件**
   - 分析 Java 文件中的包声明
   - 将文件移动到适当的 Maven 目录
   - 识别测试文件（通过注解、导入、命名规则）
   - 复制资源文件到 Maven 资源目录

3. **转换包名**
   - 将包声明中的 `test` 替换为 `example`
   - 处理模式：`test.*`、`*.test.*`、`*.test`
   - 更新所有 Java 文件中的 package 语句
   - 示例：
     - `package test;` → `package example;`
     - `package com.test.app;` → `package com.example.app;`
     - `package com.app.test.utils;` → `package com.app.example.utils;`

4. **生成 pom.xml**
   - 如果不存在则创建标准 Maven POM
   - 包含 JUnit 5 依赖
   - 配置编译器插件（Java 11）
   - 设置构建插件（surefire、jar）
   - 使用 UTF-8 编码

5. **清理**
   - 移动文件后删除空目录
   - 保留现有的 Maven 结构

## 使用工作流

### 步骤 1：评估项目

转换前先了解项目结构：

```bash
# 查看当前结构
find /path/to/project -type f -name "*.java" | head -20

# 检查是否已有 Maven 设置
ls -la /path/to/project/pom.xml
ls -la /path/to/project/src/
```

### 步骤 2：运行预演模式

始终先预览更改：

```bash
python3 scripts/maven_converter.py /path/to/project --dry-run
```

检查输出以验证：
- 文件移动是否合理
- 包转换是否正确
- 没有遗漏重要文件

### 步骤 3：执行转换

运行实际转换：

```bash
python3 scripts/maven_converter.py /path/to/project \
  --group-id com.company \
  --artifact-id project-name \
  --version 1.0.0
```

### 步骤 4：验证结果

检查转换后的结构：

```bash
# 查看 Maven 结构
tree /path/to/project/src -L 4

# 验证 pom.xml
cat /path/to/project/pom.xml

# 测试构建
cd /path/to/project
mvn clean compile
mvn test
```

### 步骤 5：手动调整

根据需要进行检查和调整：

1. **检查 pom.xml**
   - 添加项目特定的依赖
   - 如果不是 Java 11，设置正确的 Java 版本
   - 如果构建可执行 JAR，配置主类
   - 添加其他插件

2. **验证包名**
   - 确保所有 import 仍能解析
   - 检查代码中硬编码的包字符串
   - 更新引用旧包的文档

3. **检查移动的文件**
   - 确认测试文件在 `src/test/java`
   - 确认主代码在 `src/main/java`
   - 检查资源文件在适当的目录

## 自定义 POM 模板

如果要使用自定义 pom.xml 模板而不是自动生成：

1. 将模板放在 `assets/pom_template.xml`
2. 转换前将其复制到项目：
   ```bash
   cp assets/pom_template.xml /path/to/project/pom.xml
   ```
3. 运行转换器（如果文件存在则跳过 pom.xml 生成）

`assets/pom_template.xml` 中的模板提供了起点，包含：
- 标准 Maven 结构
- JUnit 5 配置
- 常用插件（compiler、surefire、jar）
- 依赖和主类的占位符

## 功能限制

- **已有 Maven 项目**：跳过已在 `src/main/java` 或 `src/test/java` 中的文件
- **已有 pom.xml**：不修改现有的 POM 文件
- **复杂包结构**：不寻常的包结构需要手动检查
- **非 Java 资源**：专用资源可能需要手动放置
- **import 语句**：不更新 import 语句（仅包声明）

## 故障排除

**文件未正确移动**
- 检查包声明是否与实际包结构匹配
- 验证文件有正确的 `.java` 扩展名
- 检查文件编码（脚本期望 UTF-8）

**包转换问题**
- 查看 dry-run 输出检查意外转换
- 如果模式不匹配，手动调整包名
- 更新引用旧包名的 import 语句

**转换后构建失败**
- 运行 `mvn clean compile` 检查编译
- 验证 pom.xml 中的所有依赖
- 检查 Java 版本是否与编译器配置匹配
- 确保资源文件在正确的目录

**脚本错误**
- 验证已安装 Python 3：`python3 --version`
- 检查项目目录的文件权限
- 确保没有文件被锁定或正在使用

