先行一步
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 對外掛依賴項所假設的值。還要注意 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"
}
}
因此,在repositories部分中,你為 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 包已包含在 classpath 中。簡單。
如果你遇到依賴項解析問題,則可以透過將 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
大功告成!你的外掛將被部署到本地 Artifactory 的 'plugins-snapshots-local' 倉庫,其 groupId 為org.grails.plugins。注意,你為--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 外掛可用,為你的專案注入一些一致性。而且,你可以輕鬆修補公共外掛,並在等待官方版本釋出修復的同時,在本地提供這些版本給你的團隊。