领先一步
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 插件版本来为您的项目注入一致性。并且您可以轻松修补公共插件,并在等待修复进入官方版本的同时,将这些版本提供给您的团队本地使用。