2017-05-10 20 views
0

JaCoCo 에이전트를 JNLP (javaws Web Start) 응용 프로그램에 첨부 할 수 있습니까?JNLP (Java Web Start) 응용 프로그램의 JaCoCo 에이전트로 코드 범위를 측정하는 방법은 무엇입니까?

나는 보통 javaws app.jnlp을 호출하여 응용 프로그램을 실행합니다. 다음은 샘플 jnlp 파일입니다 :

<?xml version="1.0" encoding="utf-8"?> 
<jnlp spec="1.0+" codebase="http://localhost:8000/" href="test.jnlp"> 
    <information> 
     <title>Testing</title> 
     <vendor>vendor</vendor> 
     <homepage href="http://localhost:8080/" /> 
     <description>Testing Testing</description> 
     <security> 
      <all-permissions/> 
     </security> 
    </information> 
    <security> 
     <all-permissions/> 
    </security> 
    <resources> 
     <j2se version="1.6+" /> 
     <jar href="test.jar" /> 
    </resources> 
    <application-desc main-class="Main" /> 
</jnlp> 

콘솔 응용 프로그램 자체가 바로 인쇄에 "Hello World".

내가 시도 :

  • 이 JNLP

어느 이러한 코드 커버리지와 jacoco.exec 파일을 생성의에 <j2se version="1.6+" java-vm-args="-javaagent:/path/to/jacocoagent.jar" />을 설정 JAVAWS_VM_ARGS="-javaagent:/path/to/jacocoagent.jar" 환경 varuable을 설정합니다. 이러한 JNLP JVM에 JaCoCo 에이전트를 첨부 할 수있는 방법이 있나요

java.security.AccessControlException: access denied ("java.util.PropertyPermission" "user.dir" "read") 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) 
    at java.security.AccessController.checkPermission(AccessController.java:884) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1294) 
    at java.lang.System.getProperty(System.java:717) 
    at java.io.UnixFileSystem.resolve(UnixFileSystem.java:133) 
    at java.io.File.getAbsolutePath(File.java:556) 
    at java.io.File.getAbsoluteFile(File.java:572) 
    at org.jacoco.agent.rt.internal_8db3ebe.output.FileOutput.startup(FileOutput.java:42) 
    at org.jacoco.agent.rt.internal_8db3ebe.Agent.startup(Agent.java:122) 
    at org.jacoco.agent.rt.internal_8db3ebe.Agent.getInstance(Agent.java:50) 
    at org.jacoco.agent.rt.internal_8db3ebe.PreMain.premain(PreMain.java:45) 
    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) 
Exception in thread "main" java.lang.reflect.InvocationTargetException 
    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.security.AccessControlException: access denied ("java.lang.RuntimePermission" "shutdownHooks") 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) 
    at java.security.AccessController.checkPermission(AccessController.java:884) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at java.lang.Runtime.addShutdownHook(Runtime.java:209) 
    at org.jacoco.agent.rt.internal_8db3ebe.Agent.getInstance(Agent.java:51) 
    at org.jacoco.agent.rt.internal_8db3ebe.PreMain.premain(PreMain.java:45) 
    ... 6 more 

:

javaws -J-javaagent:/path/to/jacocoagent.jar app.jnlp을 실행 JAVA_TOOL_OPTIONS="-javaagent:/path/to/jacocoagent.jar"를 설정에서 에이전트하지만 결과를로드하려고하는 것입니까?

답변

0

나는 그것을 알아 냈 : 추가

grant { 
    permission java.security.AllPermission; 
}; 

/etc/icedtea-web/javaws.policy (경로는 Windows에서 다릅니다 C:\Program Files\Java\<java-version>\lib\security\javaws.policy을)를 실행할 때 보안 예외를 제거있어 하나

  • javaws -J-javaagent:/path/to/jacocoagent.jar app.jnlp
  • 또는 JAVA_TOOL_OPTIONS="-javaagent:/path/to/jacocoagent.jar" javaws app.jnlp

및 jacoco.exec 파일이 만들어집니다.

이 작동하려면 분명히, 응용 프로그램이 서명 될 필요가 있습니다 : java-vm-args 자바 에이전트를 지원하지 않습니다 https://stackoverflow.com/a/16960559/1396068


으로, the Java Web Start documentation 당 VM의 인수의 제한된 수의 지원으로하는 안전한 것으로 간주됩니다.