Переменные среды Gradle.Загрузить из файла - PullRequest
0 голосов
/ 24 мая 2018

Я новичок в Gradle.

В настоящее время у меня есть эта задача:

task fooTask {
    doLast {
        exec {
            environment 'FOO_KEY', '1234567' // Load from file here!
            commandLine 'fooScript.sh'
        }
    }
}

fooScript.sh

#!/bin/bash
echo $FOO_KEY

Все работаетотличный.Но у меня есть env.file со всеми необходимыми переменными среды.Этот файл используется в Docker Builder.

env.file

FOO_KEY=1234567

Вопрос: как я могу использовать env.file вместе с Gradle environmentзагрузить все необходимые env.Титулы

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Я также даю свою версию (проверьте, что строка не пустая и не комментарий, также не переопределяйте env var):

file('.env').readLines().each() {
        if (!it.isEmpty() && !it.startsWith("#")) {
            def pos = it.indexOf("=")
            def key = it.substring(0, pos)
            def value = it.substring(pos + 1)

            if (System.getenv(key) == null) {
                environment key, value
            }
    }
}

Но на самом деле, я думаю, что они должны добавить эту функцию в качестве плагина execимущество!В настоящее время довольно часто используется .env файл.

0 голосов
/ 18 августа 2019

Следующий код - единственный, который мне удалось создать, и который удовлетворяет двум наиболее важным требованиям для обеспечения эффективного «импорта файлов стандартной среды UNIX» в Android Studio:

  • Загружает файл, который зависит от типа сборки (по крайней мере: отладка и выпуск)
  • Предоставляет указанные переменные среды в коде Android, фактически не как переменные среды, а как содержимое buildConfigFields.
ext {
    node_env = ""
}

android.applicationVariants.all { variant ->
    if (variant.name == "debug") {
        project.ext.set("node_env", "development")
    } else if (variant.name == "release") {
        project.ext.set("node_env", "production")
    }

    file("." + node_env + '.env').readLines().each() {
        if (!it.isEmpty() && !it.startsWith("#")) {
            def pos = it.indexOf("=")
            def key = it.substring(0, pos)
            def value = it.substring(pos + 1)

            if (System.getProperty(key) == null) {
                System.setProperty("env.$key", value)
            }
        }
    }

    if (variant.name == "release") {
        android.signingConfigs.release.storeFile file(System.getProperty("env.ANDROID_APP_SIGNING_STOREFILE"))
        android.signingConfigs.release.keyAlias System.getProperty("env.ANDROID_APP_SIGNING_KEYALIAS")
        android.signingConfigs.release.storePassword System.getProperty("env.ANDROID_APP_SIGNING_STOREPASSWORD")
        android.signingConfigs.release.keyPassword System.getProperty("env.ANDROID_APP_SIGNING_KEYPASSWORD")
    }
    android.defaultConfig.buildConfigField "String", "ANDROID_APP_URL", "\"${System.getProperty("env.ANDROID_APP_URL")}\""
}

Kotlin:

Log.i(TAG, BuildConfig.ANDROID_APP_URL)

Пожалуйста, дайте мне знать, что вы думаете об этом, так как я не совсем уверен, как он работает, особенно для выбора хорошего файла для загрузки.

0 голосов
/ 24 мая 2018

Что по этому поводу:

task fooTask {
    doLast {
        exec {
            file('env.file').readLines().each() {
                def (key, value) = it.tokenize('=')
                environment key, value
            }
            commandLine 'fooScript.sh'
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...