Де розмістити конфігурацію Gradle (тобто облікові дані), яку не слід вводити?


155

Я намагаюся розгорнути побудований в Gradle артефакт до репосту Maven, і мені потрібно вказати дані для цього. Наразі це добре працює:

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

Але мені не подобається зберігати облікові дані у контролі джерел. З Maven я б визначив конфігурацію сервера та призначив облікові дані в моєму ~/.m2/settings.xml. Як зробити щось подібне з Gradle?


3
Ви знаєте, що використання admin123 як пароля погано з точки зору безпеки, правда;)
jwatkins

Відповіді:


228

~ / .gradle / gradle.properties :

mavenUser=admin
mavenPassword=admin123

build.gradle :

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

2
Чи gradle.propertiesне повинні бути зареєстровані в VCS?
theblang

24
Не той, що знаходиться в будинку користувача Gradle (див. Шлях вище).
Peter Niederwieser

Для деяких версій граделів ... Використовуйте mavenPass замість mavenPassword
Rodrigo

2
Я раджу передавати властивості проекту у такий спосіб аутентифікації (userName: project.properties.mavenUser, пароль: project.properties.mavenPassword). Ця збірка не вийде з ладу, якщо не вказано жодних властивостей mavenUser / Password.
Дмитро

Мені довелося зробити те саме, але використовувати дві різні змінні середовища: SONATYPE_NEXUS_USERNAME & SONATYPE_NEXUS_PASSWORD
Snicolas

94

Перша відповідь все ще справедлива, але API змінився в минулому. Оскільки моя редакція там не була прийнята, я розміщую її як окрему відповідь.

Метод authentication()використовується лише для надання методу аутентифікації (наприклад, Basic), але не будь-яких облікових даних.

Ви також не повинні використовувати його, оскільки він надрукує звичайні дані про помилки!

Це його, як має виглядати у вашому build.gradle

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

У gradle.propertiesвашому домі користувача dir put:

mavenUser=admin
mavenPassword=admin123

Також переконайтесь, що файл GRADLE_USER_HOMEвстановлених в ~/.gradleіншому випадку властивостей не буде вирішено.

Дивитися також:

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

і

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


Чи можете ви уточнити, як це використовуватиме ОП? тобто де він би сидів у просторі імен uploadArchives {сховища {mavenDeployer {
Matt C

Вибачте, але я не отримую вашого запитання
запитання

4
ОП використовує автентифікацію в просторі імен uploadArchives> сховища> mavenDeployer> сховище> автентифікація. Вони все одно хочуть використовувати uploadArchives, я припускаю, то як би виглядала конфігурація збірки ОП із застосованим рішенням? Чи потрібно їм видалити аутентифікацію, і вона спрацює?
Метт

Насправді я не можу вам сказати, оскільки я ніколи не використовував простір імен mavenDeployer. Uploadarchives все ще є дійсним завданням, але облікові дані для цього завдання налаштовані в просторі імен Maven.
опитувальник

Ця відповідь несумісна із запитанням. Він використовує maven-publishплагін, тоді як питання використовує mavenплагін.
Chry Cheng

16

Ви також можете надати змінні в командному рядку за допомогою -PmavenUser=user -PmavenPassword=password.

Це може бути корисно, якщо ви не можете використовувати файл gradle.properties з певних причин. Наприклад, на сервері збирання ми використовуємо Gradle з -gможливістю, так що кожен план збірки має свій власний GRADLE_HOME.


16

Якщо у вас є специфічні для користувача дані (тобто кожен розробник може мати різні ім’я користувача / пароль), я б рекомендував використовувати плагін gradle-properties-plugin .

  1. Введіть параметри за замовчуванням gradle.properties
  2. Кожен розробник переорієнтовує на gradle-local.properties(це має бути ігноровано git).

Це краще, ніж перевизначати використання, $USER_HOME/.gradle/gradle.propertiesоскільки різні проекти можуть мати однакові назви властивостей.


Чи можете ви додати повний робочий MWE. Як включити плагін в build.gradle. Як використовувати облікові дані в uploadArchivesконфігурації?
коппор

@koppor Не впевнений , якщо це по- , як і раніше працює , але я використав його в моєму проекті з відкритим вихідним кодом - github.com/krishnaraj/oneclipboard/blob/master/build.gradle
Krishnaraj

7

Ви можете помістити облікові дані у файл властивостей і прочитати їх, використовуючи щось подібне:

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

Інший підхід - визначити змінні середовища на рівні ОС та прочитати їх, використовуючи:

System.getenv()['YOUR_ENV_VARIABLE']

2

Для тих із вас, хто працює на MacOS і не люблять залишати свій пароль чітким текстом на вашій машині, ви можете використовувати інструмент брелка для зберігання облікових даних і потім ввести його у збірку. Кредити йдуть Віктору Ерікссону. https://pilloxa.gitlab.io/posts/safer-passwords-in-gradle/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.