Использование переменных в .properties

217
19 декабря 2017, 18:07

Есть .properties файл в нем лежат пути:

path1=doc/1.txt
path2=src/2.png

И есть корень который ведет в папку где лежат doc/1 и src/2

root=/user/pavel/Document/

Пытаюсь сделать так чтобы я мог только в одном месте менять корень. На пример:

root=/user/pavel/Document
path1=${root}/doc/1.txt
path2=${root}/src/2.png

Как это сделать подскажите пожалуйста.

Answer 1

Если проект собирается maven'ом то можно сделать так:

в pom.xml добавить следующее:

<project>
  <properties>
    <custom.property>property-value</custom.property>
  </properties>
  ...
  <build>
    ...
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>file.properties</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
 </build>
<project>

тогда если file.properties содержит шаблон, на примере такого:

prop.name = value of my prop is ${custom.property}

после выполнения команды:

prepare-resources

в файле окажется строка:

prop.name = value of my prop is property-value
Answer 2

Если поискать на SO, то можно найти этот вопрос

Из него видно, что java не парсит переменные сама, это надо делать за нее.

Для переменных окружения эта можно сделать так:

    /*
 * Returns input string with environment variable references expanded, e.g. $SOME_VAR or ${SOME_VAR}
 */
private String resolveEnvVars(String input)
{
    if (null == input)
    {
        return null;
    }
    // match ${ENV_VAR_NAME} or $ENV_VAR_NAME
    Pattern p = Pattern.compile("\\$\\{(\\w+)\\}|\\$(\\w+)");
    Matcher m = p.matcher(input); // get a matcher object
    StringBuffer sb = new StringBuffer();
    while(m.find()){
        String envVarName = null == m.group(1) ? m.group(2) : m.group(1);
        String envVarValue = System.getenv(envVarName);
        m.appendReplacement(sb, null == envVarValue ? "" : envVarValue);
    }
    m.appendTail(sb);
    return sb.toString();
}
READ ALSO
Jax ws и jax rs это servlet?

Jax ws и jax rs это servlet?

Вот Spring MVC это простые сервлетыЯвляется ли реализации jax ws и jax rs основанными на servletax? к примеру те же Jersey и Metro

169
Избавиться от null с помощью Optional

Избавиться от null с помощью Optional

Есть вот такая конструкция

227
одна synchronizedMap между двумя классами

одна synchronizedMap между двумя классами

ПриветствуюСтолкнулся со следующей проблемой

183
Как обрабатывать устаревшую страницу?

Как обрабатывать устаревшую страницу?

Допустим, пользователь открыл одну и ту же страницу в двух вкладка (страница обрабатывается ViewScoped бином)Пользователь повзаимодействовал...

132