オフライン計測を使用してjacocoでカバレッジを取得しようとしています(オンザフライ計測を使用できません。 Powermockテストケース)を作成しました。以下に示すように、surefireプラグインのクラスパスにjacocoagent.jarを追加しました。 "org.jacoco.agent-0.7.7.201606060606-runtime.jar"(ローカルのMavenリポジトリから)を "jacocoagent.jar"に改名し、このpom.xmlが存在する同じフォルダに保存しました。例外をクラスパスに追加した後でも例外です。 pom.xmlのJacoco - 「原因:java.lang.ClassNotFoundException:org.jacoco.agent.rt.internal_6da5971.Offline」
スニペット(確実な - プラグイン構成)コンソール上で見
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkmode>once</forkmode>
<additionalClasspathElements>
<additionalClasspathElement>jacocoagent.jar</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
</plugin>
例外:
#############
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]
###############
手順に従う:
- "mvn compile" "mvn org.jacoco:jacoco-maven-plugin:instrument"
- "mvn test" - このステップで例外が発生しました。
この例外を取り除く方法を教えてください。それはクラスパスを追加するための正しい場所でしたか? (確実なプラグインで)ORを指定する必要がありますか?
ありがとうございます。ソナー+ JaCoCo + PowerMockを得る上
私はそれがテストのためにライブラリを追加する必要がある場合、彼らはスコープ=テストで、ポンポンの '<依存性>'セクションで指定する必要があり、ことを賭けると思います。 –
@LittleSanti:提案ごとにpom.xmlを調整しました。まだ問題(例外)が残っています。タブにこれらの行を追加しました。 org.jacoco org.jacoco。エージェント テスト ランタイム 0.7.7.201606060606 。 **すでにjacocoagent.jarがダウンロードされ、ディスク上に存在しています。インストルメントクラスがそれを開始できるように**これをclasspathで利用できるようにするだけです**(http://www.eclemma.org/jacoco/trunk/doc/offline.html)。わからない、まだ何が足りないのか! –
gthy
私は参照してください。まあ...他の解決策は、プラグインのクラスローダーがテストされたコードのクラスローダーと異なる可能性があるため、**プラグインの依存関係の中でその依存関係を設定することです。 –