Groovy 2.5 Java 10 and sparkjava

4

我尝试在安装了Java 10的服务器上运行此Groovy脚本(在Java 8上可以正常运行)。

@Grapes([
        @Grab(group='org.slf4j', module='slf4j-api', version='1.7.25'),
        @Grab(group='ch.qos.logback', module='logback-classic', version='1.2.3'),
        @Grab(group='org.apache.commons', module='commons-lang3', version='3.7'),
        @Grab(group='com.sparkjava', module='spark-core', version='2.7.2'),
        @Grab(group='javax.xml.bind', module='jaxb-api', version='2.3.0'),
        @Grab(group='com.sun.xml.bind', module='jaxb-core', version='2.3.0'),
        @Grab(group='com.sun.xml.bind', module='jaxb-impl', version='2.3.0')
])
import groovy.json.JsonOutput
import groovy.json.JsonSlurper
import groovy.util.logging.Slf4j
import org.apache.commons.lang3.exception.ExceptionUtils
import spark.Route
import static spark.Spark.*

@Slf4j
class Server {
    public static void main(String[] args) {
        int serverPort = args.length > 0 ? args[0].toInteger() : 1001
        log.info("start server at $serverPort ... ")
        port(serverPort)

        get("/hello", { req, rep -> "world" })
    }
}

但我总是会收到一个缺少依赖项的错误提示:
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v7.Java7$1 (file:/opt/groovy-2.5.0-rc-3/lib/groovy-2.5.0-rc-3.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.vmplugin.v7.Java7$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Caught: java.lang.NoClassDefFoundError: Unable to load class groovy.xml.jaxb.JaxbGroovyMethods due to missing dependency javax/xml/bind/JAXBContext
java.lang.NoClassDefFoundError: Unable to load class groovy.xml.jaxb.JaxbGroovyMethods due to missing dependency javax/xml/bind/JAXBContext
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 

你考虑过在邮件列表上提出这个问题或向Jira提交一个bug吗?这样可能会更快地得到回应,并且在最终的2.5版本发布之前可能会被修复。 - tim_yates
1
尝试使用--add-modules java.xml.bind参数运行Java 9或10运行时。有很多关于此的解释,例如在这里https://dev59.com/TFcP5IYBdhLWcg3w8uhi。 - Alex Pakka
1
可能是重复的问题:https://dev59.com/oKnka4cB1Zd3GeqPUNBg - ZhekaKozlov
2个回答

0
根据日志显示,您使用的是Groovy版本2.5.0-rc-3
升级到>= 2.5.1将解决该问题。
注意:无需导入javax.xml.bind

警告:所有非法访问操作将在未来的版本中被拒绝。 Groovy 版本:2.5.2 JVM:10.0.2 供应商:“Oracle Corporation” 操作系统:Linux - DimiDak

0

看到JEP 320我们知道一些Java EE模块已被移除:

从Java SE平台和JDK中删除Java EE和CORBA模块

堆栈跟踪提到JAXB是Java EE平台的一部分。 我建议使用Groovy v3.x,它支持JDK 9/10。

希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接