Подтвердить что ты не робот

Можно ли вводить свойства из Maven (пароли, определенные в settings.xml) в мой контейнер Spring?

Я определяю пароли на серверы через свойства, которые я определяю в своем ~/.m2/settings.xml(может быть где угодно, в том числе pom.xml) для моего плагина развертывания. Я бы хотел использовать те же свойства для своих интеграционных тестов. Есть ли способ сделать это?

Если нет, существует ли удобный способ обмена свойствами между Maven и TestNG?

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

Я определяю учетные данные для удаленной службы в settings.xml:

<properties>
<my.host>http://my.company.com</my.host>
<my.username>my-un</my.username>
<my.password>my-pw</my.password>
</properties>

Я хотел бы иметь возможность ссылаться на свойства в моих тестах unit/integration (src/test/resources), используя:

<?xml version="1.0" encoding="UTF-8"?>
<beans....
    <bean class="java.lang.String" id="un">
        <constructor-arg value="${my.username}"/>
    </bean>
    <bean class="java.lang.String" id="pw">
        <constructor-arg value="${my.password}"/>
    </bean>
</beans>

Есть ли какие-либо варианты для этого? Кто-нибудь еще пробовал это раньше? Я пишу много тестов REST, которые требуют авторизации в моих тестах.

Спасибо!

4b9b3361

Ответ 1

Конечно. Фильтр ресурсов Maven - это путь.

Здесь примерная конфигурация (файлы, соответствующие *-context.xml, будут отфильтрованы, другие - нет):

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>**/*-context.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <excludes>
                <exclude>**/*-context.xml</exclude>
            </excludes>
        </resource>
    </resources>
</build>

Другой подход - использовать Свойства Maven Plugin для write все свойства проекта в файл и ссылаются на этот файл из Spring, используя механизм PropertyPlaceholderConfigurer.

Конфигурация Maven:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0-alpha-2</version>
            <executions>
                <execution>
                    <phase>generate-test-resources</phase>
                    <goals>
                        <goal>write-project-properties</goal>
                    </goals>
                    <configuration>
                        <outputFile>${project.build.testOutputDirectory}/mavenproject.properties</outputFile>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Spring Конфигурация:

<context:property-placeholder location="classpath:mavenproject.properties"/>

Ответ 2

Ну, @seanizer находится на правильном пути, но это можно упростить, поскольку вы уже можете установить свои свойства в maven. Установите их в своей папке и в конфигурации Spring, все, что вам нужно сделать, это получить доступ к ним, поэтому простое изменение конфигурации, как это, будет выполнено.

<beans....
    <context:property-placeholder />

    <bean class="java.lang.String" id="un">
        <constructor-arg value="${my.username}"/>
    </bean>
    <bean class="java.lang.String" id="pw">
        <constructor-arg value="${my.password}"/>
    </bean>
</beans>

Местоположение не требуется, так как свойства, которые вас интересуют, теперь устанавливаются как системные свойства maven. PropertyPlaceholderConfigurer будет работать с теми, которые указаны в файле, который не требуется в этом конкретном случае. Обратите внимание, что вам нужно будет включить схему для контекста.

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

Ответ 3

Вы можете заставить Maven подставить определенное значение в ваш XML файл, когда maven создает проект с определенным профилем. Так, например, вы бы установили тестовый файл в вашем maven pom, и когда вы будете строить с этим профилем, xml файл в вашей банке будет иметь желаемое свойство. Посмотрите этот для примера.