Указание файла jar в аргументе сборки maven - PullRequest
3 голосов
/ 04 июля 2010

У нас есть проект, построенный с использованием maven. Мы пытаемся запустить наши модульные тесты в самой сборке Maven и для этого нам нужно добавить jar драйвера DB2 в зависимости от всех подпроектов.

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

Это потому, что jar драйвера доступен в нашей папке lib сервера приложений, и мы не хотим указывать его в зависимостях наших проектов.

Не удалось найти подходящее решение для поиска в Google, поэтому запросите экспертное решение здесь.

Любой обходной путь был бы более полезным.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 04 июля 2010

У нас есть проект, построенный с использованием maven. Мы пытаемся запустить наши модульные тесты в самой сборке Maven и для этого нам нужно добавить jar драйвера DB2 в зависимости от всех подпроектов.

Хорошо, maven мог бы объявить драйвер DB2 как зависимость с областью действия test в родительском проекте.

Вместо этого нам нужно решение, чтобы указать абсолютный путь к файлу jar в качестве аргумента командной строки mvn, чтобы использовать его при выполнении тестовых случаев.

Вы можете использовать additionalClasspathElement в конфигурации плагина для передачи пути к драйверу:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <additionalClasspathElements>
      <additionalClasspathElement>path/to/additional/resources</additionalClasspathElement>
    </additionalClasspathElements>
  </configuration>
</plugin>

Если вы его измените, вы можете передать значение в командной строке.

Но, честно говоря, я не могу понять, почему вы не устанавливаете драйвер в корпоративном хранилище и не объявляете его зависимым. И если у вас нет корпоративного репозитория, используйте репозиторий на основе файлов, как описано в этого предыдущего ответа (пожалуйста, не используйте плохую практику system) Нет веских оснований идти по хакерскому пути.

1 голос
/ 05 июля 2010

Я использую зависимость с областью действия, установленной в 'system', для ссылки на jar, который доступен в контейнере, но отсутствует в любом репозитории maven.В этом случае jar помещается в папку с именем 'lib' в проекте, например так:

<dependency>
    <groupId>groupId</groupId>
    <artifactId>artifactId</artifactId>
    <version>version</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/library.jar</systemPath>
</dependency>

Для groupId, artifactId и version может быть установлено любое значение, которое вы хотите, трюк был в том, что системазависимости должны быть заданы с абсолютным путем, который можно обойти, используя свойство project.basedir.Также должна быть возможность указать полный путь как свойство.

1 голос
/ 04 июля 2010

Обычным способом было бы добавить зависимость к драйверу базы данных и ограничить зависимость тестированием (область тестирования). Таким образом, библиотека доступна для модульных тестов, но не будет развернута и jar'ed.

На практике я бы создал для этого драйвера артефакт maven (просто базовый POM-файл) и поместил бы его в репозиторий maven серверов сборки (или нексус, если вы используете его для проектов).

...