我目前正在测试使用 jdk-9+149 将 Java 8 应用程序迁移到 Java 9/Jigsaw。
该项目采用标准 Maven 目录布局,即具有 src/main/java
, src/test/java
, ETC。
只要我添加 module-info.java
至src/main/java
, maven-compiler-plugin 无法抛出 NullPointerException。这是因为它希望找到 test
的模块信息。目录也是。所以,据我所知,选项是:
显然,这些选项似乎都不是可取的,所以我认为有一种推荐的方法可以在 Maven 项目中测试 Jigsaw 模块。不幸的是,我既找不到建议也找不到例子。
编辑:添加一些我在发布问题时不认为相关的信息(对不起)
最佳答案
Maven 对 Java 9 的总体支持,特别是对测试的支持仍在开发中 - 很多东西可以工作,但其他的可能不行。没有看到 NPE 的堆栈跟踪,这当然是猜测,但我假设你是 ran into this error .
更一般地说,单元测试如何与 Jigsaw 一起工作的问题仍在讨论中 - 甚至 on the Jigsaw mailing list .
以下是我对此事的看法:
module-info.java
)或描述符(字节码,module-info.class
)或添加大量 --add-exports
javac
的命令行标志和 java
命令编译和运行测试。这些听起来都不是特别有趣,尤其是如果您想手动完成。 --patch-module
允许添加 class
的选项-files 或 JAR 的内容到现有模块。这样 testCompile
step 可以创建一个包含源文件和测试文件的 JAR。不幸的是,除非它如上所述操作模块声明/描述,否则如果不使用 java --add-reads
添加读取边,则无法执行生成的 JAR。用于测试依赖项。不过还是比上面的好。 就个人而言,我认为 3. 是上述选项中最好的。它不需要更改项目布局,只需对
javac
进行相对较小的添加。和 java
命令。
关于maven - 将 Java 8 项目迁移到 Jigsaw 时我应该在哪里放置单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41366582/