2017-05-10 6 views
1

JaCoCo funktioniert nicht mehr, nachdem die Systemeigenschaft log4j.configurationFactory festgelegt wurde.JaCoCo funktioniert nach dem Einstellen der Systemeigenschaft log4j.configurationFactory nicht mehr

java.lang.reflect.InvocationTargetException 
FATAL ERROR in native method: processing of -javaagent failed 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386) 
    at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401) 
Caused by: java.lang.RuntimeException: Class java/util/UUID could not be instrumented. 
    at org.jacoco.agent.rt.internal_6da5971.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:140) 
    at org.jacoco.agent.rt.internal_6da5971.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:101) 
    at org.jacoco.agent.rt.internal_6da5971.PreMain.createRuntime(PreMain.java:55) 
    at org.jacoco.agent.rt.internal_6da5971.PreMain.premain(PreMain.java:47) 
    ... 6 more 
Caused by: java.lang.NoSuchFieldException: $jacocoAccess 
    at java.lang.Class.getField(Class.java:1703) 
    at org.jacoco.agent.rt.internal_6da5971.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:138) 
    ... 9 more 
Exception in thread "main" 

Ich habe so über einen Fehler lesen mit JaCoCo und JDK 1.8, aber es wurde bereits in JaCoCo 0.7.7 gelöst.

-Dlog4j.configurationFactory=mytest.CustomConfigurationFactory 
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager 
-Dcom.sun.management.jmxremote.rmi.port=9090 
-Dcom.sun.management.jmxremote=true 
-Dcom.sun.management.jmxremote.port=9090 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.local.only=false 
-Djava.rmi.server.hostname=localhost 
-javaagent:/path/jacocoagent.jar=destfile=C:/TEMP/jacoco.exec,jmx=true 

Ich verwende:

  • JaCoCo 0.7.7
  • Log4j 2.8.1
  • JDK 1.8.0_102
  • Die VM Argumente wie folgt definiert werden

Kann jemand es lösen?

+1

Downvoters, könnten Sie bitte aus Gründen des downvote erklären? Für mich (einer der JaCoCo-Entwickler) scheint diese Frage perfekt zu sein und zeigt ein echtes Problem bei den Interaktionen zwischen Logging, JMX und JaCoCo, wie in der Antwort unten erklärt - http://Stackoverflow.com/a/43902713/244993 – Godin

Antwort

4

Wie beantwortet in JaCoCo users mailing list:

Es ist ein echtes Problem in Interaktionen zwischen JaCoCo zu sein scheint (bis auf die neueste Version, die 0.7.9 ab heute ist), JMX und Protokollierung, wenn Log4j JDK Logging Adapter ist verwendet und der JaCoCo Agent registriert JMX MBean. Tiefere Untersuchungen würden

  • entweder JaCoCo Agent konfiguriert werden sollten, um nicht zu registrieren JMX MBean, dh ohne jxm=true oder äquivalent mit jxm=false (-javaagent:jacocoagent.jar=jmx=false), einige Zeit, in der Zwischenzeit erforderlich und sollte angemerkt werden, dass JMX nicht die einzige ist, Option für Remote-Verbindungen zu JaCoCo Mittel - have a look bei output=tcpserver und output=tcpclient

  • entweder Log4j JDK Logging Adapter sollte nicht verwendet werden, dh ohne ‑Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager

aktualisieren

Und hier ist ein Ticket für ein Update auf JaCoCo Seite, die erklärt, was passiert - https://github.com/jacoco/jacoco/issues/531

Verwandte Themen