3

我正在使用 Grails 2.4.1 和Grails Release 插件版本 3.0.1。

我有一个 Sonatype nexus 存储库 (v2.3.1-01) 设置,它被其他几个项目使用,没有问题。

我正在尝试创建一个新插件,我想通过 nexus 中的 SNAPSHOT 存储库(稍后通过我们的 Releases 存储库)分发它。

在我的 ${projectName}GrailsPlugin.groovy 文件中,我有:

def groupId ="my-department-grails-plugins"
def version = "0.1-SNAPSHOT"

在我的 application.properties 文件中,我有:

app.name=MyPluginNameForGrails

在我的 BuildConfig.groovy 中,我有:

grails.project.repos.newsnapshots.url = "http://internal.server.address/nexus/service/local/repositories/snapshots"
grails.project.repos.newsnapshots.username = "username"
grails.project.repos.newsnapshots.password = "password"

我正在尝试使用以下命令开始:

发布插件 --snapshot --repository=newsnapshots --stacktrace

构建成功一切看起来都很好,直到它尝试进入 nexus 并且我得到:

使用 grails.project.repos.newsnapshots 中配置的用户名和密码 ....Error | 无法发布插件:部署工件'ald-grails-plugins:my-plugin-name-for-grails:zip'时出错:部署工件时出错:无法传输文件: http://internal.server.address/nexus/content /groups/public/my-department-grails-plugins/my-plugin-name-for-grails/0.1-SNAPSHOT/my-plugin-name-for-grails-0.1-20140815.191240-1.zip。返回码是:400

我发现了一个相关的 StackOverflow 问题,该问题似乎相关,但他们描述的导致 400 的条件都不存在。

我还发现了 Sonatype Nexus 的文章,它描述了 400 的可能原因,而那些似乎也不是。

如果您注意到我指向的存储库,它直接指向存储库,但是在错误消息中它列出了组的路径。我认为这可能在某种程度上相关,但如果是这样的话......我不确定如何修复它,因为这似乎发生在 Releases Plugin 内部。

我还应该补充一点,我已经从 GrailsPlugin.groovy 文件中删除了 -SNAPSHOT,并将目标存储库更改为我们的 RELEASES 存储库,结果完全相同。

4

2 回答 2

3

我的问题是由于在我的 .m2/settings.xml 文件中定义的镜像(感谢Jeff Beck的评论导致了解决方案!)。这导致到存储库的 POST 被重定向到不允许上传工件的公共 GROUP。

还有一些其他次要原因导致了我的故障排除问题:

  1. 上传到 SNAPSHOT 存储库时,您的版本号必须是 x-SNAPSHOT 模式,其中 x 可以是任何东西(?)。
  2. 使用 Nexus ReST API 时,您无法上传到 SNAPSHOT 存储库。这实际上并没有最终影响我的具体解决方案,但对于可能遇到此问题的其他人来说值得注意。
  3. 在上传到 NON-SNAPSHOT 存储库时,您的版本号不能是 x-SNAPSHOT 模式。
于 2014-08-18T17:43:39.270 回答
0

给定 .m2 目录中的镜像设置,grails 发布插件将在尝试部署 xif 镜像匹配您要部署到的位置时遇到问题。您可以删除镜像设置或将其更改为与您的目标存储库不匹配。查看这些 jiras 了解更多信息:

于 2014-08-20T02:40:47.417 回答