I should point out that I renamed the github repo for this (since I referenced it numerous times in these emails). The new repo (name) is https://github.com/sebersole/gradle-maven-publish-auth

If anyone happened to be using it previously, the plugin name changed as well. From

apply plugin : 'uploadAuth'

to:

apply plugin : 'maven-publish-auth'


On Tue 16 Apr 2013 02:51:13 PM CDT, Steve Ebersole wrote:
This is similar to what Luke sent me as well.

The problem is that this needs to be an ext property (iiuc), but I do
not understand how to access that from Java.  I keep getting errors like:
org.gradle.api.internal.artifacts.repositories.DefaultMavenArtifactRepository_Decorated
cannot be cast to org.gradle.api.plugins.ExtraPropertiesExtension


On Tue 16 Apr 2013 12:31:50 PM CDT, Daz DeBoer wrote:



On 16 April 2013 08:07, Steve Ebersole <st...@hibernate.org
<mailto:st...@hibernate.org>> wrote:

    Ah, right. The problem is that settings.xml does not contain urls.
    It matches based on a "server id" from the pom.

    I leveraged that in the current code by naming the repos in the
    Gradle build file. E.g.:

       uploadArchives {
          repositories.mavenDeployer {
             ...
             repository(id: "jboss-releases-repository", url:

"https://repository.jboss.org/__nexus/service/local/staging/__deploy/maven2/


<https://repository.jboss.org/nexus/service/local/staging/deploy/maven2/>")

             snapshotRepository(id: "jboss-snapshots-repository", url:

"https://repository.jboss.org/__nexus/content/repositories/__snapshots

<https://repository.jboss.org/nexus/content/repositories/snapshots>")
          }
       }

    As you can see, I use the id element of those repository
    definitions to be the link.

    However, there does not see to be any such notion on the new API
    (MavenArtifactRepository does not expose id).


    So, as far as I can tell I will not be able port this
    functionality to the new publishing API.  Unless I am missing
    something (very possible).



OK, so the build script needs to declare the repository in some way
such that your plugin can match it with the maven settings Id?

In that case, your best bet would be to force the user to declare the
repository "name" to match the value in settings.xml. Maybe something
like:
1) in the build script:

publishing {
    repositories {
        maven {
            name "jboss-releases-repository"
        }
    }
}

2) In your plugin, you have would configure a repository with:

def configureRepository(MavenArtifactRepository rep) {
    def cred = lookupCredsForRepName(rep.name <http://rep.name>)
    rep.credentials {
        username = cred.username
        password = cred.password
    }
}

How to apply this code to each repository in your plugin? You have 2
options.
On the publishing extension:
publishing { // This will be lazily evaluated when the extension is
confiured
    repositories.withType(MavenArtifactRepository) { rep ->
        configureRepository(rep)
    }
}

OR on each PublishToMavenRepository task:

project.tasks.withType(PublishToMavenRepository) { publishTask ->
     configureRepository(publishTask.repository)
}

The downside to the second is that you'll be configuring the same
repository multiple times if it participates in multiple tasks.

(I haven't actually tested this code, but I believe that in principle
these approaches will work).

Hope that helps. Sorry I wasn't clearer with specific examples earlier.

cheers
Daz



    On Tue 16 Apr 2013 08:17:51 AM CDT, Steve Ebersole wrote:


        In rough that works:


        // This is the kind of malarkey this plugin tries to address
        ~~~~~~
        if ( ! hasProperty( "JBOSS_REPO_USER" ) ) {
        JBOSS_REPO_USER = "";
        }
        if ( ! hasProperty( "JBOSS_REPO_PASS" ) ) {
        JBOSS_REPO_PASS = "";
        }
        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~__~~~~~~~~~

        publishing {
        repositories {
        maven {
        if ( project.version.endsWith( "SNAPSHOT" ) ) {
        url snapshot-url
        }
        else {
        url production-url
        }

        credentials {
        username = JBOSS_REPO_USER
        password = JBOSS_REPO_PASS
        }
        }
        }
        }

        Now I just need to figure out:
        1) how to apply this programatically
        2) in such a way that does not trigger the lazy init of the
        publishing
        block.

        As far as (2), the way I did this in the initial plugin code
        was to
        use an Action that I applied as a doFirst to all
        'project.getTasks().withType( Upload.class )'. I think something
        similar could be done against all 'project.getTasks().withType(
        PublishToMavenRepository.class )'. Do you see a better option?

        Btw, the code is at
        https://github.com/sebersole/__gradle-upload-auth-plugin
        <https://github.com/sebersole/gradle-upload-auth-plugin>. The
        plugin
        class which drives the processing is

org.hibernate.build.gradle.__upload.__UploadAuthenticationManager.
        The
        Action class is
        org.hibernate.build.gradle.__upload.AuthenticationHandler



        On Tue 16 Apr 2013 07:44:20 AM CDT, Steve Ebersole wrote:



            On Tue 16 Apr 2013 07:38:38 AM CDT, Luke Daley wrote:





                    Look, I just want to know what I need to do in
                    order to apply a set
                    of credentials to a maven repository to be used
                    for upload. Is that
                    possible? If so how?




                I'm having a lot of trouble understanding exactly what
                you are asking
                for.

                What have you tried? What didn't work (in concrete
                terms)? What was
                the stack trace?

                In what way does this not work for you:

                publishing {
                publications {
                mavenJava(MavenPublication) {
                from components.java
                }
                }
                repositories {
                maven {
                url …
                credentials {
                username = "foo"
                password = "bar"
                }
                }
                }
                }




            Finally! :)

            I have not tried anything, because I had no idea what to
            try. The
            documentation makes no (obvious) mention that I can apply
            credentials
            in this script block.

            I will try that now.



------------------------------__------------------------------__---------

    To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/__manage_email
    <http://xircles.codehaus.org/manage_email>





--
Darrell (Daz) DeBoer
Principal Engineer, Gradleware
http://www.gradleware.com <http://www.gradleware.com/>
Join us at the Gradle Summit 2013, June 13th and 14th in Santa Clara,
CA: http://www.gradlesummit.com <http://www.gradlesummit.com/>

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

   http://xircles.codehaus.org/manage_email


Reply via email to