Publishing .jar to private maven with Gradle
<p>I am working on publishing a Grails plugin (ultimately a .jar) to a private maven repo is resulting in the following error.  I have confirmed multiple times the credentials are valid.</p>

<p>It seems as if the credentials aren't being sent at all (<strong>Unauthorized 401</strong>):</p>

<pre><code>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'.
&gt; Failed to publish publication 'mavenJava' to repository 'blah'
   &gt; 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
</code></pre>

<p>In my build.gradle I have the following (only relevant parts):</p>

<pre><code>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"]
}
</code></pre>

<p>Then I have this in my settings.xml (~/.m2/settings.xml)</p>

<pre><code>&lt;settings&gt;
  &lt;servers&gt;
    &lt;server&gt;
      &lt;id&gt;blah&lt;/id&gt;
      &lt;username&gt;un&lt;/username&gt;
      &lt;password&gt;pass&lt;/password&gt;
    &lt;/server&gt;
  &lt;/servers&gt;
&lt;/settings&gt;
</code></pre>

<p>Any idea what I could be missing?</p>

<p><strong>EDIT 1</strong></p>

<p>I removed settings.xml to debug for now.  I am using:</p>

<pre><code>repositories {
        maven {
            name "snapshots"
            url "http://maven.blah.com/"
            credentials {
                username 'blahUser'
                password 'blahPassword'
            }
            authentication {
                basic(BasicAuthentication)
                digest(DigestAuthentication)
            }
        }
}
</code></pre>

<p>And with verbose output I see:</p>

<pre><code>Using Credentials [username: blahUser] for authenticating against 'null:-1' using Digest
Using Credentials [username: blahUser] for authenticating against 'null:-1' using Basic
</code></pre>

<p>Here is the rest of the relevant log:</p>

<pre><code>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: {}-&gt;http://maven.blah.com][total kept alive: 0; route allocated: 0 of 5; total allocated: 0 of 10]
Connection leased: [id: 0][route: {}-&gt;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: {}-&gt;http://maven.blah.com] can be kept alive indefinitely
Connection released: [id: 0][route: {}-&gt;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: {}-&gt;http://maven.blah.com][total kept alive: 1; route allocated: 1 of 5; total allocated: 1 of 10]
Connection leased: [id: 0][route: {}-&gt;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
</code></pre>

<p><strong>EDIT 2</strong></p>

<p>Tried just curling the request...doesn't seem to work:</p>

<pre><code>$ 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
&lt;html&gt;
&lt;head&gt;&lt;title&gt;401 Authorization Required&lt;/title&gt;&lt;/head&gt;
&lt;body bgcolor="white"&gt;
&lt;center&gt;&lt;h1&gt;401 Authorization Required&lt;/h1&gt;&lt;/center&gt;
&lt;hr&gt;&lt;center&gt;nginx/1.6.3&lt;/center&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>I found our maven server's nginx configuration.  Not sure if this is configured correctly.  Does this look okay?:</p>

<pre><code># 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;
    }
}
</code></pre>