关于intellij的Java 9迁移问题与模块系统有关

时间:2018-04-27 10:09:17

标签: java intellij-idea java-9

我尝试迁移我当前的项目,以便能够在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

1 个答案:

答案 0 :(得分:0)

因此,显然有人介入了我所面临的同一问题,所以发生的事情是,当您的服务由不属于您的源代码的类启动时(在我的情况下,我的服务由Vertx的Starter类启动jar),那么IDEA最终会使用模块路径而不是类路径。幸运的是,Intellij团队非常乐于助人,请跟进票证

https://youtrack.jetbrains.com/issue/IDEA-187390 对于下一版本,当源中没有模块信息文件时,IDEA将放弃使用模块路径。

对于那些急需在Java 9中运行服务的人来说,有一种工作是基本上创建一个Main类并在启动您的服务的类中调用它,在我的案例中,它看起来像

public class Start {

    public static void main(String[] args) {
        Starter.main(args);
    }
}