0

Привет, у меня есть структура, вроде этого.NoClassDefFoundError и ClassNotFound in test

parent.pom 
|-alpha.pom 
|-beta.pom 

в бета-я есть зависимость по отношению к альфа и в тесте Betas у меня есть ссылка на класс в Альфы SRC/тест/Java

Однако, кажется, когда я бегу бета-тест не может найти файл в альфа.

Сам класс реализует файл с src/main/java, поэтому это что-то вроде FooBarFactoryForTest implements FooBarFactory. И он не может найти FooBarFactoryForTest, когда я делаю new FooBarFactoryForTest() в тесте бета-теста

Также та же структура работает в тестах в alpha.

Любые идеи или предложения?

ответ

1

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

Чтобы сделать его работу с Maven, рассмотрите возможность создания тестового контейнера, содержащего только тестовые классы, в alpha и добавления в качестве зависимости в beta.

Read: https://maven.apache.org/plugins/maven-jar-plugin/examples/create-test-jar.html

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

<project> 
    ... 
    <build> 
    <plugins> 
     ... 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.6</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>test-jar</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     ... 
    </plugins> 
    </build> 
    ... 
</project> 

Чтобы повторно использовать этот артефакт в другом проекте, вы должны объявить эту зависимость с тест-банку типа:

<project> 
    ... 
    <dependencies> 
    <dependency> 
     <groupId>groupId</groupId> 
     <artifactId>artifactId</artifactId> 
     <type>test-jar</type> 
     <version>version</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
    ... 
</project> 

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

+0

Благодарим вас, решив его, сделав мой собственный FooBarFactoryForTest в моем модуле –