grails - 仅使用HTTP服务器创建Grails存储库?

标签 grails plugins grails-plugin

我有一些第三方插件不公开。我想创建一个本地存储库,以便我和我的同事可以轻松安装这些插件。我有一台已经安装了nginx的服务器。因此,我想尽可能使用它。也就是说,我不希望安装其他Web服务器(例如Tomcat)来运行grails.org Web界面(如文档中“Your own plugin portal”所示)。

基于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。

最佳答案

来自irc.freenode.org上#grails的cdeszaq使我想到了以下解决方案:

无需使用“grailsRepo”类型的存储库布局。它是无证的,显然效果不好。而是使用Maven repository layout

假设您在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

在您的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应用程序中。

关于grails - 仅使用HTTP服务器创建Grails存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11352014/

相关文章:

grails - Grails 3(3.1.10)MultipartResolver

java - Grails 渲染 PDF 插件返回 NullPointerException

unit-testing - 为什么即使使用 Spocks 的 Mock() 模拟了底层 Controller ,此方法仍返回 null?

php - 适用于 WordPress 的 Cat + 标签过滤器插件 : Checkboxes not being saved

javascript - Grails ui-performance 插件无法与 CKEditor 一起使用

unit-testing - 在 Grails 单元测试中模拟静态 get gorm 方法

grails - 如何间接引用 grails GSP 模型变量,例如通过 .get(...)

performance - Grails 应用程序分析和性能调整

plugins - Vim:用我自己的表达式包装插件映射

reflection - MEF:加载具有不同属性的部件(插件)