使用Gradle将.jar发布到私有maven

时间:2016-04-05 17:06:25

标签: java maven grails gradle

我正在努力将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;
    }
}

1 个答案:

答案 0 :(得分:1)

这就是我们如何使用凭证处理发布到maven repo:

Closer

更多细节可以在这里找到: https://docs.gradle.org/current/userguide/maven_plugin.html