Java 为什么';现在JNLP的Clojure失败了吗?

Java 为什么';现在JNLP的Clojure失败了吗?,java,clojure,jnlp,clojure-java-interop,Java,Clojure,Jnlp,Clojure Java Interop,我有一个Java应用程序已经使用了一段时间,它使用嵌入式Clojure脚本进行一些计算。它的旧版本在当前的JRE中仍然可以正常运行,但是如果我去构建一个新版本(只有对代码的更改在不相关的Java代码中),它就无法正常启动。它在当地也运行得很好。只有JNLP受到影响 java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "accessDeclaredMembers") at ja

我有一个Java应用程序已经使用了一段时间,它使用嵌入式Clojure脚本进行一些计算。它的旧版本在当前的JRE中仍然可以正常运行,但是如果我去构建一个新版本(只有对代码的更改在不相关的Java代码中),它就无法正常启动。它在当地也运行得很好。只有JNLP受到影响

java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "accessDeclaredMembers")
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.Class.checkMemberAccess(Unknown Source)
    at java.lang.Class.getDeclaredConstructors(Unknown Source)
    at clojure.core$generate_proxy.invoke(core_proxy.clj:137)
    at clojure.core$get_proxy_class.doInvoke(core_proxy.clj:261)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.core$apply.invoke(core.clj:617)
    at clojure.core$proxy.doInvoke(core_proxy.clj:335)
    at clojure.lang.RestFn.invoke(RestFn.java:1152)
    at clojure.lang.Var.invoke(Var.java:465)
    at clojure.lang.AFn.applyToHelper(AFn.java:248)
    at clojure.lang.Var.applyTo(Var.java:532)
    at clojure.lang.Compiler.macroexpand1(Compiler.java:6468)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:6546)
    at clojure.lang.Compiler.analyze(Compiler.java:6361)
    at clojure.lang.Compiler.analyze(Compiler.java:6322)
    at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5708)
    at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:6009)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:6560)
    at clojure.lang.Compiler.analyze(Compiler.java:6361)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:6548)
    at clojure.lang.Compiler.analyze(Compiler.java:6361)
    at clojure.lang.Compiler.analyze(Compiler.java:6322)
    at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5708)
    at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5139)
    at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3751)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:6558)
    at clojure.lang.Compiler.analyze(Compiler.java:6361)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:6548)
    at clojure.lang.Compiler.analyze(Compiler.java:6361)
    at clojure.lang.Compiler.access$100(Compiler.java:37)
    at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:529)
    at clojure.lang.Compiler.analyzeSeq(Compiler.java:6560)
    at clojure.lang.Compiler.analyze(Compiler.java:6361)
    at clojure.lang.Compiler.analyze(Compiler.java:6322)
    at clojure.lang.Compiler.eval(Compiler.java:6623)
    at clojure.lang.Compiler.load(Compiler.java:7064)
    at clojure.lang.RT.loadResourceScript(RT.java:370)
    at clojure.lang.RT.loadResourceScript(RT.java:361)
    at clojure.lang.RT.load(RT.java:440)
    at clojure.lang.RT.load(RT.java:411)
    at clojure.core$load$fn__1451.invoke(core.clj:5530)
    at clojure.core$load.doInvoke(core.clj:5529)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.core$eval1658.invoke(core.clj:6154)
    at clojure.lang.Compiler.eval(Compiler.java:6619)
    at clojure.lang.Compiler.load(Compiler.java:7064)
    at clojure.lang.RT.loadResourceScript(RT.java:370)
    at clojure.lang.RT.loadResourceScript(RT.java:361)
    at clojure.lang.RT.load(RT.java:440)
    at clojure.lang.RT.load(RT.java:411)
    at clojure.lang.RT.doInit(RT.java:447)
    at clojure.lang.RT.<clinit>(RT.java:329)
    at myapp(myapp.java:32)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.javaws.Launcher.executeApplication(Unknown Source)
    at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
    at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
    at com.sun.javaws.Launcher.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

我们目前正在为此应用程序使用自签名证书(上周我一直在与Comodo合作,试图获得一个可信的证书,看看这是否有帮助,但我仍然没有收到它,我需要此应用程序尽快工作)。让我感到奇怪的是,旧版本(也以完全相同的方式自签名)可以工作。我就是不能建立一个新版本。我已经回滚了配置,所以只有实际的java代码更改应该是不同的,但仍然没有运气。我在某个地方丢失了一些东西…

您必须将其放入.jnlp文件中:


此外,根据您的安全设置或使用Java8,添加

:清单{“权限”“所有权限”}

到您的project.clj。Clojure要求您授予它“所有权限”权限。我不完全确定它是否对所有Clojure应用程序都是必需的,但我还需要对我的项目进行AOT,以使其在JNLP应用程序中工作。将此添加到“:profiles:uberjar”:

:aot:all

:omit sources true

我现在也尝试提升对它的权限(),但没有效果。我仍然不介意回答,但没有时间尝试解决这个问题。我不得不将所有Clojure代码移植到纯Java中,并放弃在JNLP应用程序中使用Clojure。
RT.loadResourceScript("myapp/clojure_scripts.clj"); // Initialize Clojure script processor with our script