我正在努力将Grails插件(最终是.jar)发布到私有maven repo,导致以下错误。我已多次确认凭证有效。
好像根本没有发送凭据(未经授权的401 ):
Could not transfer artifact com.blah.plugins:blahCommonPlugin:pom:0.1 from/to remote (http://maven.blah.com): Could not write to resource 'com/blah/plugins/blahCommonPlugin/0.1/blahCommonPlugin-0.1.pom'
:publishMavenJavaPublicationToBlahRepository FAILED
:publishMavenJavaPublicationToBlahRepository (Thread[Daemon worker,5,main]) completed. Took 2.788 secs.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':publishMavenJavaPublicationToBlahRepository'.
> Failed to publish publication 'mavenJava' to repository 'blah'
> Failed to deploy artifacts: Could not transfer artifact com.blah.plugins:blahCommonPlugin:jar:0.1 from/to remote (http://maven.blah.com): Could not write to resource 'com/blah/plugins/blahCommonPlugin/0.1/blahCommonPlugin-0.1.jar'
* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.
BUILD FAILED
Total time: 5.634 secs
Stopped 0 compiler daemon(s).
Could not PUT 'http://maven.blah.com/com/blah/plugins/blahCommonPlugin/0.1/blahCommonPlugin-0.1.jar'. Received status code 401 from server: Unauthorized
在我的build.gradle中,我有以下内容(仅限相关部分):
version "0.1"
group "com.blah.plugins"
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
repositories {
maven {
name "blah"
url "http://maven.blah.com"
}
}
}
//Not sure if I need this
grailsPublish {
repo = 'blah'
githubSlug = 'blah/blahCommonPlugin'
title = "blahCommonPlugin"
desc = "blahcommon plugin"
developers = [erikahlswede:"Erik Ahlswede"]
}
然后我在我的settings.xml(〜/ .m2 / settings.xml)
中有这个<settings>
<servers>
<server>
<id>blah</id>
<username>un</username>
<password>pass</password>
</server>
</servers>
</settings>
知道我可能缺少什么吗?
编辑1
我现在删除了settings.xml以进行调试。我正在使用:
repositories {
maven {
name "snapshots"
url "http://maven.blah.com/"
credentials {
username 'blahUser'
password 'blahPassword'
}
authentication {
basic(BasicAuthentication)
digest(DigestAuthentication)
}
}
}
有了详细的输出,我看到了:
Using Credentials [username: blahUser] for authenticating against 'null:-1' using Digest
Using Credentials [username: blahUser] for authenticating against 'null:-1' using Basic
以下是相关日志的其余部分:
Publishing to repository org.gradle.api.internal.artifacts.repositories.DefaultMavenArtifactRepository_Decorated@457d1e38
Using Credentials [username: blahUser] for authenticating against 'null:-1' using Digest
Using Credentials [username: blahUser] for authenticating against 'null:-1' using Basic
Deploying to http://maven.blah.com/
Downloading: com/blah/plugins/blahCommonPlugin/0.1-SNAPSHOT/maven-metadata.xml from repository remote at http://maven.blah.com/
Constructing external resource: http://maven.blah.com/com/blah/plugins/blahCommonPlugin/0.1-SNAPSHOT/maven-metadata.xml
Performing HTTP GET: http://maven.blah.com/com/blah/plugins/blahCommonPlugin/0.1-SNAPSHOT/maven-metadata.xml
Connection request: [route: {}->http://maven.blah.com][total kept alive: 0; route allocated: 0 of 5; total allocated: 0 of 10]
Connection leased: [id: 0][route: {}->http://maven.blah.com][total kept alive: 0; route allocated: 1 of 5; total allocated: 1 of 10]
Connecting to maven.blah.com:80
CookieSpec selected: best-match
Auth cache not set in the context
Target auth state: UNCHALLENGED
Proxy auth state: UNCHALLENGED
Attempt 1 to execute request
Sending request: GET /com/blah/plugins/blahCommonPlugin/0.1-SNAPSHOT/maven-metadata.xml HTTP/1.1
Receiving response: HTTP/1.1 404 Not Found
Connection can be kept alive indefinitely
Connection [id: 0][route: {}->http://maven.blah.com] can be kept alive indefinitely
Connection released: [id: 0][route: {}->http://maven.blah.com][total kept alive: 1; route allocated: 1 of 5; total allocated: 1 of 10]
Resource missing. [HTTP GET: http://maven.blah.com/com/blah/plugins/blahCommonPlugin/0.1-SNAPSHOT/maven-metadata.xml]
Could not find metadata com.blah.plugins:blahCommonPlugin:0.1-SNAPSHOT/maven-metadata.xml in remote (http://maven.blah.com/)
Uploading: com/blah/plugins/blahCommonPlugin/0.1-SNAPSHOT/blahCommonPlugin-0.1-20160405.174228-1.jar to repository remote at http://maven.blah.com/
Attempting to put resource http://maven.blah.com/com/blah/plugins/blahCommonPlugin/0.1-SNAPSHOT/blahCommonPlugin-0.1-20160405.174228-1.jar.
Upload http://maven.blah.com/com/blah/plugins/blahCommonPlugin/0.1-SNAPSHOT/blahCommonPlugin-0.1-20160405.174228-1.jar
Performing HTTP PUT: http://maven.blah.com/com/blah/plugins/blahCommonPlugin/0.1-SNAPSHOT/blahCommonPlugin-0.1-20160405.174228-1.jar
Connection request: [route: {}->http://maven.blah.com][total kept alive: 1; route allocated: 1 of 5; total allocated: 1 of 10]
Connection leased: [id: 0][route: {}->http://maven.blah.com][total kept alive: 0; route allocated: 1 of 5; total allocated: 1 of 10]
Stale connection check
CookieSpec selected: best-match
Auth cache not set in the context
Target auth state: UNCHALLENGED
Proxy auth state: UNCHALLENGED
Attempt 1 to execute request
Sending request: PUT /com/blah/plugins/blahCommonPlugin/0.1-SNAPSHOT/blahCommonPlugin-0.1-20160405.174228-1.jar HTTP/1.1
Receiving response: HTTP/1.1 401 Unauthorized
Connection can be kept alive indefinitely
Authentication required
maven.blah.com:80 requested authentication
Authorization challenge processed
Authentication failed
编辑2
尝试只是卷曲请求......似乎不起作用:
$ curl --basic -u username:password http://maven.blah.com/com/blah/plugins/blahCommonPlugin/test/api-1.0-20160128.114425-1.jar --request PUT --data blahCommonPlugin-0.1-SNAPSHOT.jar
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.6.3</center>
</body>
</html>
我找到了我们的maven服务器的nginx配置。不确定这是否配置正确。这看起来不错吗?:
# Allow only these methods (GET and HEAD are allowed by default)
dav_methods PUT MKCOL;
dav_access user:rw group:rw all:r;
create_full_put_path on;
...
# For all plugins and directories
location / {
# Allow files listing for repositories
autoindex on;
limit_except PUT MKCOL {
# For GET and HEAD request use this file for username/password who have only download permissions from Maven server
auth_basic_user_file /etc/nginx/.htpasswd/downloaders;
}
}
答案 0 :(得分:1)
这就是我们如何使用凭证处理发布到maven repo:
Closer
更多细节可以在这里找到: https://docs.gradle.org/current/userguide/maven_plugin.html