run-apprun-app 卡在「Configuring classpath」| 原因層面 | 具體說明 | 驗證方法 |
|---|---|---|
| 環境變數差異 | GRAILS_HOME、JAVA_HOME、PATH 設定不一致 | 執行 grails -version、java -version 對比 |
| IDE 專案元資料 | .settings、.classpath、.project 包含絕對路徑或機器特定配置 | 檢查 .settings/org.eclipse.jdt.core.prefs |
| 依賴快取差異 | ~/.grails/ivy-cache、~/.m2/repository 內容不同 | 比較依賴解析日誌 |
| Grails 版本微差 | 微版本號不同 (如 2.2.1 vs 2.2.0) 導致插件不相容 | grails -version 確認 |
| OS 差異 (Ubuntu vs Windows) | 路徑分隔符、檔案權限、插件原生庫差異 | 檢查 BuildConfig.groovy 路徑寫法 |
# 1. 確認 Java 版本 (Grails 2.2 需 Java 7/8)
java -version
# 建議使用 SDKMAN 管理
sdk install java 8.0.382-tem
sdk install grails 2.2.1
# 2. 設定環境變數 (~/.bashrc 或 ~/.zshrc)
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
export GRAILS_HOME=$HOME/.sdkman/candidates/grails/current
export PATH=$GRAILS_HOME/bin:$PATH
# 在專案根目錄執行
rm -rf .settings .classpath .project target/ stacktrace.log
# 保留原始碼與建構腳本
# 重新導入 IDE:File → Import → Existing Gradle/Grails Project
# 1. 清理 Grails 快取
grails clean
rm -rf ~/.grails/2.2.1/projects/your-project/
# 2. 強制刷新依賴
grails refresh-dependencies --non-interactive
# 3. 離線模式測試 (若有本地倉庫)
grails --offline run-app
# BuildConfig.groovy 重點檢查:
grails.project.fork = [run: false] // 避免 fork 模式導致 classpath 問題
# Config.groovy / DataSource.groovy 中的 import 錯誤:
// 錯誤:import org.springframework.core.io.ClassPathResource
// 原因:缺少 spring-core 依賴或版本衝突
// 解決:在 BuildConfig.groovy dependencies 區塊添加
compile "org.springframework:spring-core:4.3.30.RELEASE"
compile "org.springframework:spring-context:4.3.30.RELEASE"
BuildConfig.groovy 中 plugins 區塊鎖定具體版本export GRAILS_OPTS="-Xmx2g -Xms1g"BuildConfig.groovy、Config.groovy、DataSource.groovygrailsw / grailsw.bat (Grails Wrapper,類似 Gradle Wrapper).tool-versions (配合 asdf/sdkman 使用).settings/、.classpath、.project (IDE 專屬)target/、stacktrace.log (建構產物)~/.grails/、~/.m2/ (使用者快取)#!/bin/bash
# fix-grails-env.sh
echo "=== 清理專案元資料 ==="
rm -rf .settings .classpath .project target/
echo "=== 清理 Grails 快取 ==="
grails clean
rm -rf ~/.grails/$(grails -version | awk '{print $2}')/projects/$(basename $PWD)/
echo "=== 重新解析依賴 ==="
grails refresh-dependencies --non-interactive
echo "=== 嘗試啟動 ==="
grails run-app
Grails 專案跨機器遷移失敗,核心在於 執行環境不一致 (JDK/Grails 版本、環境變數) 與 IDE 元資料污染。建立標準化環境 (SDKMAN + Grails Wrapper)、清理 IDE 專案檔、統一依賴解析流程,是解決此類問題的根本之道。