Java 9+ 项目可以在 Java 8 中使用单独的源模块吗?

Can a Java 9+ project use a separate source module in Java 8, untouched?

我有一个项目,使用 Maven 和 Java 11,它使用外部 用 Java 8 编写的库。只要库是它就可以正常工作 作为 Jar 文件导入。我正在使用 IntelliJ,但我正在寻找 对 Eclipse 也有效的答案。

我还从 GitHub 克隆了外部存储库,并且想要 在我的项目中以源代码形式使用它。一个目标是进行改进 到外部库,并能够将其上的拉取请求发送到 GitHub。但首先我希望从我的项目到库的调用能够正常工作 无需更改库源代码中的任何内容。

但是,我项目中的 class 从 外部图书馆无法做到这一点。

在 pom.xml 中,我尝试过

    <modules>
        <module>../path/to/external-libary</module>
    </modules>

好像有点效果,但是导入还是不行。

当库用作 Jar 时,此依赖项有效:

       <dependency>
            <groupId>com.github.goxr3plus</groupId>
            <artifactId>java-stream-player</artifactId>
            <version>10.0.0</version>
        </dependency>

我怀疑我必须在模块-info.java 或 pom.xml,但我想不通是什么。

如果外部库应被视为 自动模块(通过模块信息中的 'requires' 引用,而不是在 classpath),那么依赖项必须指向一个jar文件,因为自动模块只为jar文件定义。

Eclipse 通过将模块路径上的项目识别为自动模块,略微降低了限制,这在启动时仍然需要额外的步骤,因为 Java 运行时不会接受 class 文件的文件夹作为自动模块。