Essayer d'obtenir une couverture via jacoco en utilisant des instruments hors ligne (ne peut pas utiliser l'instrumentation à la volée: en raison de powermock testcases) pour un projet maven. Ajoute le jacocoagent.jar au classpath dans le plugin surefire comme indiqué ci-dessous. Renommé le "org.jacoco.agent-0.7.7.201606060606-runtime.jar" (du référentiel maven local) à "jacocoagent.jar" et gardé cela dans le même dossier où ce pom.xml réside.Je frappe le dessous exception même après l'avoir ajouté à classpath.Jacoco - "Provoqué par: java.lang.ClassNotFoundException: org.jacoco.agent.rt.internal_6da5971.Offline"
extrait de pom.xml (surefire - configuration plug-in)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkmode>once</forkmode>
<additionalClasspathElements>
<additionalClasspathElement>jacocoagent.jar</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
</plugin>
Exception vu sur la console:
#############
Number of foreign imports: 1
import: Entry[import from realm ClassRealm[maven.api, parent: null]]
-----------------------------------------------------
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:166)
... 21 more
Caused by: java.lang.NoClassDefFoundError: org/jacoco/agent/rt/internal_6da5971/Offline
at com.cisco.ise.ups.modelframework.hibernate.OracleNamingStrategy.$jacocoInit(OracleNamingStrategy.java)
at com.cisco.ise.ups.modelframework.hibernate.OracleNamingStrategy.<clinit>(OracleNamingStrategy.java)
at sun.misc.Unsafe.ensureClassInitialized(Native Method)
at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:43)
at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:142)
at java.lang.reflect.Field.acquireFieldAccessor(Field.java:1082)
at java.lang.reflect.Field.getFieldAccessor(Field.java:1063)
at java.lang.reflect.Field.get(Field.java:387)
at com.cisco.ise.ups.build.WorkflowRunnerMojo.namingStrategyInstance(WorkflowRunnerMojo.java:335)
at com.cisco.ise.ups.build.WorkflowRunnerMojo.setupWorkflowEnvironment(WorkflowRunnerMojo.java:514)
at com.cisco.ise.ups.build.WorkflowRunnerMojo.execute(WorkflowRunnerMojo.java:816)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
... 21 more
Caused by: java.lang.ClassNotFoundException: org.jacoco.agent.rt.internal_6da5971.Offline
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
... 33 more
[ERROR]
###############
étapes suivies:
- "compilation mvn".
- "mvn org.jacoco: jacoco-maven-plugin: instrument"
- "test mvn" - Exception déclenchée à cette étape.
Comment est-ce que je me libère de cette exception? Était-ce le bon endroit pour ajouter un classpath ?? (dans le plugin surefire) OU devrait-il être spécifié où?
Merci.
Je serais prêt à parier que, s'il est nécessaire d'ajouter des bibliothèques pour les tests, ils doivent être spécifiés dans la section '' de la pom, avec scope = test. –
@LittleSanti: Tweaked pom.xml selon la suggestion. Le problème (exception) persiste. Ajouté ces lignes sous l'onglet. org.jacoco org.jacoco.Agent Test exécution 0.7.7.201606060606 . ** Déjà jacocoagent.jar a été téléchargé et présent sur le disque. Il est juste nécessaire de le rendre disponible sur classpath afin que les classes instrumentées puissent l'initier ** (http://www.eclemma.org/jacoco/trunk/doc/offline.html). Pas sûr, ce qui manque encore !!! –
gthy
Je vois. Eh bien ... L'autre solution que je pense est de définir cette dépendance dans les dépendances ** du plugin **, car le classloader des plugins peut être différent du classloader du code testé. –