Gradle - включить файл свойств

Как включить файл свойств в Gradle?

Например, в Ant я мог бы сделать следующее:

<property file="${basedir}/build.properties" />

Ответ 1

Вы можете сделать это, используя синтаксис Java, например:

Properties props = new Properties()
InputStream ins = new FileInputStream("/path/file.properties")
props.load(ins)
ins.close()

Это должно работать в любом отличном сценарии. Хотя может быть более "отличный" способ сделать это, используя замыкания или другие причудливые ярлыки.

ОБНОВЛЕНИЕ: "в" это зарезервированное слово в Groovy. Переменная не может быть названа таким образом, переименовав ее в "ins"

Ответ 2

Я бы рекомендовал использовать файл свойств Gradle по умолчанию. Если вы поместите свойства в gradle.properties в тот же каталог, что и build.gradle, они будут автоматически доступны.

См. руководство пользователя.

Ответ 3

То, что вы ищете, похоже на:

    Properties props = new Properties()
    props.load(new FileInputStream("$project.rootDir/profile/"+"$environment"+".properties"))
    props.each { prop ->
      project.ext.set(prop.key, prop.value)
    }

Затем ваши свойства должны быть доступны непосредственно через их имя. То есть:.

  println "$jdbcURL"
  println project.jdbcURL

Возможно, причина (теневое?) почему его плохая идея сделать это? Не уверен, почему он не поддерживается из коробки или может быть найден где-то в другом месте.

Ответ 4

Вот как я включаю CSV файл в свой .jar, который Gradle builds:

sourceSets {
  main {
    java {
      srcDir 'src/main/java'
      output.classesDir   = 'build/classes/main'      
    }
    resources {
      srcDir 'src/main/resources'
      include '*.csv'
      output.resourcesDir = 'build/resources/main'
    }
  }
}

Затем, когда мое приложение загружает ресурс, это делается независимо от Gradle.

Ответ 5

Для Gradle 1.x(устарел в Gradle 2.x)

Чтобы включить ваш файл .properties, вы можете просто использовать что-то вроде этого:

    apply from: "version.properties"

и что это!

Ответ 6

Используйте переменную env для GRADLE_USER_HOME, чтобы установить домашний каталог gradle. Поместите файл gradle.properties и задайте параметры.

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

Файл свойств в домашнем каталоге пользователя имеет приоритет над файлы свойств в каталогах проектов.

Ответ 7

Мне очень не хватало эту функцию Ant, особенно замену свойств, например work.dir=${basedir}/work. С некоторыми крупными сборками, с которыми я работаю, которые выполняют множество настроек среды для автоматизированных тестов, есть некоторые задачи, требующие только настраиваемых параметров пользователя и среды. Простых "gradle.properties" просто недостаточно, особенно для параметров, которые совместно используются несколькими проектами.

Я собрал пример файла gradle, который управляет разумной схемой загрузки свойств: load-properties.gradle. Это позволяет проекту точно определить свойства, которые он использует в файле default-properties.gradle, и позволяет пользователям определять их локальные настройки для их переопределения. Поскольку файлы свойств "read" являются gradle скриптами, вы можете включить в них дополнительную логику, а значения не ограничиваются только строками.

Кроме того, он позволяет определять файл свойств для каждой среды (например, "mac" или "jenkins-machine" или "remote"), передавая параметр "-Penv = (env name)" до gradle.

Ответ 8

Принятый ответ работает, если вы не хотите добавлять свойства в проект, так как это первый результат поиска, я добавлю свое решение, которое работает в gradle 3.x. Легкий способ сделать это через ant.

ant {
    property(file: 'properties.file')
}

Если вам нужно преобразовать свойство в Camel Case для удобного доступа в ваш script (помните, что синтаксис на основе точек на основе точек и фактический объект существуют в gradle):

println "property value:{dot.property.from.file}" //this will fail.
def camelCaseProperty = project.getProperties().get("dot.property.from.file")
println "camelCaseProperty:${camelCaseProperty}"  //this wont fail

Если вам нужно значение по умолчанию, если оно не указано:

def propertyWithDefault = project.getProperties().get("dot.property.from.file","defaultValue");

Используя этот метод, по крайней мере, с IntelliJ/Android Studio, IDE свяжет ваш файл свойств и gradle script и добавит завершение, проверку ссылок и т.д.

Ответ 9

В вашей задаче (jar или любая другая задача) вы можете сделать так, чтобы включить любой файл в папку назначения

jar{

    //jar task related code

   from("src/main/......(source)") { 
     include 'xxx.properties' into('com/.....(destination)') 

   }

}