我想从Java 8迁移到Java 9.当运行我的测试时,我得到一个关于javax.xml.bind.JAXBContext的CNFE。因此,“--add-modules java.xml.bind”似乎是必需的。我试图扩展我的GRADLE_OPTS env变量,但错误依然存在。任何暗示是赞赏。JUnit 5,Java 9和Gradle:如何传递--add-modules?
4
A
回答
2
据艾伦·贝特曼,我添加了以下行build.gradle
,使gradle bootRun
也可以工作:
runtime('org.glassfish.jaxb:jaxb-runtime:2.3.0', 'javax.activation:activation:1.1.1')
4
您可以按照在迁移作为gradle-building java9 modules说这是五个基本步骤: -
当转换一个Java库项目产生的Java 9模块, 您也应五个转变到让你的项目。
添加描述该模块的
module-info.java
。修改
compileJava
任务以生成模块。修改
compileTestJava
任务以本地更改模块。修改
test
任务以使用本地更改的模块。(可选)为所有其他项目添加
Automatic-Module-Name
清单条目。
在你的使用情况,您需要确保
compileTestJava {
inputs.property("moduleName", moduleName)
doFirst {
options.compilerArgs = [
'--module-path', classpath.asPath,
'--add-modules', 'org.junit.jupiter.api', // junit5 automatic module specific
'--add-modules', 'java.xml.bind' // jaxb specific
'--add-reads', "$moduleName=org.junit.jupiter.api", // allow junit to read your module
'--patch-module', "$moduleName=" + files(sourceSets.test.java.srcDirs).asPath, // add test source files to your module
]
classpath = files()
}
}
,然后执行测试,你就不需要UDPATE的test
任务,
test {
inputs.property("moduleName", moduleName)
doFirst {
jvmArgs = [
'--module-path', classpath.asPath,
'--add-modules', 'ALL-MODULE-PATH', // to resolve all module in the module path to be accessed by gradle test runner
'--add-reads', "$moduleName=org.junit.jupiter.api",
'--patch-module', "$moduleName=" + files(sourceSets.test.java.outputDir).asPath,
]
classpath = files()
}
}
备注:对于长期的解决方案,虽然我也建议你也遵循this answer中提到的重点。
相关问题
- 1. 如何将外部类的值传递给@Nested @Test int JUnit 5?
- 2. Gradle - Java 9 - spring-data-ja
- 3. 如何在junit 5 gradle测试报告中捕获stdout/stderr?
- 4. 使用gradle从intellij升级JUnit 4到JUnit 5
- 5. Junit Mockito:如何传递参数:Arraylist,int值休息Junit API
- 6. JUnit 5,将测试类的信息传递给扩展
- 7. Jenkins Artifactory插件如何将解析器凭证传递给Gradle?
- 8. 配置gradle使用JUnit,Mockito,Hamcrest和Espresso
- 9. Gradle构建不调用JUnit
- 10. 如何从gradle运行Junit TestSuites?
- 11. JUnit的参数传递
- 12. 如何将Java代码和Junit测试结合在一起构建Gradle
- 13. 传递数据5
- 14. Java RMI:如何传递POJO
- 15. Gradle Java和MongoDB
- 16. 具有多个源组的Gradle中的JUnit 5
- 17. 如何在java中连接junit和tomcat?
- 18. 如何将命令行参数传递给gradle中的主类?
- 19. Java 9 - Spring 5&Jigsaw的REST - 可以吗?
- 20. 如何从命令行将参数传递给gradle
- 21. 当JUnit 5没有assertThat()函数时,如何在JUnit 5中使用Hamcrest?
- 22. 传递的Java和C++
- 23. 如何将Java 9'--permit-illegal-access'标志传递给Webstart应用程序?
- 24. 如何将参数从命令行传递给gradle
- 25. Java将参数动态地传递给junit测试
- 26. Gradle合并Junit报告
- 27. 如何在ant.build.clonevm中传递?
- 28. Java - 作为[a-zA-z0-9] *传递的未知字符?
- 29. 如何在JUnit @Parameters中将null作为参数传递?
- 30. 如何在junit中传递删除方法的请求
你看看[如何表达对Java EE的功能过渡Maven中依赖于Java的9 ?](https://stackoverflow.com/questions/46084751/how-to-express-dependency-in-maven-on-java-ee-features-for-transition-to-java-9/46086920#46086920)?请你详细说明你的设置。 – nullpointer
这是运行时失败,而不是编译问题。我使用Kotlin(不是Java)和Spring Boot。 @nullpointer:这是否意味着我只需要修改答案的第二部分? –
是的,只是测试执行阶段,在这种情况下,应该是您所需的更改。 – nullpointer