Hi,
We're working on an SAP-Commerce (ex Hybris) project and want to measure
test-coverage in our build-pipeline. SAP-Commerce uses ant for builds and
Tests. Earlier versions of it had a pre-defined ant task called
jacocoalltests which executed all tests with coverage. In newer versions of
SAP-Commerce this task is gone and I'm trying to rebuild it. Reading the
former task definition and the jacoco documentation I wrote the following
ant task, which is supposed to set the appropriate jvm-parameter when the
actual test-execution is performed:
```{xml}
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="REDACTED/lib/"/>
</taskdef>
<target name="jacocoalltests" description="runs allstests with jacoco
attached">
<jacoco:agent property="agentvmparam"
append="true"
output="file"
destfile="${HYBRIS_LOG_DIR}/junit/jacoco.exec"
excludes="jdk.internal.*"
inclnolocationclasses="true"
/>
<property name="testclasses.extensions" value="${extname}"/>
<ant dir="${platformhome}" target="alltests" inheritrefs="false">
<property name="standalone.javaoptions" value="${agentvmparam}
${standalone.javaoptions}"/>
</ant>
</target>
```
The referenced classpath includes jacoco-core-0.8.6.jar,
jacoco-ant-0.8.6.jar, jacoco-report-0.8.6.jar and jacoco-agent-0.8.6.jar.
The excludes and inclnolocationclasses were included after reading
https://github.com/jangrewe/gitlab-ci-android/issues/59 - without them
there is no different outcome.
I've tried to execute this task with two different JDKs, one being the
debian build of openjdk-11 and the other being the current version of
sapmachine (see also below).
The latter is the JDK we actually ant to use.
When I execute it I get teh following error for both tested JDKs:
```
---snip---
alltests:
[echo] preparing...
---snip---
[echo] jvmargs:
-javaagent:/tmp/jacocoagent11926682159682554528.jar=destfile=/home/developer/hybris-logs/junit/jacoco.exec,append=true,excludes=jdk.internal.*,inclnolocationclasses=true,output=file
-Xmx2g -Djava.locale.providers=COMPAT,CLDR
--add-exports="java.base/jdk.internal.ref=ALL-UNNAMED"
--add-exports="java.naming/com.sun.jndi.ldap=ALL-UNNAMED"
--add-exports="jdk.management.agent/jdk.internal.agent=ALL-UNNAMED"
-Ddeployed.server.type="tomcat"
---snip---
[yunitint] --> found 1731 testclasses!
[yunitint] FATAL ERROR in native method: processing of -javaagent failed,
processJavaStart failed
[yunitint] Exception in thread "main"
java.lang.reflect.InvocationTargetException
[yunitint] at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
[yunitint] at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[yunitint] at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[yunitint] at
java.base/java.lang.reflect.Method.invoke(Method.java:566)
[yunitint] at
java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:513)
[yunitint] at
java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:525)
[yunitint] Caused by: java.lang.RuntimeException: Class java/util/UUID
could not be instrumented.
[yunitint] at
org.jacoco.agent.rt.internal_8ff85ea.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:140)
[yunitint] at
org.jacoco.agent.rt.internal_8ff85ea.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:101)
[yunitint] at
org.jacoco.agent.rt.internal_8ff85ea.PreMain.createRuntime(PreMain.java:55)
[yunitint] at
org.jacoco.agent.rt.internal_8ff85ea.PreMain.premain(PreMain.java:47)
[yunitint] ... 6 more
[yunitint] Caused by: java.lang.NoSuchFieldException: $jacocoAccess
[yunitint] at java.base/java.lang.Class.getField(Class.java:1999)
[yunitint] at
org.jacoco.agent.rt.internal_8ff85ea.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:138)
[yunitint] ... 9 more
[yunitint] *** java.lang.instrument ASSERTION FAILED ***: "result" with
message agent load/premain call failed at
src/java.instrument/share/native/libinstrument/JPLISAgent.c line: 422
---snip---
```
As you can see the jacoco javaagent seems to be the first jvm-argument, as
was recommended in the documentation.
Am I missing something? What further checks could I perform to see, whether
this is a Problem with my task-definition, with the SAP-Commerce
Build-Framework or with jacoco itself?
Thanks a lot!
Johannes Ballmann
Environment
* OS: Debian stable
* JDK
** OpenJDK:
$ java -version
openjdk version "11.0.9.1" 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed
mode, sharing)
** Sap-Machine:
$ java -version
openjdk version "11.0.9.1" 2020-11-05 LTS
OpenJDK Runtime Environment SapMachine (build 11.0.9.1+1-LTS-sapmachine)
OpenJDK 64-Bit Server VM SapMachine (build 11.0.9.1+1-LTS-sapmachine, mixed
mode)
* ant: Apache Ant(TM) version 1.10.6 compiled on May 2 2019
--
You received this message because you are subscribed to the Google Groups
"JaCoCo and EclEmma Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jacoco/9c97319b-2923-4faf-8792-09662f64bd75n%40googlegroups.com.