2012-07-05 24 views
3

我有一些不公开的第三方插件。我想创建一个本地存储库,以便我和我的同事可以轻松安装这些插件。我有一台已经安装了nginx的服务器。所以我想尽可能使用它。也就是说,我并不热衷于安装像Tomcat这样的其他Web服务器来运行诸如grails.org Web界面之类的东西(正如文档“Your own plugin portal”中所述)。仅使用HTTP服务器创建Grails存储库?

基础上grailsRepo()功能和getPluginList(),我创建了一个“Grails的”目录我的Web服务器上,像这样:

/grails 
- /.plugin-meta 
    - /plugins-list.xml 
- /grails-my-plugin 
    - /tags 
    - /RELEASE_1_0_123 
     - /grails-my-plugin-1.0.123.zip 

当插件被命名为“我的-插件”和的版本号插件是1.0.123。

我的插件-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>[email protected]</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

哪个grails版本? – rdmueller 2012-07-06 19:35:34

+0

我正在使用的Grails版本是1.3.7。 – 2012-07-06 19:39:21

回答

1

cdeszaq从irc.freenode.org上的#grails使我以下解决方案:

忘记使用“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),放入此树最深的目录中。因此,你必须在以下网址:

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

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,Grails将搭载最新版本的zip文件,当你做一个

grails install-plugin [plugin] 

你不必指定完整路径这种方式。为什么我把两份不要问我 - 它只是为我的作品:-(

相关问题