将SpringBoot与Java 10模块系统一起使用时的问题

时间:2018-06-21 22:48:48

标签: java eclipse spring-boot gradle jigsaw

我刚刚从http://start.spring.io/生成了一个项目(使用完整版本模式)。我基本上选择了那里:

  • 毕业项目
  • Java(下面是我选择的Java版本10)
  • SpringBoot 2.0.3
  • NetFlix堆栈

它将正常生成示例项目。 但是在运行gradle eclipse插件以生成.project之后,它将以“旧式”方式生成项目,并在类路径中具有依赖项,而不是使用模块路径。

在Internet上搜索时,我发现要在build.gradle中添加以下代码,以便将依赖项放在模块路径中。

eclipse {
    classpath {
        file {
            whenMerged {
                entries.findAll { isModule(it) }.each { 
it.entryAttributes['module'] = 'true' }
            }
        }
    }
}

boolean isModule(entry) {
    // filter java 9 modules
    entry.kind == 'lib'  // Only libraries can be modules
}

之后,该项目已经生成,并且依赖于模块路径,我能够将其设为绿色(当然,通过添加相应的module-info.java)。

我还通过以下方式增强了compileJava任务:

compileJava {
    inputs.property("moduleName", moduleName)
    doFirst {
        options.compilerArgs = [
            '--module-path', classpath.asPath,
        ]
        classpath = files()  
    }
}

当我尝试通过Eclipse运行应用程序时,问题开始了,首先出现以下错误:

Error occurred during initialization of boot layer
java.lang.module.FindException: Unable to derive module descriptor for 
C:\xxxxxx\modules-2\files-2.1\xpp3\xpp3_min\1.1.4c\19d4e90b43059058f6e056f794f0ea4030d60b86\xpp3_min-1.1.4c.jar
Caused by: java.lang.module.InvalidModuleDescriptorException: Provider class org.xmlpull.mxp1.MXParser,org.xmlpull.mxp1_serializer.MXSerializer not in module

有什么办法可以克服?

我已经从启动程序中删除了这种依赖性(xpp3_min-1.1.4c.jar),只是为了查看会发生什么,然后出现以下异常:

Error occurred during initialization of boot layer
java.lang.module.ResolutionException: Modules aws.java.sdk.sts and aws.java.sdk.autoscaling export package com.amazonaws.auth.policy.actions to module backend

因此,似乎SpringBoot 2.0.3依赖项尚未准备好在模块路径中运行。那正确吗?我在这里错过了什么吗?

顺便说一句,我正在使用:

  • JDK 10.0.1
  • 4.8级
  • Eclipse氧气3a

0 个答案:

没有答案