Maven + Surefire: настройка прокси - PullRequest
10 голосов
/ 24 ноября 2011

Я использую httpunit для доступа к серверу.

Мне нужно настроить параметры прокси для этого (http и https).

Я установил конфигурацию в файле settings.xml, но наверняка ее проигнорировал!?

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

В верной конфигурации плагина я попробовал:

<systemPropertyVariables>
    <http.proxyHost>${http.proxyHost}</http.proxyHost>
</systemPropertyVariables>

и

<argLine>-Dhttp.proxyHost=${http.proxyHost}</argLine>

и

<argLine>-Dhttp.proxyHost=${settings.proxies[protocol=http].host}</argLine>

и несколько других комбинаций.

Я печатаю системные свойства в модульном тесте с:

for (String propertyName : new TreeSet<String>(System.getProperties().stringPropertyNames())){
        System.out.println(propertyName + ": " + System.getProperty(propertyName));
    }

Единственное, что до сих пор работало, это явные значения, такие как:

<systemPropertyVariables>
    <http.proxyHost>myProxy</http.proxyHost>
</systemPropertyVariables>

или

<argLine>-Dhttp.proxyHost=myProxy</argLine>

Но, как я уже сказал, я не хочу дублировать конфигурацию, если это возможно.

Как использовать параметры прокси-сервера, заданные в файле settings.xml, в модульных тестах?

Ответы [ 3 ]

3 голосов
/ 30 августа 2015

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

1) В средах, где настройки прокси-серверанеобходимо создать RC-файл для Maven ("~/.mavenrc" или "%PROFILE%\mavenrc_pre.bat") с MAVEN_OPTS внутри.Например:

set MAVEN_OPTS=-Dhttp.proxyHost=10.0.1.250 -Dhttp.proxyPort=3128 -Dhttp.nonProxyHosts="localhost|*.local|*.mylab.com"

2) Определить, были ли заданы параметры прокси-сервера, и создать аргументы для Surefire:

<plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>groovy-maven-plugin</artifactId>
    <version>2.0</version>
    <executions>
        <execution>
            <phase>initialize</phase>
            <goals>
                <goal>execute</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <source>
            <![CDATA[
                // Collect proxy settings to use in Surefire and Failsafe plugins
                def settings = "";
                System.properties.each { k,v ->
                    if ( k.startsWith("http.") || k.startsWith("https.") )
                    {
                        // We have to escape pipe char in 'nonProxyHosts' on Windows
                        if (System.properties['os.name'].toLowerCase().contains('windows'))
                            v = v.replaceAll( "\\|", "^|" );
                        settings += "-D$k=$v ";
                    }
                }
                project.properties["proxy.settings"] = settings;
            ]]>
        </source>
    </configuration>
</plugin>

3) Использовать подготовленные аргументы в плагинах Surefire и Failsafe:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
        <argLine>${proxy.settings}</argLine>
        <redirectTestOutputToFile>true</redirectTestOutputToFile>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
        <argLine>${proxy.settings}</argLine>
        <redirectTestOutputToFile>true</redirectTestOutputToFile>
    </configuration>
</plugin>

Наслаждайтесь:)

1 голос
/ 26 декабря 2012

Параметр forkMode модуля Maven Surefire по умолчанию имеет значение «один раз». Я бы предложил установить это значение «никогда», а затем снова попытаться запустить сборку. Моя теория заключается в том, что вы теряете системное свойство, потому что плагин Surefire разветвляет новую JVM.

0 голосов
/ 08 октября 2014

Редактирование Maven файла settings.xml для добавления прокси работало правильно для меня. В Ubuntu и AWS Linux путь равен /var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/maven/conf

<!-- proxy
 | Specification for one proxy, to be used in connecting to the network.
 |
<proxy>
  <id>optional</id>
  <active>true</active>
  <protocol>http</protocol>
  <username>proxyuser</username>
  <password>proxypass</password>
  <host>proxy.host.net</host>
  <port>80</port>
  <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
-->
...