我尝试迁移我当前的项目,以便能够在java 9上编译和运行它。我首先尝试将基于java8的项目移动到java9而不需要太多努力,这意味着基本上不会转向拼图。
项目结构就像
myjava-service [myjava-service-parent] parent-pom with the following modules
- myjava-service
- myjava-service-common
- myjava-service-test
它与mvn clean包完美编译,并在执行fat.jar时运行
当我尝试使用intellij运行它时,噩梦开始,在intellij上运行我必须设置我想要执行的模块,这是myjava-service但是显然intellij将它理解为java 9模块以及很多拆分包问题,找不到的类和我正在努力修复的其他问题,所以我的问题是有没有办法在java 9环境下运行intellij上的服务,而不会以某种方式触发新的java模块系统?
对于记录问题,如
java.lang.module.ResolutionException: Modules javax.annotation.api and annotations export package javax.annotation to module javax.el
所以,显然有人遇到了我所面临的同一个问题,所以当你的服务从一个不属于你的资源的类开始时(在我的情况下,我的服务是由Vertx jar中的Starter类启动的)然后会发生什么IDEA最终使用模块路径而不是类路径。幸运的是,Intellij团队非常乐于助人,跟进了门票
https://youtrack.jetbrains.com/issue/IDEA-187390,对于下一个版本,当源中没有module-info文件时,IDEA将禁止使用模块路径。
另外对于那些急需在java 9中运行服务的人来说,有一个工作就是创建一个Main类并在启动你的服务的类中调用它,在我的Case中它看起来像
public class Start {
public static void main(String[] args) {
Starter.main(args);
}
}