Получить NPE при загрузке правильного файла свойств с профилем Maven

Я создал два профиля Maven. Один для dev, другой для qa.

<profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
           <properties>
               <cofiguration.path>src/test/resources</cofiguration.path>
           </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>2.18.1</version>
                        <configuration>
                            <systemPropertyVariables>
                                <appEnv>dev</appEnv>
                                <userFile>application.properties</userFile>
                                <Selenium_Broswer>chrome</Selenium_Broswer>
                            </systemPropertyVariables>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>qa</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>2.18.1</version>
                        <configuration>
                            <systemPropertyVariables>
                                <appEnv>qa</appEnv>
                                <userFile>application.properties</userFile>
                                <Selenium_Broswer>firefox</Selenium_Broswer>
                            </systemPropertyVariables>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

Также есть класс для чтения свойств

public class PropertyFile {

    private static Properties prop;

    private static void getPropertyFile() {
        String appFilePath = System.getProperty("user.dir") + "/src/test/resources/" + System.getProperty("appEnv") + ".properties";
        try (InputStream in = new FileInputStream(appFilePath)) {
            prop = new Properties();
            prop.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static String getProperty(String propertyName) {
        if (prop == null) {
            getPropertyFile();
        }
        return prop.getProperty(propertyName);
    }
}

По сути, я хочу сделать это, когда я запускаю mvn test -Pdev. Он получит переменные в профиле maven «appEnv»

Например, appEnv — это dev, когда mvn test -Pdev. В классе PropertyFile он получит appEnv и найдет правильный файл свойств (у меня есть dev.properties и qa.properties в папке ресурсов, и в файлах есть некоторые базовые URL-адреса и другие свойства)

Но теперь он возвращает NPE, когда я вызываю PropertyFile.getProperty("baseUrl"). В чем проблема? Как мне изменить код и профиль maven?


person HenlenLee    schedule 06.08.2019    source источник
comment
1. Каталога src не будет во время выполнения, поэтому вам придется искать свой файл, возможно, в каталоге ресурсов, который будет присутствовать во время выполнения. 2. Ресурсы не файлы. Вы должны использовать getResourceAsStream() здесь и немного лучше справляться с проверкой нуля.   -  person user207421    schedule 06.08.2019


Ответы (1)


Просто исправьте свой NPE:

private static Properties prop=new Properties();

и

if (prop.isEmpty()) {
    getPropertyFile();
}

Пожалуйста, используйте Resources.getResource(path) для получения файла ресурсов. И если это проект Spring, это хороший способ добавить другой профиль в файл приложения, а затем добавить компонент свойств для загрузки значения.

person leo    schedule 06.08.2019