Как включить файл свойств в Gradle?
Например, в Ant я мог бы сделать следующее:
<property file="${basedir}/build.properties" />
Как включить файл свойств в Gradle?
Например, в Ant я мог бы сделать следующее:
<property file="${basedir}/build.properties" />
Вы можете сделать это, используя синтаксис Java, например:
Properties props = new Properties()
InputStream ins = new FileInputStream("/path/file.properties")
props.load(ins)
ins.close()
Это должно работать в любом отличном сценарии. Хотя может быть более "отличный" способ сделать это, используя замыкания или другие причудливые ярлыки.
ОБНОВЛЕНИЕ: "в" это зарезервированное слово в Groovy. Переменная не может быть названа таким образом, переименовав ее в "ins"
Я бы рекомендовал использовать файл свойств Gradle по умолчанию. Если вы поместите свойства в gradle.properties
в тот же каталог, что и build.gradle
, они будут автоматически доступны.
То, что вы ищете, похоже на:
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
Возможно, причина (теневое?) почему его плохая идея сделать это? Не уверен, почему он не поддерживается из коробки или может быть найден где-то в другом месте.
Вот как я включаю 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.
Чтобы включить ваш файл .properties, вы можете просто использовать что-то вроде этого:
apply from: "version.properties"
и что это!
Используйте переменную env для GRADLE_USER_HOME, чтобы установить домашний каталог gradle. Поместите файл gradle.properties и задайте параметры.
https://docs.gradle.org/current/userguide/build_environment.html
Файл свойств в домашнем каталоге пользователя имеет приоритет над файлы свойств в каталогах проектов.
Мне очень не хватало эту функцию Ant, особенно замену свойств, например work.dir=${basedir}/work
. С некоторыми крупными сборками, с которыми я работаю, которые выполняют множество настроек среды для автоматизированных тестов, есть некоторые задачи, требующие только настраиваемых параметров пользователя и среды. Простых "gradle.properties" просто недостаточно, особенно для параметров, которые совместно используются несколькими проектами.
Я собрал пример файла gradle, который управляет разумной схемой загрузки свойств: load-properties.gradle. Это позволяет проекту точно определить свойства, которые он использует в файле default-properties.gradle
, и позволяет пользователям определять их локальные настройки для их переопределения. Поскольку файлы свойств "read" являются gradle скриптами, вы можете включить в них дополнительную логику, а значения не ограничиваются только строками.
Кроме того, он позволяет определять файл свойств для каждой среды (например, "mac" или "jenkins-machine" или "remote"), передавая параметр "-Penv = (env name)" до gradle.
Принятый ответ работает, если вы не хотите добавлять свойства в проект, так как это первый результат поиска, я добавлю свое решение, которое работает в 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 и добавит завершение, проверку ссылок и т.д.
В вашей задаче (jar или любая другая задача) вы можете сделать так, чтобы включить любой файл в папку назначения
jar{
//jar task related code
from("src/main/......(source)") {
include 'xxx.properties' into('com/.....(destination)')
}
}