领先一步
VMware 提供培训和认证,以加快您的进度。
了解更多长期以来,管理 Grails 依赖项仅仅意味着将它们放入应用程序的lib目录中。然后 Grails 1.2 和依赖项 DSL 出现了:您终于可以声明您的依赖项,并让 Grails 自动下载它们并使它们可用于您的应用程序。太棒了!
现在,Grails 1.3 已将依赖项 DSL 引入插件领域。
至于依赖项,有些插件包含您不需要的库,或者(更糟糕的是)会破坏您的应用程序。使用依赖项 DSL,您可以明确排除有问题的库。
这些是此更改可能对您很重要的部分原因。那么,您如何使用此新功能呢?
我假设 Artifactory 已经安装并正在运行——有关达到此阶段的详细信息,请查看其网站,特别是 "一分钟 Artifactory" 演示视频。此时,我们有一个本地存储库,但它尚未提供任何工件。让我们修复它。
我将添加“db-util”插件和“commons-digester”库。您可以尝试使用任何可用的插件或 JAR 文件。只需导航到 Artifactory 的“部署”选项卡(已使用用户名“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://127.0.0.1:8081/artifactory/libs-releases-local/"
mavenRepo "https://127.0.0.1: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://127.0.0.1:8081/artifactory/libs-releases-local/commons-digester/commons-digester/2.0/commons-digester-2.0.pom ... Download complete. Downloading: https://127.0.0.1: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://127.0.0.1:8081/artifactory/plugins-releases-local/org/grails/plugins/db-util/0.4/db-util-0.4.pom ... Download complete. Downloading: https://127.0.0.1:8081/artifactory/plugins-releases-local/org/grails/plugins/db-util/0.4/db-util-0.4.pom.sha1 ... Download complete. Downloading: https://127.0.0.1:8081/artifactory/plugins-releases-local/org/grails/plugins/db-util/0.4/db-util-0.4.zip ... Download complete. Downloading: https://127.0.0.1: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
Grails 核心在这里帮不上忙,但它也不需要帮忙。有一个专门用于将 Grails 应用程序和插件发布到 Maven 兼容存储库的 Grails 插件:Maven 发布者插件。
grails.project.dependency.distribution = {
remoteRepository(id: "pluginSnapshots", url: "https://127.0.0.1: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 中定义的远程存储库的“id”匹配。grails.project.dependency.distribution闭包。
您可以微调部署,例如通过使用包含<distributionManagement>元素的 pom.xml 文件,或者通过向插件描述符添加groupId属性,但是基本步骤都很简单。
剩下的要解释的是依赖项信息存储的位置。例如,普通工件(如 JAR 库)的依赖项存储在 pom.xml 等元数据文件中。Grails 插件则不同。它们的 JAR 依赖项位于 zip 包中的 dependencies.groovy 文件中。至于插件依赖项,您像以前一样在插件描述符的dependsOn字段中定义它们。然后将其转换为插件生成的 pom.xml 文件(存储在存储库中插件 zip 文件旁边)中的依赖项声明。
这确实是全部内容。您现在可以提供您自己易于管理的 Maven 兼容存储库,以便您的团队成员不再需要每次需要插件或依赖项时都访问互联网。您还可以通过控制可用的 Grails 插件版本来提高项目的稳定性。您可以轻松修补公共插件并将这些版本本地提供给您的团队,同时等待这些修复程序进入正式发布版。