2017-05-10 17 views
0

JaCoCoエージェントをjavaws Web Start(JNLP)アプリケーションに接続する方法はありますか?Java Web Start(JNLP)アプリケーション用の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」をコンソールに出力します。

私が試した:

  • JAVAWS_VM_ARGS="-javaagent:/path/to/jacocoagent.jar"環境varuableを設定し、これらのいずれもが、コードカバレッジとjacoco.execファイルを生成し、JNLPに

<j2se version="1.6+" java-vm-args="-javaagent:/path/to/jacocoagent.jar" />を設定します。

javaws -J-javaagent:/path/to/jacocoagent.jar app.jnlpを実行しているかJAVA_TOOL_OPTIONS="-javaagent:/path/to/jacocoagent.jar"を設定することで、エージェントが、結果をロードしようとするように見えるん:

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 

なJNLP JVMにJaCoCoエージェントを添付する方法はありますか?

答えて

0

私はそれを考え出した:(パスは、Windows上で異なりますC:\Program Files\Java\<java-version>\lib\security\javaws.policy/etc/icedtea-web/javaws.policy

grant { 
    permission java.security.AllPermission; 
}; 

を追加

  • 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はJavaエージェントをサポートしていませんhttps://stackoverflow.com/a/16960559/1396068


として、the Java Web Start documentationあたりのVMの引数の数が限られ、サポートされています安全とみなされる。

関連する問題