Java 11:为什么 "The import xxx cannot be resolved" 即使有模块信息通知它也是必需的

Java 11: why "The import xxx cannot be resolved" even with module-info informing it is required

我从 Java 9 开始就阅读了有关模块化的知识。我知道我必须创建一个模块信息并告知公开和需要哪个包。我可以看到我的 class 路径上确实有 Java 11。但是我收到了主题中提到的错误。更准确地说,在构建时,我得到了这个错误日志

INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ zuul ---
[WARNING] Can't extract module name from xpp3_min-1.1.4c.jar: Provider class org.xmlpull.mxp1.MXParser,org.xmlpull.mxp1_serializer.MXSerializer not in module
[WARNING] ********************************************************************************************************************
[WARNING] * Required filename-based automodules detected. Please don't publish this project to a public artifact repository! *
[WARNING] ********************************************************************************************************************
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 3 source files to C:\_d\WSs\soteste\zuul\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /C:/_d/WSs/soteste/zuul/src/main/java/module-info.java:[24,18] module not found: common
[INFO] 1 error

我缺少一些额外的设置,以便让其他项目可以看到来自公共项目的 class?

PS1:我遵循 Import XXX cannot be resolved for Java SE standard classes 并设置为替代 JRE。 PS2.: 我认为这与 Eclipse 无关。顺便说一句,我正在使用这个版本:

面向企业 Java 开发人员的 Eclipse IDE。 版本:2018-12 (4.10.0) 内部版本号:20181214-0600 OS: Windows 10, v.10.0, x86_64 / win32 Java版本:11.0.2

在我的zuul项目中:

import com.test.common.security.JwtConfig;

@EnableWebSecurity  
public class SecurityTokenConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private JwtConfig jwtConfig;

...

模块-info.java

module zuul {
...
    requires common;

}

在我的共同项目中

@Getter
@ToString
public class JwtConfig {

...

模块-info.java

module common {
    exports com.test.common.security;
    exports com.test.common;
...
}

我发现了问题。对于其他对 Java9+ 更有经验的人来说,这可能看起来很愚蠢,但对我来说,花了一段时间才找到根本原因。希望它对未来的读者有用。

问题:公共项目在类路径中而不是模块路径中

解决方法:在我交requis common的时候按照Eclipse的提示移动到module-path即可;在 module-info.java 交接的时候 import com.test.common.security.JwtConfig;在 SecurityTokenConfig.java 上,提出的解决方案与我移交模块时的解决方案不同-info.java(也许对 Eclipse 团队的适度建议是从现在开始对其进行审查,但这超出了这个问题的目的).

感谢https://www.eclipse.org/community/eclipse_newsletter/2018/june/java9andbeyond.php

*** 已编辑

虽然我仍然认为上述解决方案是我问题的答案,但我必须承认,在解决这个问题后我偶然发现了一个新问题,我意识到,至少就我而言,即使使用 Java 11 我必须避免模块化(Jigsaw)。未来的读者可能也会对此话题感兴趣