我正在使用 Grails 2.3.6,并且对这 2 个 SDK 命令有一些疑问。我通常不喜欢像这样写“多问题”,但正如你所看到的,它们在概念上非常接近,我宁愿把它们全部放在这里,也不愿用 5 个小问题陷入困境。
- 做什么(做了;因为现在已弃用)
grails maven-install
具体是做什么的? grails install-plugin
是什么意思?做什么?grails install-plugin maven-publisher
是什么意思?做什么?- 什么是
maven-publisher
,它有什么作用? - 为什么是
grails maven-install
的工作现在的责任BuildConfig.groovy
的compile
或build
目标(弃用后)?
最佳答案
install-plugin
脚本在 2.3 中被删除,因为“安装”插件没有多大意义。相反,我们像添加 jar 文件一样添加对插件的依赖关系,然后让 Grails 解析该依赖关系并将其提供给应用程序。所以现在我们在 BuildConfig.groovy
中添加所有 deps。
使用 install-plugin
的旧方法过于简单,但现在通过 BuildConfig.groovy
中的依赖项解析 DSL,我们可以指定依赖项的范围,指定排除依赖项的依赖项(例如,如果插件 X 依赖于插件(或 jar)Y,但 Y 只是可选的或者会导致问题,您可以只安装 X 并排除 Y),并且通常对过程有更多的控制。
但是我们使用插件来发布插件,这让事情变得有点困惑。该功能最初位于 Grails 核心中,但许多不属于核心的功能被作为插件移除。这可以追溯到 Quartz 插件,后来是 Hibernate 和 Tomcat,最近是脚手架插件。最初“maven-publisher”插件用于发布插件,但随着更多功能的添加,名称发生了更改,以确保人们不会混淆它只适用于 Maven。
因此,要发布插件,我们需要“安装” http://grails.org/plugin/release取代 maven-publisher 插件的插件。您可以在 2.2.x 及更早版本中使用 install-plugin
脚本,但您应该改掉使用 install-plugin
和 uninstall-plugin< 的习惯
因为它们在 2.3 中消失了。
Grails 可以使用多个 Maven 兼容的存储库来解决插件和 jar 依赖关系。 Maven Central (mavenCentral()
) 通常拥有我们需要的所有 jar,但有些位于其他存储库中。 Grails 插件发布到 http://repo.grails.org/ (你可以在 http://repo.grails.org/grails/plugins/org/grails/plugins/ 看到它们)但同样,你也可以从其他存储库获取插件。当 Maven 用于解析依赖项时,它会缓存在 $HOME/.m2/repository/
中(这是 mavenLocal()
),因此您只需下载每个版本一次.
来自 release
插件的 maven-install
脚本构建插件 zip 并生成关联的元数据文件,并将所有内容复制到 $HOME 中的正确位置/.m2/repository/
之后,依赖项解析器无法知道这些文件是否存在,因为它们是从“真实”存储库下载并缓存在那里,或者通过脚本放置在那里。但这并不重要 - 如果文件在那里,它们就可用。因此,一旦您在版本 0.42 的“foo”插件上运行 maven-install
,您就可以在应用程序的 BuildConfig.groovy 中添加它的依赖项:
plugins {
runtime ':foo:0.42'
...
}
并且它将从本地缓存中解析,就像已正式发布一样。
发布插件的文档中提供了更多信息:http://grails-plugins.github.io/grails-release/docs/manual/
关于grails - "grails maven-install"与 "grails install-plugin maven-publisher",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22817046/