Фильтрация ресурсов Maven не находит значения в коде, но обновляет файл свойств - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть следующее pom.xml, которое должно включить фильтрацию.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mycompany.myname</groupId>
    <artifactId>playground-maven</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

</project>

И следующее для src/main/resources.application.properties.

application.displayName=Maven  Playground
application.version=${project.version}

Чтобы получить эти свойства, у меня есть следующее PomInspector.java.

package com.mycompany.myname;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

public class PomInspector {

    private static final String APPLICATION_PROPERTIES_FILE_NAME = "src/main/resources/application.properties";

    private static final Properties applicationProperties;

    static {
        applicationProperties = new Properties();
        try {
            FileInputStream is = new FileInputStream(APPLICATION_PROPERTIES_FILE_NAME);
            applicationProperties.load(is);
        }
        catch (FileNotFoundException fileNotFoundException) { }
        catch (IOException ioException) { }
    }

    public static String getDisplayName() {
        return applicationProperties.getProperty("application.displayName");
    }

    public static String getAppVersion() {
        return applicationProperties.getProperty("application.version");
    }

}

Наконец, у меня есть следующее в моем основном методе.

System.out.println(String.format("Application \"%s\" is currently on version: \"%s\"", PomInspector.getDisplayName(), PomInspector.getAppVersion()));

К сожалению, когда я запускаю mvn clean package и затем запускаю метод main, я получаю сообщение: Application "Maven Playground" is currently on version: "${project.version}"

Если я проверяю целевой файл JAR, application.propertiesимеет application.version=1.0-SNAPSHOT, что правильно.

Я подумал, что это может быть проблема с синхронизацией, и попытался изменить PomInspector на настройку getInstance в одноэлементном стиле, но это, похоже, не решило проблему.

Любые идеив чем дело?

...