Dan
Dan

Reputation: 3182

Can I add a custom repository to gradle.properties?

I'd like to be able to define a repository in settings (ideally user gradle.properties)

The end goal is something like this:

repositories {
    mavenCentral() // Can't/don't want to use this
    nexusCentral() // Can use these - on network Nexus server
    nexusSnapshot()
}

How would I go about doing this? Again, this would go in the user-level gradle.properties file ideally, so we don't have to reference it in every single module.

This is just a plain maven style artifact repository provided by Maven, the manual way would be:

maven {
        url "http://path/to/nexus"
    }

One other requirement is the use of the "publish" task, which has credentials defined for a repository (that Jenkins uses to publish the module):

publishing {
...
maven {
            url "http://path/to/nexus"
            // Jenkins provides these as -P Gradle parameters.
            credentials {
                username = "${uploaderUser}"
                password = "${uploaderPassword}"
            }
        }

These credentials would not be known to regular users, but would ideally be configured in Jenkin's gradle.properties. We wouldn't want users builds to fail because they can't resolve the credentials - they would never even use the "publish" task.

Upvotes: 1

Views: 5618

Answers (3)

Adil B
Adil B

Reputation: 144

Solved this issue by replacing jcenter() in Project/andoird/build.gradle with maven { url 'http://nexusUrl' } under buildscript and allprojects:

buildscript {
    repositories {
        google()
        maven { url 'http://nexusUrl' }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
    }
}

allprojects {
    repositories {
        google()
        maven { url 'http://nexusUrl' }
    }
}

and in fluttersdk/packages/flutter_tools/gradle/flutter.gradle replaced jcenter with maven { url 'http://nexusUrl' } under buildscript:

buildscript {
    repositories {
        google()
        maven { url 'nexusUrl' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
    }
}

Upvotes: 0

Gabriele Mariotti
Gabriele Mariotti

Reputation: 363677

You can use somenthing like this:

   maven {
            credentials {
                username getCredentialsMavenUsername()
                password getCredentialsMavenPassword()
            }
            url 'xxxxx'
   }

/**
 * Returns the credential username used by Maven repository
 * Set this value in your ~/.gradle/gradle.properties with CREDENTIALS_USERNAME key
 * @return
 */
def getCredentialsMavenUsername() {
    return hasProperty('CREDENTIALS_USERNAME') ? CREDENTIALS_USERNAME : ""
}

/**
 * Returns the credential password used by Maven repository
 * Set this value in your ~/.gradle/gradle.properties with CREDENTIALS_PASSWORD key
 * @return
 */
def getCredentialsMavenPassword() {
    return hasProperty('CREDENTIALS_PASSWORD') ? CREDENTIALS_PASSWORD : ""
}

If the user hasn't the credentials the script doesn't fail.

Upvotes: 3

JB Nizet
JB Nizet

Reputation: 691685

Not sure if that answers your question, but you can put this in the gradle.properties file:

nexusUrl=http://path/to/nexus

and do this in the build.gradle:

maven {
    url project.property(nexusUrl)
}

EDIT:

regarding your credentials, all you should need is something like

if (project.hasProperty('uploaderUser') && project.hasProperty('uploaderPassword')) {
    credentials {
        username = project.property('uploaderUser')
        password = project.property('uploaderPassword')
    }
}

Upvotes: 3

Related Questions