3

我有一些不公开的第三方插件。我想创建一个本地存储库,以便我和我的同事可以轻松安装这些插件。我有一台已经安装了 nginx 的服务器。因此,如果可能的话,我想使用它。也就是说,我并不热衷于安装另一个像 Tomcat 这样的 Web 服务器来运行像 grails.org Web 界面这样的东西(正如“您自己的插件门户”中的文档所建议的那样)。

基于grailsRepo()函数和getPluginList(),我在我的 Web 服务器上创建了一个“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。

4

2 回答 2

1

来自 irc.freenode.org 上#grails 的 cdeszaq 引导我找到以下解决方案:

忘记使用“grailsRepo”类型的存储库布局。这是可悲的无证,显然不能很好地工作。相反,请使用Maven 存储库布局

假设您在 1.0.5 版本中有一个名为“foo”的插件,它被打包成一个名为“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) 放入该树的最深目录中。因此,您将拥有以下 URL:

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

grails-maven为您的 Web 服务器配置中的目录启用目录索引输出。在 nginx 的情况下,以下配置将起作用:

server {
  location ^~ /grails-maven {
    autoindex on;
  }
}

最后,在您的 Grails 应用程序中启用存储库BuildConfig.groovy

repositories {
  mavenRepo("http://example.com/grails-maven/")
}

完成上述操作后,您现在grails install-plugin foo可以将插件安装到您的 Grails 应用程序中。

于 2012-08-16T18:55:47.650 回答
0

不是对您的追求的真正答案,它可能会有所帮助...

我们不使用 servre 作为内部存储库,而是通过 svn 分发的平面文件夹。

如果您只是将存储库指定为

repositories {
  flatDir name:'myRepo', dirs:'/path/to/repo'
}

但似乎 agrails list-plugin行不通。Grails 1.3.7 甚至似乎都没有尝试解析 plugins-list.xml 文件。

如果您将插件作为名为[plugin]-[version].zip and [grails]-[plugin]-[version].zip的 zip 文件删除,grails 将在您执行

grails install-plugin [plugin]

您不必以这种方式指定完整路径。不要问我为什么要丢两份——它对我有用:-(

于 2012-07-06T19:48:10.813 回答