Onde colocar a configuração Gradle (ou seja, credenciais) que não devem ser confirmadas?


155

Estou tentando implantar um artefato construído pelo Gradle em um repositório Maven e preciso especificar credenciais para isso. Isso funciona bem por enquanto:

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "http://.../nexus/content/repositories/snapshots/") {
                authentication(userName: "admin", password: "admin123")
            }
        }
    }
}

Mas não gosto de ter que armazenar as credenciais no controle de origem. Com o Maven, eu definiria uma configuração do servidor e atribuiria credenciais no meu ~/.m2/settings.xml. Como faço algo semelhante com Gradle?


3
Você sabe que o uso admin123 como senha é ruim do ponto de vista de segurança, certo;)
jwatkins

Respostas:


228

~ / .gradle / gradle.properties :

mavenUser=admin
mavenPassword=admin123

build.gradle :

...
authentication(userName: mavenUser, password: mavenPassword)

2
gradle.propertiesNão deve fazer check-in no VCS?
theblang

24
Não é o da página inicial do usuário Gradle (veja o caminho acima).
Peter Niederwieser

Para algumas versões do gradles ... Use mavenPass vez de mavenPassword
Rodrigo

2
Eu aconselho a passar as propriedades do projeto da seguinte maneira autenticação (userName: project.properties.mavenUser, senha: project.properties.mavenPassword) Isso não falhará na construção quando nenhuma propriedade mavenUser / Password for especificada.
Dmitry

Eu tive que fazer o mesmo, mas de usar 2 diferentes variáveis de ambiente: SONATYPE_NEXUS_USERNAME & SONATYPE_NEXUS_PASSWORD
Snicolas

94

A primeira resposta ainda é válida, mas a API mudou no passado. Como minha edição não foi aceita, eu a postei como resposta separada.

O método authentication()é usado apenas para fornecer o método de autenticação (por exemplo, Básico), mas não nenhuma credencial.

Você também não deve usá-lo, pois está imprimindo as credenciais sem problemas!

É assim que deve parecer no seu build.gradle

    maven {
        credentials {
            username "$mavenUser"
            password "$mavenPassword"
        }
        url 'https://maven.yourcorp.net/'
   }

Em gradle.propertiesem seu dir dirhome do usuário:

mavenUser=admin
mavenPassword=admin123

Verifique também se o arquivo GRADLE_USER_HOMEestá definido para ~/.gradleo arquivo de propriedades que não será resolvido.

Veja também:

https://docs.gradle.org/current/userguide/build_environment.html

e

https://docs.gradle.org/current/userguide/dependency_management.html (23.6.4.1)


Você poderia esclarecer como isso seria usado pelo OP? ou seja, onde ele estaria no namespace uploadArchives {repositories {mavenDeployer {
Matt C

Desculpe, mas eu não recebo a sua pergunta #
questionaire

4
O OP usa autenticação no espaço de nome uploadArchives> repositories> mavenDeployer> repository> authentication. Eles ainda desejam usar uploadArchives, presumo, então como seria a configuração de compilação do OP com sua solução aplicada? Eles precisam remover a autenticação e isso funcionará?
Matt C

Na verdade, não posso contar, pois nunca usei o espaço de nomes mavenDeployer. Uploadarchives ainda é uma tarefa válida, mas as credenciais para essa tarefa são configuradas no espaço para nome do maven.
questionário

Esta resposta é incompatível com a pergunta. Ele está usando o maven-publishplug - in enquanto a pergunta está usando o mavenplug - in.
Chry Cheng

16

Você também pode fornecer variáveis ​​na linha de comando -PmavenUser=user -PmavenPassword=password.

Pode ser útil que você não possa usar um arquivo gradle.properties por algum motivo. Por exemplo, em um servidor de compilação, estamos usando o Gradle com a -gopção para que cada plano de compilação tenha o seu próprio GRADLE_HOME.


16

Se você tiver credenciais específicas do usuário (ou seja, cada desenvolvedor pode ter nome de usuário / senha diferentes), recomendo o uso do plugin gradle-properties-plugin .

  1. Coloque os padrões em gradle.properties
  2. Cada desenvolvedor substitui por gradle-local.properties(isso deve ser ignorado pelo git).

É melhor do que substituir usando $USER_HOME/.gradle/gradle.propertiesporque projetos diferentes podem ter os mesmos nomes de propriedades.


Você poderia adicionar um MWE completo? Como incluir o plugin no build.gradle. Como usar credenciais na uploadArchivesconfiguração?
koppor

@koppor Não tenho certeza se isso ainda funciona, mas eu o usei no meu projeto de código aberto - github.com/krishnaraj/oneclipboard/blob/master/build.gradle
Krishnaraj

7

Você pode colocar as credenciais em um arquivo de propriedades e lê-lo usando algo como isto:

Properties props = new Properties() 
props.load(new FileInputStream("yourPath/credentials.properties")) 
project.setProperty('props', props)

Outra abordagem é definir variáveis ​​de ambiente no nível do SO e lê-las usando:

System.getenv()['YOUR_ENV_VARIABLE']

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.