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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于intellij的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

答案

所以,显然有人遇到了我所面临的同一个问题,所以当你的服务从一个不属于你的资源的类开始时(在我的情况下,我的服务是由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);
    

以上是关于关于intellij的Java 9迁移问题与模块系统有关的主要内容,如果未能解决你的问题,请参考以下文章

关于Java 9模块化的10本书,每位Java开发人员必读

迁移到 Java 9 或更高版本时是不是需要切换到模块?

IntelliJ IDEA怎么使用系统默认配置的JDK

IntelliJ IDEA Ultimate 2018.3 认为我的 Java 9 项目是 Kotlin 项目

关于 Angular 9 迁移的 Angular 生产问题

JetBrains 官宣:2022.3 版本开始必须 Java 17!!