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é.

10
demandé sur meagar 2014-04-27 23:25:18

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

8
répondu Melou 2014-04-28 21:25:06

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 (