我有一些公开无法使用的第三方插件。我想创建一个本地存储库,以便我和我的同事可以轻松地安装这些插件。我有一台已经安装了nginx的服务器。所以我想尽可能使用它。也就是说,我并不热衷于安装像Tomcat这样的其他Web服务器来运行类似grails.org web界面的东西(正如文档在“Your own plugin portal”中所建议的那样)。
基于grailsRepo()函数和getPluginList(),我在我的网络服务器上创建了一个“grails”目录,如下所示:
/grails
- /.plugin-meta
- /plugins-list.xml
- /grails-my-plugin
- /tags
- /RELEASE_1_0_123
- /grails-my-plugin-1.0.123.zip
插件的名称为“my-plugin”,插件的版本号为1.0.123。
我的plugins-list.xml是这样的:
<plugins revision="1">
<plugin latest-release="1.0.123" name="my-plugin">
<release tag="RELEASE_1_0_123" type="svn" version="1.0.123">
<title>MyPlugin</title>
<author>No Author</author>
<authoremail>no@email</authoremail>
<description>An example plugin.</description>
<file>http://mydev.example.com/grails/grails-my-plugin/tags/RELEASE_1_0_123/grails-my-plugin-1.0.123.zip</file>
</release>
</plugin>
</plugins>
将存储库配置为详细信息,我创建了一个新的Grails应用程序(grails create-app test-app
)并调整了grails-app/conf/BuildConfig.groovy
以包含以下配置:
repositories {
grailsRepo("http://mydev.example.com/grails", "myDevRepo")
}
每当我尝试将“my-plugin”插件安装到此Grails应用程序时,我在我的Web服务器上看到了一个请求,并且Grails报告它尝试从我的存储库下载,如下所示:
==== myDevRepo: tried
-- artifact org.grails.plugins#my-plugin;latest.integration!my-plugin.zip:
http://mydev.example.com/grails/grails-my-plugin/tags/LATEST_RELEASE/grails-my-plugin-[revision].zip
在我看来,Grails并没有尝试阅读我为我的存储库创建的.plugin-meta/plugins-list.xml
文件。我需要做什么才能使此存储库与本地Grails应用程序的最小配置一起工作?
注意:我使用的是Grails 1.3.7。
答案 0 :(得分:1)
cdeszaq让我得到了以下解决方案:
忘记使用“grailsRepo”类型的存储库布局。它可悲地没有记录,显然效果不佳。相反,请使用Maven repository layout。
假设你有一个名为“foo”的插件,版本为1.0.5,它被打包成一个名为“foo-1.0.5.zip”的zip文件。要创建基于HTTP的存储库,我们执行以下操作:
首先,在Web服务器上创建一个目录结构:
/grails-maven
-/org
-/grails
-/plugins
-/foo
-/1.0.5
将您的“foo-1.0.5.zip”文件以及MD5总和文件(md5sum -b foo-1.0.5.zip > foo-1.0.5.zip.md5
)放入此树的最深层目录中。因此,您将拥有以下网址:
http://example.com/grails-maven/org/grails/plugins/foo/1.0.5/foo-1.0.5.zip
http://example.com/grails-maven/org/grails/plugins/foo/1.0.5/foo-1.0.5.zip.md5
为Web服务器配置中的grails-maven
目录启用目录索引输出。对于nginx,以下配置将起作用:
server {
location ^~ /grails-maven {
autoindex on;
}
}
最后,在Grails应用的BuildConfig.groovy
中启用存储库:
repositories {
mavenRepo("http://example.com/grails-maven/")
}
完成上述操作后,您现在可以grails install-plugin foo
并将插件安装到您的Grails应用中。
答案 1 :(得分:0)
对你的任务不是真正的答案,它可能有帮助...
我们不使用servre作为内部存储库,而是使用我们通过svn分发的平面文件夹。
如果您只将您的存储库指定为
,这非常有用repositories {
flatDir name:'myRepo', dirs:'/path/to/repo'
}
但似乎grails list-plugin
不起作用。 Grails 1.3.7甚至似乎都没有尝试解析plugins-list.xml文件。
如果您将插件作为名为[plugin]-[version].zip
和 [grails]-[plugin]-[version].zip
的zip文件删除,Grails会在您执行
grails install-plugin [plugin]
您不必以这种方式指定完整路径。不要问我为什么要丢两份 - 这对我有用: - (