統一團隊程式碼風格、自動生成標準化註解,是提升開發效率與程式碼品質的關鍵。本文詳細講解如何使用 IntelliJ IDEA 的 File and Code Templates 功能,打造專屬的程式碼生成模板。
| 特性 | Live Templates | File and Code Templates |
|---|---|---|
| 觸發方式 | 縮寫 + Tab 鍵 | 新建檔案時自動套用 |
| 適用場景 | 程式碼片段快速插入 | 類別/介面/Enum 整體結構 |
| 變數支援 | 豐富(表達式、腳本) | 預定義變數(${NAME}、${DATE} 等) |
| 範圍 | 編輯器內任意位置 | 檔案層級 |
Settings (Ctrl+Alt+S) → Editor → File and Code Templates
編輯 Files → Class:
#if (${PACKAGE_NAME} != "")
package ${PACKAGE_NAME};
#end
/**
* @author ${USER}
* @date ${DATE} ${TIME}
* @description ${DESCRIPTION}
* @version 1.0
*/
public class ${NAME} {
}
編輯 Includes → File Header:
/**
* Copyright (c) ${YEAR} ${COMPANY_NAME}. All rights reserved.
* This software is the confidential and proprietary information of ${COMPANY_NAME}.
*/
在 Files → Class 最頂部加入:
#parse("File Header.java")
同樣編輯 Files → Interface 和 Files → Enum,引用相同的 File Header。
| 變數 | 說明 | 範例 |
|---|---|---|
| ${NAME} | 檔案名稱(不含副檔名) | UserService |
| ${PACKAGE_NAME} | 套件名稱 | com.example.service |
| ${USER} | 系統使用者名稱 | john.doe |
| ${DATE} | 當前日期 | 2024-01-15 |
| ${TIME} | 當前時間 | 14:30:25 |
| ${YEAR} | 當前年份 | 2024 |
| ${MONTH} | 當前月份 | 01 |
| ${DAY} | 當前日期 | 15 |
| ${PROJECT_NAME} | 專案名稱 | my-spring-boot-app |
| ${MODULE_NAME} | 模組名稱 | service-module |
#set($DESCRIPTION = "用戶服務介面")
public interface ${NAME} {
}
/**
* @author ${USER}
* @date ${DATE}
* @description ${GROOVY_SCRIPT:"return 'Auto-generated ' + new Date().format('yyyy-MM-dd')"}
*/
config/templates 目錄到版本控制專案根目錄建立 .idea/fileTemplates/ 目錄,放入自定義模板檔案,提交到 Git 實現團隊同步。
# .editorconfig root = true [*] indent_style = space indent_size = 4 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.java] indent_size = 4
#parse("File Header.java")
#if (${PACKAGE_NAME} != "")
package ${PACKAGE_NAME};
#end
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional(rollbackFor = Exception.class)
public class ${NAME} implements ${INTERFACE_NAME} {
}
#parse("File Header.java")
#if (${PACKAGE_NAME} != "")
package ${PACKAGE_NAME};
#end
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;
import static org.junit.jupiter.api.Assertions.*;
@DisplayName("${NAME} 測試")
class ${NAME}Test {
@Test
@DisplayName("測試方法")
void testMethod() {
// given
// when
// then
}
}
#parse("File Header.java")
#if (${PACKAGE_NAME} != "")
package ${PACKAGE_NAME};
#end
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface ${NAME}Mapper {
int insert(${ENTITY_NAME} entity);
int update(${ENTITY_NAME} entity);
${ENTITY_NAME} selectById(Long id);
List<${ENTITY_NAME}> selectAll();
int deleteById(Long id);
}
常用片段快速鍵(Settings → Editor → Live Templates):
| 縮寫 | 展開內容 | 適用語境 |
|---|---|---|
| psvm | public static void main(String[] args) { } | 類別內部 |
| sout | System.out.println(); | 方法內部 |
| psfs | public static final String | 類別內部 |
| itar | for (int i = 0; i < array.length; i++) { } | 方法內部 |
| itco | for (Element element : collection) { } | 方法內部 |
| tryc | try { } catch (Exception e) { } | 方法內部 |
| singleton | 單例模式完整程式碼 | 類別內部 |
透過 File and Code Templates 統一檔案級結構,配合 Live Templates 加速片段編寫,再結合 EditorConfig 強制格式化,能構建高效一致的團隊開發環境。建議將模板納入專案版本控制,新成員 Clone 專案即可獲得標準化配置。