首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 實現 Maven 多模組專案自動生成器:從模板到可運行骨架

     編輯:Java 綜合教學

痛點:Spring MVC 專案重複搭建低效

每個新專案都要手動配置 pom.xml、web.xml、Spring 配置、資料庫連線池、工具類、基礎包結構……這些樣板代碼 100% 可復用,唯一變化只是 groupId、artifactId、版本號。本文展示一個基於模板替換的自動生成器,輸出標準 Maven 多模組骨架,生成即可運行。

目標模組劃分(7 模組)

${artifactId}-parent          // 父 POM,統一依賴版本
├── ${artifactId}-common      // 工具類、常數、異常、基礎 DTO
├── ${artifactId}-domain      // 實體類、VO、Enum
├── ${artifactId}-dao         // MyBatis Mapper、XML、Repository
├── ${artifactId}-service     // 介面 + 實現、事務邊界
├── ${artifactId}-rpc         // Hessian/Dubbo 遠程介面發布
├── ${artifactId}-web         // Spring MVC Controller、View、靜態資源
└── ${artifactId}-cache       // Redis/本地緩存封裝(可選)

核心生成器代碼結構

public class MavenProjectGenerator {
    // 固定參數
    private static final String GROUP_ID = "com.example";
    private static final String ARTIFACT_ID = "myapp";
    private static final String TEMPLATE_ROOT = "E:/generateProject/sourceTemplate";
    private static final String OUTPUT_ROOT = "E:/generateProject/targetProject/" + ARTIFACT_ID;

    // 版本號映射表(對應模板中的 ${spring-webmvc} 等佔位符)
    private static final Map VERSION_MAP = Map.of(
        "${spring-webmvc}", "5.3.30",
        "${mybatis}", "3.5.13",
        // ...
    );

    public static void main(String[] args) {
        new MavenProjectGenerator().generate();
    }

    void generate() {
        recurseCopyAndReplace(new File(TEMPLATE_ROOT));
    }

    void recurseCopyAndReplace(File src) {
        for (File f : src.listFiles()) {
            String relPath = f.getAbsolutePath().substring(TEMPLATE_ROOT.length() + 1);
            // 1. 替換目錄名中的 ${groupId}/${artifactId}
            String targetDir = replacePlaceholders(relPath, true);
            // 2. 若為 Java 源碼目錄,需依 package 聲明再細分子目錄
            if (isJavaSourceDir(f)) {
                targetDir += "/" + extractPackageDir(f);
            }
            File target = new File(OUTPUT_ROOT, targetDir);
            target.mkdirs();

            if (f.isDirectory()) {
                recurseCopyAndReplace(f);
            } else {
                String content = readFile(f);
                content = replacePlaceholders(content);
                if (f.getName().equals("pom.xml")) content = replaceVersions(content);
                writeFile(new File(target, f.getName()), content);
            }
        }
    }

    // 關鍵輔助方法:佔位符替換、版本號替換、package 目錄推導、IO 操作...
}

模板設計要點

  • 目錄/檔案名含佔位符:src/main/java/${groupId}/${artifactId}/web。
  • Java 檔首行 package ${groupId}.${artifactId}.web.controller; 生成時同步替換。
  • pom.xml 統一使用 ${spring-webmvc} 等版本佔位符,生成時統一替換,避免版本散落。
  • 資源檔(jdbc.properties, log4j.xml)同理替換。

生成結果驗證

  1. 進入 ${artifactId}-parent 執行 mvn clean install -DskipTests。
  2. 啟動 ${artifactId}-web 模組(Tomcat/Jetty 插件或打 WAR 部署)。
  3. 訪問首頁、健康檢查端點,確認無紅字報錯。

進階擴展建議

  • 引入 Velocity/FreeMarker 替換字串替換,支援 #if/#foreach 條件生成。
  • 整合 JCommander/Picocli 做 CLI 工具:gen -g com.my -a myapp -v 1.0.0。
  • 支援多模板集:spring-mvc、spring-boot、microservice。
  • 生成 README.md、.gitignore、Dockerfile、Jenkinsfile 等工程化配套。
  • 上傳至內網 Nexus/Artifactory 作為 maven-archetype,IDE New Project → Maven Archetype 直接選用。

源碼完整版:GitHub studydemo。投入半天開發生成器,節省每個專案數小時搭建時間,長期 ROI 極高。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved