我刚刚从http://start.spring.io/生成了一个项目(使用完整版本模式)。我基本上选择了那里:
它将正常生成示例项目。
但是在运行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依赖项尚未准备好在模块路径中运行。那正确吗?我在这里错过了什么吗?
顺便说一句,我正在使用: