領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多長期以來,管理 Grails 依賴項僅僅意味著將它們放在應用程式的lib目錄中。然後是 Grails 1.2 和依賴項 DSL:你終於可以宣告你的依賴項,讓 Grails 自動下載它們並將它們提供給你的應用程式。太棒了!
現在,Grails 1.3 將依賴項 DSL 引入了外掛領域。
至於依賴項,一些外掛包含了你不需要的庫,或者(更糟糕的是)破壞了你的應用程式。透過依賴項 DSL,你可以顯式排除有問題的庫。
這些是為什麼這項改變可能對您很重要的一些原因。那麼,您如何使用這個新功能呢?
我將假設 Artifactory 已經安裝並執行——有關如何進行到此階段的詳細資訊,請檢視其網站,特別是 “一分鐘 Artifactory” 螢幕錄影。此時我們有一個本地儲存庫,但它還沒有提供任何構件。讓我們來解決這個問題。
我將新增 'db-util' 外掛和 'commons-digester' 庫。您可以嘗試使用您擁有的任何外掛或 JAR。只需導航到 Artifactory 的“Deploy”(部署)選項卡(已使用使用者名稱“admin”,密碼“password”登入),選擇相應的檔案,然後上傳它們。我抓取了檔案
$USER_HOME/.ivy2/cache/commons-digester/commons-digester/jars/commons-digester-2.0.jar
$USER_HOME/.grails/1.2.1/plugins/db-util-0.4.zip
請注意,UI 允許您指定上傳的目標儲存庫。我為 'db-util' 外掛選擇了 'plugins-releases-local',為 'commons-digester' 選擇了 'libs-releases-local'。另外,在提交外掛構件之前,我將其 groupId 設定為 'org.grails.plugins',將其 artifactId 設定為 'db-util'(預設值均為 'grails-db-util')。'org.grails.plugins' groupId 是 Grails 假定用於外掛依賴項的 groupId。還請注意,artifactId 不包含 "grails-" 字首。
這兩個構件現在可以本地提供給您的任何 Grails 應用程式。現在我們需要在 Grails 應用程式中配置儲存庫和依賴項。
grails.project.dependency.resolution = {
...
log "warn"
repositories {
grailsPlugins()
grailsHome()
mavenRepo "https://:8081/artifactory/libs-releases-local/"
mavenRepo "https://:8081/artifactory/plugins-releases-local/"
grailsCentral()
}
plugins {
build "org.grails.plugins:db-util:0.4"
}
dependencies {
compile "commons-digester:commons-digester:2.0"
}
}
所以,在倉庫部分,您為 Artifactory 伺服器提供的每個“儲存庫”新增一個mavenRepo條目。請注意,在本例中,我們同時添加了 'libs-releases-local' 儲存庫和 'plugins-releases-local' 儲存庫。
DSL 的新增內容是plugins部分,它(不出所料)用於宣告 Grails 外掛。它的語法與dependencies部分完全相同。因此,'db-util' 在plugins下宣告,而 'commons-digester' 在dependencies.
下宣告。您只需做這些。如果您現在執行grails run-app,您將看到如下輸出:
... Resolving dependencies... Downloading: https://:8081/artifactory/libs-releases-local/commons-digester/commons-digester/2.0/commons-digester-2.0.pom ... Download complete. Downloading: https://:8081/artifactory/libs-releases-local/commons-digester/commons-digester/2.0/commons-digester-2.0.pom.sha1 ... Download complete. ... Downloading new plugins. Please wait... ... Downloading: https://:8081/artifactory/plugins-releases-local/org/grails/plugins/db-util/0.4/db-util-0.4.pom ... Download complete. Downloading: https://:8081/artifactory/plugins-releases-local/org/grails/plugins/db-util/0.4/db-util-0.4.pom.sha1 ... Download complete. Downloading: https://:8081/artifactory/plugins-releases-local/org/grails/plugins/db-util/0.4/db-util-0.4.zip ... Download complete. Downloading: https://:8081/artifactory/plugins-releases-local/org/grails/plugins/db-util/0.4/db-util-0.4.zip.sha1 ... Download complete. Installing zip /home/pal20/.ivy2/cache/org.grails.plugins/db-util/zips/db-util-0.4.zip... ...
'db-util' 外掛已安裝,並且 'commons-digester' JAR 已包含在類路徑中。很簡單。
如果您在依賴項解析過程中遇到問題,可以透過將 BuildConfig.groovy 中的log "warn"行替換為log "info"甚至log "debug".
來調高日誌級別。當然,有時您會想託管自己的外掛或公共外掛的自定義/修補版本。現有的release-plugin命令僅適用於舊式 Subversion 儲存庫,那麼您能做什麼呢?
在您的外掛專案中安裝此外掛,並在 BuildConfig.groovy 檔案中新增以下條目:
grails.project.dependency.distribution = {
remoteRepository(id: "pluginSnapshots", url: "https://:8081/artifactory/plugins-snapshots-local/") {
authentication username: "admin", password: "password"
}
}
然後執行 grails maven-deploy --repository=pluginSnapshots。瞧!您的外掛將使用 groupIdorg.grails.plugins部署到本地 Artifactory 'plugins-snapshots-local' 儲存庫。請注意,您為--repository引數傳遞的值應與 BuildConfig.groovy 中grails.project.dependency.distribution閉包中定義的遠端儲存庫的 'id' 匹配。
您可以微調部署,例如使用帶有<distributionManagement>元素的 pom.xml 檔案,或者向外掛描述符新增groupId屬性,但基本步驟都很簡單。
剩下要解釋的是依賴項資訊儲存在哪裡。例如,普通構件(如 JAR 庫)的依賴項儲存在類似 pom.xml 的元資料檔案中。Grails 外掛有所不同。它們的 JAR 依賴項位於 zip 包內的 dependencies.groovy 檔案中。至於外掛依賴項,您如前所述在外掛描述符的dependsOn欄位中定義它們。然後,這些會被翻譯成您的外掛生成的 pom.xml 檔案中的依賴項宣告(該檔案與外掛 zip 檔案一起儲存在儲存庫中)。
這就是全部了。您現在可以提供自己易於管理的 Maven 相容儲存庫,這樣您的團隊成員就不必每次需要外掛或依賴項時都訪問網際網路。您還可以透過控制可用的 Grails 外掛版本來為您的專案注入一致性。並且您可以輕鬆修補公共外掛,並在等待修復進入官方版本的同時,將這些版本提供給您的團隊本地使用。