Могу ли я добавить свойства из Maven (пароли, определенные в settings.xml) в мой контейнер Spring? - PullRequest
17 голосов
/ 05 ноября 2010

Я определяю пароли к серверам через свойства, которые я определяю в моем ~ / .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>

Я бы хотел иметь возможность ссылаться на свойства в моих модульных / интеграционных тестах (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, которые требуют авторизации в моих тестах.

Спасибо!

Ответы [ 3 ]

31 голосов
/ 05 ноября 2010

Конечно. Фильтрация ресурсов 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>

Другой подход заключается в использовании подключаемого модуля Properties Maven - для записи всех свойств проекта в файл и ссылки на этот файл из 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>

Конфигурация пружины:

<context:property-placeholder location="classpath:mavenproject.properties"/>
5 голосов
/ 05 ноября 2010

Хорошо, @seanizer находится на правильном пути, но это можно упростить, поскольку вы уже можете устанавливать свои свойства в maven.Установите их в pom и в вашем конфигураторе 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 будет работать как с теми, что определены в файле, что не требуется в данном конкретном случае.Обратите внимание, что вам нужно будет включить схему для context .

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

1 голос
/ 05 ноября 2010

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

...