我目前正在测试如何使用jdk-9+149将Java 8应用程序迁移到Java 9/ Jigsaw。
该项目已在标准Maven目录布局中进行布局,即具有src/main/java、src/test/java等。
一旦我将module-info.java添加到src/main/java中,maven编译器插件就会抛出一个NullPointerException。这是因为它也希望为test目录找到一个模块信息。因此,据我所知,选择如下:
显然,这两个选项似乎都是可取的,因此我假设在Maven项目中有一种测试Jigsaw模块的推荐方法。不巧的是,我既找不到建议,也找不到例子。
编辑:添加一些我认为与问题无关的信息(对不起)
发布于 2016-12-28 18:33:47
Maven一般对Java 9的支持,特别是对测试的支持仍在开发中--很多东西都能工作,但其他的可能不行。没有看到NPE的堆栈跟踪,这当然是推测,但我假设您是遇到这个错误。
更普遍的是,单元测试将如何与Jigsaw一起工作的问题仍在讨论中--甚至是在拼图邮件列表上。
以下是我对这件事的看法:
module-info.java)或描述符(字节代码,module-info.class),或者在编译和运行测试的javac和java命令中添加大量--add-exports命令行标志。这些听起来没有什么特别有趣的,尤其是如果你想用手做的话。--patch-module选项,该选项允许向现有模块中添加class-files或JAR内容。这样,testCompile步骤就可以创建一个包含源文件和测试文件的JAR。不幸的是,除非像上面所描述的那样操纵模块声明/描述,否则如果不为测试依赖项添加带有java --add-reads的读边,就无法执行得到的JAR。不过,比上面好多了。就我个人而言,我认为3.是上述方案中最好的一种。它不需要更改项目布局,只需要对javac和java命令进行相对较小的添加。
发布于 2016-12-28 22:43:03
您至少必须使用maven编译器-plugin3.6.0来支持拼图。但是,由于build +148类文件的二进制结构发生了变化,所以插件无法像以前那样提取模块名(需要模块名才能编译测试)。我正在努力解决这个问题,但我可能依赖于ASM的一个新版本。
更新:maven编译器-plugin-3.6.1已经发布,因此恢复了对拼图的支持。
发布于 2017-10-12 04:39:32
与建议在这里一样,使用maven编译器的更新版本-plugin:3.7.0将帮助您修复以下问题:-
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>9</source>
<target>9</target>
<compilerArgument>-Xlint:all</compilerArgument>
</configuration>
</plugin>
</plugins>在其中,您可以将单元测试放在与模块化之前相同的目录下。这是来自我的样本工程,它是基于JDK9和Maven3+的。该项目遵循屏幕截图中描述的目录结构:-

然后发布这段代码,只需使用以下命令执行测试:
mvn test在项目的根目录中,查找测试将像往常一样执行。
https://stackoverflow.com/questions/41366582
复制相似问题