我使用的是Grails 2.4.1 &Grails发布插件3.0.1.
我有一个Sonatype nexus存储库(v2.3.1-01)设置,它被其他几个项目使用,没有问题。
我正在尝试创建一个新的插件,我想通过nexus的快照存储库(稍后通过我们的发布存储库)分发。
在我的${projectName} grailplugin。
def groupId ="my-department-grails-plugins"
def version = "0.1-SNAPSHOT"
在我的应用程序。属性文件:
app.name=MyPluginNameForGrails
在我的BuildConfig。
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"
我试着用下面的命令开始:
publish-plugin——snapshot——repository=newsnapshots——stacktrace
构建成功,一切看起来都很好,直到它试图推动nexus,我得到:
使用配置的用户名和密码grails.project.repos.newsnapshots……错误|发布失败plugin:部署工件出错' old -grails-plugins:my-plugin-name-for-grails:zip':部署错误工件:传输文件失败:http://internal.server.address/nexus/content/groups/public/my -部门- grails plugins/my插件名称- - - - - - - grails/0.1 snapshot/my grails -插件名称- - - - - - - - 0.1 - 20140815.191240 - 1. - zip。返回码为:400
我发现了一个相关的StackOverflow问题,似乎与相关,但他们描述的导致400的条件都不存在。
我还发现了Sonatype Nexus的一篇文章,它描述了400's的可能原因,但这些似乎也不是。
如果你注意到我指向的存储库,它直接指向一个存储库,但在错误消息中它列出了一个组的路径。我在想这可能有某种联系,但如果是这样的话…我不确定如何修复它,因为这似乎是发生在内部的释放插件。
我还应该补充一点,我已经从grailplugin中删除了-SNAPSHOT。并将目标存储库更改为我们的release存储库,结果完全相同。
我的问题是由于我的。m2/settings.xml文件中定义了一个镜像(感谢Jeff Beck的评论,导致了分辨率!)。这会导致到存储库的POST被重定向到不允许上传工件的公共组。
还有其他一些次要原因导致了我的故障排除问题:
- 上传到快照存储库时,您的版本号必须模式为x- snapshot,其中x可以是任意值(?)
- 当使用Nexus ReST时,您不能上传快照存储库API。这实际上并没有影响我的具体解决方案,但是值得注意的是,其他人可能会遇到这个问题。
- 上传到非快照存储库时,版本号必须为NOT模式为x-SNAPSHOT。
给定.m2目录中的镜像设置,如果镜像与您要部署的位置匹配,grails发布插件将在尝试部署xx时遇到问题。您可以删除镜像设置或将其更改为不匹配您的目标回购。查看这些jiras获取更多信息:
- GPRELEASE-7
- GPMAVENPUBLISHER-3