Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité de passage
    Inscrit en
    juin 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 33
    Points : 3
    Points
    3

    Par défaut Junit4 et JEE6

    Bonjour,

    Je viens de migrer une application java vers Glassfish 3.1. L'application utilise Eclipselink 2.4. Lors de l'execution des tests unitaires sous maven, j'obtiens l'erreur suivante :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    java.lang.NoClassDefFoundError: com.timm.mcr.persistence.PersistenceTestCase
    	at java.lang.Class.getDeclaredMethods0(Native Method)
    	at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
    	at java.lang.Class.getMethod0(Class.java:2670)
    	at java.lang.Class.getMethod(Class.java:1603)
    	at org.junit.internal.builders.SuiteMethodBuilder.hasSuiteMethod(SuiteMethodBuilder.java:20)
    	at org.junit.internal.builders.SuiteMethodBuilder.runnerForClass(SuiteMethodBuilder.java:13)
    	at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    	at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    	at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    	at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
    	at org.apache.maven.surefire.junit4.JUnit4TestSet.<init>(JUnit4TestSet.java:45)
    	at org.apache.maven.surefire.junit4.JUnit4DirectoryTestSuite.createTestSet(JUnit4DirectoryTestSuite.java:56)
    	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.locateTestSets(AbstractDirectoryTestSuite.java:96)
    	at org.apache.maven.surefire.Surefire.createSuiteFromDefinition(Surefire.java:209)
    	at org.apache.maven.surefire.Surefire.run(Surefire.java:156)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
    	at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
    Le code source est le suivant :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    // fichier1
    public abstract class PersistenceTestCase extends TestCase {
     
    	static private EntityManagerFactory emf;
     
    	static {
    		try {
    			emf = Persistence.createEntityManagerFactory("mcrPersistence-UT");
    		} catch (Exception e) {
    			emf = Persistence.createEntityManagerFactory("mcrPersistence-UT");
    		}
    	}
     
    	protected EntityManager entityMgr;
    	protected EntityTransaction tx;
     
    	protected void setUp() throws Exception {
    		super.setUp();
    		entityMgr = emf.createEntityManager();
    		tx = entityMgr.getTransaction();
    		tx.begin();
    	}
     
    	protected void tearDown() throws Exception {
    		tx.rollback();
    		super.tearDown();
    	}
    ...
    }
    // fichier 2
    public class AccountFacadeTest extends PersistenceTestCase {
     
    	...
     
    	@Before
    	protected void setUp() throws Exception {
    		super.setUp();
     
    		...
    	}
     
    	@After
    	protected void tearDown() throws Exception {
    		super.tearDown();
    	}
    ...
    }
    Dépendances Maven :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    		<dependency>
    			<groupId>javax</groupId>
    			<artifactId>javaee-api</artifactId>
    			<version>${javaee-api.version}</version>
    			<scope>provided</scope>
    		</dependency>
    ...
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>${junit.version}</version>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.eclipse.persistence</groupId>
    			<artifactId>eclipselink</artifactId>
    			<version>${eclipselink.version}</version>
    			<scope>test</scope>
    		</dependency>
    Mon environnement de travail est linux gentoo amd64, eclipse 3.7.1, maven 3.0.1 (ou 2.2.1).

    Quelle peut être la source de cette erreur ?

    Merci

  2. #2
    Invité de passage
    Inscrit en
    juin 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 33
    Points : 3
    Points
    3

    Par défaut

    J'ai également une autre erreur sur un autre fichier source :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    initializationError(com.timm.mcr.persistence.PricelistCreditFacadeTest)  Time elapsed: 0.004 sec  <<< ERROR!
    .lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/persistence/Persistence
    	at java.lang.ClassLoader.defineClass1(Native Method)
    	at java.lang.ClassLoadjavaer.defineClassCond(ClassLoader.java:631)
    	at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    	at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    	at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    	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)
    	at com.timm.mcr.persistence.PersistenceTestCase.<clinit>(PersistenceTestCase.java:24)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    	at junit.framework.TestSuite.createTest(TestSuite.java:61)
    	at junit.framework.TestSuite.addTestMethod(TestSuite.java:283)
    	at junit.framework.TestSuite.<init>(TestSuite.java:146)
    	at org.junit.internal.runners.JUnit38ClassRunner.<init>(JUnit38ClassRunner.java:71)
    	at org.junit.internal.builders.JUnit3Builder.runnerForClass(JUnit3Builder.java:14)
    	at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    	at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    	at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    	at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
    	at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:33)
    	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:146)
    	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke(ProviderFactory.java:103)
    	at $Proxy0.invoke(Unknown Source)
    	at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:145)
    	at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:87)
    	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)
    Après consultation de quelques post sur ce sujet sur le net, j'ai vérifier que le PersistenceManager est bien inclus dans les tests unitaires.

  3. #3
    Expert Confirmé
    Avatar de olivier.pitton
    Homme Profil pro olivier pitton
    Développeur Java
    Inscrit en
    juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Nom : Homme olivier pitton
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2012
    Messages : 355
    Points : 2 844
    Points
    2 844

    Par défaut

    Plop,

    Déjà ton chargement d'entity manager est étrange. Si tu lèves une exception, tu relances le même code (qui dans ce cas, va très probablement relancer une erreur ...).

    As-tu bien mis le fichier persistence.xml dans test/java/resources ?

    De plus, pourquoi EclipseLink n'est accessible que pour les tests ? Il devrait être en provided (au moins).

    Avant de lancer tes tests unitaires avec Eclipse, as-tu pensé à bien faire un "mvn clean compile" ? Car si le répertoire target/ n'existe pas, ou ne contient pas les classes compilées, cela peut expliquer le NoClassDefFound.

  4. #4
    Invité de passage
    Inscrit en
    juin 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 33
    Points : 3
    Points
    3

    Par défaut

    En déclarant la dépendance eclipselink avant l'api jee 6, le problème est résolu. C'est un "défaut" maven.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •