Maven compile donne: impossible de trouver le symbole - pour une classe assise dans la même application
il y a longtemps que je n'ai pas rencontré un tel problème. J'ai un cours qui fait référence à un autre dans un autre paquet dans la même application, C'est-à-dire pas dans un autre fichier d'archive jar.
la classe y compris est learnintouch-repos/src/test/java/com/thalasoft/learnintouch/repos/acceptation/AbstractControllerTest.java
la classe incluse être /home/stephane/dev/java/projects/learnintouch-rest/src/test/java/com/thalasoft/learnintouch/rest/config/WebTestConfiguration.java
Sous Eclipse, il n'y a pas de problème et pas d'erreur de compilation dans l'éditeur.
mais exécuter une compilation Maven donne une erreur de compilation:
mvn clean test-compile -Pacceptance
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-testCompile) on project learnintouch-rest: Compilation failure: Compilation failure:
[ERROR] /home/stephane/dev/java/projects/learnintouch-rest/src/test/java/com/thalasoft/learnintouch/rest/acceptance/AbstractControllerTest.java:[16,46] cannot find symbol
[ERROR] symbol: class WebTestConfiguration
[ERROR] location: package com.thalasoft.learnintouch.rest.config
[ERROR] /home/stephane/dev/java/projects/learnintouch-rest/src/test/java/com/thalasoft/learnintouch/rest/acceptance/AbstractControllerTest.java:[21,116] cannot find symbol
[ERROR] symbol: class WebTestConfiguration
voici le code de la classe including:
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@WebAppConfiguration
@ContextConfiguration(classes = {
ApplicationConfiguration.class,
WebSecurityConfig.class,
WebConfiguration.class,
WebTestConfiguration.class
})
public abstract class AbstractControllerTest {
cette classe de test abstraite se trouve sous le répertoire de test d'acceptation, qui exige l'activation explicite du profil-Pacceptance lors de l'exécution de la commande Maven.
le profil par défaut n'exécute pas ce test d'acceptation, mais seulement un test d'intégration.
Une chose à noter, c'est que cette classe abstraite ressemblera à celui de la classe abstraite utilisée dans le test d'intégration.
Voici la classe including du test d'intégration:
import com.thalasoft.learnintouch.rest.config.WebTestConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = {ApplicationConfiguration.class},
WebSecurityConfig.class,
WebConfiguration.class,
WebTestConfiguration.class
})
@Transactional
public abstract class AbstractControllerTest {
Comme vous pouvez le voir, il ressemble beaucoup à l'autre.
je peux aussi donner le pom.xml contenu du fichier, si ça peut aider:
<profiles>
<profile>
<id>rest</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<test.source.dir>src/test/java/com/thalasoft/learnintouch/rest</test.source.dir>
</properties>
</profile>
<profile>
<id>acceptance</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<test.source.dir>src/test/java/com/thalasoft/learnintouch/rest/acceptance</test.source.dir>
</properties>
</profile>
</profiles>
si vous avez une idée sur celle-ci, ce serait grandement apprécié.
3 réponses
avec maven vos tests peuvent accéder à tout le code source de votre projet (src / main/java) et à tout le code source de test (par défaut src/test / java).
Ici, votre profil reste définit le répertoire source de test comme src / test / java/com/thalasoft/learnintouch / rest Ainsi, votre code de test peut accéder à tout en src / main / java et tout en src / test / java/com/thalasoft/learnintouch / rest
Votre profil acceptation définit le répertoire source de test comme src/test/java/com/thalasoft/learnintouch/repos/d'acceptation Ainsi, votre code de test peut accéder à tout en src / main / java et tout en src/test/java/com/thalasoft/learnintouch/repos/d'acceptation. WebTestConfiguration n'est pas accessible puisqu'il est dans un paquet ci-dessus.
pour exécuter des tests spécifiques avec différents profils, je recommande de configurer le plugin surefire en charge de l'exécution des tests. Un bon exemple est disponible ici: https://weblogs.java.net/blog/carcassi/archive/2011/04/21/running-integration-tests-and-unit-tests-separately-maven
Description Du Problème:
j'ai eu le même problème avec mon projet avec la structure inférieure.
project
-pom.xml
-common-module
--src, pom.xml, etc
-web-module
--src, pom.xml, etc (but dependent on 'common')
mvn install
fonctionnerait bien pour common-module mais donne une erreur de compilation pour le code de web-module qui utilise la classe java de common-module (