Di mana harus meletakkan konfigurasi Gradle (mis. Kredensial) yang tidak boleh dilakukan?


155

Saya mencoba untuk menyebarkan artefak Gradle-built ke repo Maven, dan saya perlu menentukan kredensial untuk itu. Ini berfungsi dengan baik untuk saat ini:

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

Tapi saya tidak suka harus menyimpan kredensial di kontrol sumber. Dengan Maven, saya akan mendefinisikan konfigurasi server, dan menetapkan kredensial di server saya ~/.m2/settings.xml. Bagaimana saya melakukan sesuatu yang mirip dengan Gradle?


3
Anda tahu bahwa menggunakan admin123 sebagai kata sandi buruk dari sudut pandang keamanan, benar;)
jwatkins

Jawaban:


228

~ / .gradle / gradle.properties :

mavenUser=admin
mavenPassword=admin123

build.gradle :

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

2
Seharusnya gradle.propertiestidak masuk ke VCS?
theblang

24
Bukan yang ada di rumah pengguna Gradle (lihat jalur di atas).
Peter Niederwieser

Untuk beberapa versi kelas ... Gunakan mavenPass sebagai ganti mavenPassword
Rodrigo

2
Saya menyarankan meneruskan properti proyek sebagai berikut otentikasi (userName: project.properties.mavenUser, kata sandi: project.properties.mavenPassword) Ini tidak akan gagal membangun ketika tidak ada properti mavenUser / Kata Sandi yang ditentukan.
Dmitry

Saya harus melakukan hal yang sama tetapi menggunakan 2 variabel lingkungan yang berbeda: SONATYPE_NEXUS_USERNAME & SONATYPE_NEXUS_PASSWORD
Snicolas

94

Jawaban pertama masih valid, tetapi API telah berubah di masa lalu. Karena hasil edit saya tidak ada, saya mempostingnya sebagai jawaban terpisah.

Metode authentication()ini hanya digunakan untuk menyediakan metode otentikasi (misalnya Dasar) tetapi tidak untuk kredensial.

Anda juga tidak boleh menggunakannya karena itu mencetak kredensial pada kegagalan!

Ini bagaimana seharusnya terlihat seperti di Anda build.gradle

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

Di gradle.propertiesdalam direktori home user Anda:

mavenUser=admin
mavenPassword=admin123

Juga pastikan bahwa GRADLE_USER_HOMEdiatur ke ~/.gradlefile properti di sana tidak akan diselesaikan.

Lihat juga:

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

dan

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


Bisakah Anda mengklarifikasi bagaimana ini akan digunakan oleh OP? yaitu di mana ia akan duduk di namespace uploadArchives {repositori {mavenDeployer {
Matt C

Maaf, tetapi saya tidak mendapatkan pertanyaan Anda
kuesioner

4
OP menggunakan otentikasi dalam namespace uploadArchives> repositori> mavenDeployer> repositori> otentikasi. Mereka masih ingin menggunakan uploadArchives yang saya asumsikan, jadi bagaimana konfigurasi build OP terlihat dengan solusi Anda diterapkan? Apakah mereka perlu menghapus otentikasi, dan itu akan berfungsi?
Matt C

Sebenarnya saya tidak bisa memberi tahu Anda karena saya tidak pernah menggunakan namespace mavenDeployer. Uploadarchives masih merupakan tugas yang valid tetapi kredensial untuk tugas tersebut dikonfigurasi dalam maven namespace.
kuesioner

Jawaban ini tidak sesuai dengan pertanyaan. Itu menggunakan maven-publishplugin sementara pertanyaannya menggunakan mavenplugin.
Chry Cheng

16

Anda juga bisa menyediakan variabel pada baris perintah dengan -PmavenUser=user -PmavenPassword=password.

Ini mungkin berguna Anda tidak dapat menggunakan file properti gradle.prop untuk beberapa alasan. Misal pada server build, kami menggunakan Gradle dengan -gopsi sehingga setiap paket build memiliki sendiri GRADLE_HOME.


16

Jika Anda memiliki kredensial khusus pengguna (yaitu setiap pengembang mungkin memiliki nama pengguna / kata sandi berbeda) maka saya akan merekomendasikan menggunakan gradle-properties-plugin .

  1. Masukkan default gradle.properties
  2. Setiap pengembang mengabaikannya gradle-local.properties(ini harus diabaikan git).

Ini lebih baik daripada mengganti menggunakan $USER_HOME/.gradle/gradle.propertieskarena proyek yang berbeda mungkin memiliki nama properti yang sama.


Bisakah Anda menambahkan MWE yang berfungsi penuh. Cara memasukkan plugin dalam build.gradle. Bagaimana cara menggunakan kredensial dalam uploadArchiveskonfigurasi?
koppor

@koppor Tidak yakin apakah ini masih berfungsi tetapi saya telah menggunakannya dalam proyek open source saya - github.com/krishnaraj/oneclipboard/blob/master/build.gradle
Krishnaraj

7

Anda bisa meletakkan kredensial dalam file properti dan membacanya menggunakan sesuatu seperti ini:

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

Pendekatan lain adalah mendefinisikan variabel lingkungan di tingkat OS dan membacanya menggunakan:

System.getenv()['YOUR_ENV_VARIABLE']

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.