Это часть моего pom.xml с двумя профилями, которые содержат URL-адреса для разных сред:
<profiles>
<profile>
<id>test</id>
<properties>
<environment>yyy</environment>
</properties>
</profile>
<profile>
<id>uat</id>
<properties>
<environment>xxx</environment>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
также у меня есть evironment.properties файл в src/main/java/resources с телом:
environment=${environment}
Я запускаю программу с mvn clean test -Ptest Теперь, как я могу получить доступ к значению из моего профиля maven? Я создаю класс читателя:
package utils;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Reader {
public void readProperties() {
Reader app = new Reader();
Properties prop = app.loadPropertiesFile("src\\test\\resources\\properties\\environment.properties");
prop.forEach((k, v) -> System.out.println(k + ":" + v));
}
public Properties loadPropertiesFile(String filePath) {
Properties prop = new Properties();
try (InputStream resourceAsStream = getClass().getClassLoader().getResourceAsStream(filePath)) {
prop.load(resourceAsStream);
} catch (IOException e) {
System.err.println("Unable to load properties file : " + filePath);
}
return prop;
}
}
но если я запускаю функцию чтения в своем тесте, она дает мне NullPointer по адресу:
Reader objReader = new Reader();
objReader.readProperties();
Как я могу получить доступ к своему URL-адресу, указанному в профилях?
Вы вызываете readProperties, который использует каталог, которого нет на ресурсе. Местоположение должно быть /environment.properties, потому что во время сборки ресурсы src/test/resources будут скопированы в target/test-classes/, который является путем к классам для тестов.


Вы должны указать следующее в You пом.xml :
Раздел сборки:
<build>
<resources>
<resource>
<directory>src/main/resources/${custom.resource}</directory>
<filtering>true</filtering>
</resource>
</resources>
....
<profiles>
<profile>
<id>cloud</id>
<properties>
<custom.resource>devnew</custom.resource>
</properties>
</profile>
...
Сама конфигурация разработчик может выглядеть так: https://i.imgur.com/gHR5BTk.png
baseUrl=abracadabra....
И ваш загрузчик пропов будет выглядеть:
public void environmentPropertiesLoader() throws IOException {
Properties prop = new Properties();
String propFileName = "custom.resource";
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(propFileName);
if (inputStream == null) {
throw new FileNotFoundException("Property File '" + propFileName + "' not found in the classpath");
}
prop.load(inputStream);
baseUrl = prop.getProperty("baseUrl");
inputStream.close();
}
Ваша правильная команда с профилем будет выглядеть так:
mvn clean test "-Pdevnew"
Надеюсь, это поможет вам.
Также рекомендуем статья, описывающая, как настроить проект maven с нуля.
С наилучшими пожеланиями, Юджин
Вероятно, вам нужно настроить плагин surefire, чтобы предоставить вам необходимые свойства в качестве системных свойств.