Можно ли последовательно передавать -Djava.library.path в тест maven из файла POM? - PullRequest
5 голосов
/ 22 октября 2011

У меня есть внешняя библиотека, которая должна быть динамически связана с тестом в моем проекте Java. Проект настроен с использованием maven, и мне нужно добавить следующее к моим vm-аргументам в eclipse для прохождения теста:

-Djava.library.path=${env_var:HOME}/.m2/repository/natives/dist/lib -ea

К сожалению, это означает, что запуск теста из maven с использованием: mvn test всегда будет неудачным.

Обходной путь - вызвать mvn с аргументом -DargLine, например:

mvn test -DargLine="-Djava.library.path=/Users/rob/.m2/repository/natives/dist/lib -ea"

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

Мне также любопытно, как я могу поместить его в файл POM, я пытался поместить его в теги <argLine>, но, похоже, это не работает, есть что-то, чего я пропускаю:

<argLine>-Djava.library.path=/Users/rob/.m2/repository/natives/dist/lib -ea</argLine>

1 Ответ

3 голосов
/ 22 октября 2011

После некоторых исследований я нашел достойное решение моей проблемы.

В maven вашем файле settings.xml вы можете определить местоположение для localRepository. Вот значения по умолчанию, если вы ничего не установили:

  • Unix / Mac OS X - ~ / .m2
  • Windows - C: \ Documents and Settings \ username.m2

Как вы можете видеть, это соответствует по крайней мере первой части каталога, который я пытался установить: /Users/rob/.m2

Поскольку динамическое связывание зависит от ОС, вы также можете настроить профиль для суффиксов альтернативного пути. Вы можете сделать это в .pom следующим образом:

<profile>
    <id>OSX</id>
        <activation>
            <os>
                <family>mac</family>
            </os>
        </activation>
    <properties>
        <dynamic.libLoc>${settings.localRepository}/natives/dist/lib</dynamic.libLoc>
    </properties>
</profile>

Затем вы можете использовать это свойство в .pom для проекта, который вы хотите протестировать. Под категорию плагинов вы можете добавить:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
      <argLine>-Djava.library.path=${dynamic.libLoc}</argLine>
    </configuration>
</plugin>

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

Примечание. Что касается моей проблемы с <argLine> ранее. Я думаю, что я просто использовал это неправильно .pom

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...