Ошибка при создании исполняемого test-jar в Maven - PullRequest
0 голосов
/ 30 ноября 2011

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

Мои тесты находятся в отдельном проекте maven со структурой папок:

/myProject/src/test/java/org/testplatform/services/test/<name of testng test>.java

Вотмой конфиг для test-jar в pom:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
              <execution>
                <goals>
                  <goal>test-jar</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>org/testplatform/services/test/MainTestClass.java</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

Когда я выполняю полученный JAR, я получаю эту ошибку:

Exception in thread "main" java.lang.NoClassDefFoundError: org/testng/ITestListener
Caused by: java.lang.ClassNotFoundException: org.testng.ITestListener
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

Может кто-нибудь помочь мне понять, какие изменения мне нужнысделать в моем pom и / или тесты, чтобы создать независимый, исполняемый файл JAR для запуска testng модульных тестов?Был бы полезен демонстрационный проект.

1 Ответ

1 голос
/ 30 ноября 2011

Ошибка предполагает, что вы используете классы TestNG и что они не доступны в результирующем пути к классам.Это возможно, потому что вы test ограничили свою зависимость testNG

<dependency>
  <groupId>...</groupId>
  <artifactId>...</artifactId>
  <version>...</version>
  <scope>test</scope>           <<< Test scope
</dependency>

Это приведет к исключению этой зависимости из полученного JAR.

рекомендуем прочитать подробное объяснение Maven рекомендуемого способа создания тестового JAR и ловушек, которых следует избегать.

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

...