【问题标题】:Java 9 migration on intellij issues with module systemJava 9 迁移与模块系统有关的 intellij 问题
【发布时间】:2018-04-27 10:09:17
【问题描述】:

我正在尝试迁移我当前的项目,以便能够在 java 9 上编译和运行它。我首先尝试将基于 java8 的项目移动到 java9,而不需要太多努力,这意味着基本上不会移动到 jigsaw。

项目结构类似于

myjava-service [myjava-service-parent] parent-pom with the following modules
 - myjava-service 
 - myjava-service-common
 - myjava-service-test

它与 mvn clean package 完美编译,并在我执行该 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

【问题讨论】:

  • 这个问题要么太模糊,要么太宽泛。您能否具体说明您的 IDE 报告的确切错误?另外,intellij 是否在 java 9 上运行?
  • 嘿,是的,我可以,正如我所说,许多库的拆分包问题,这只是问题之一,但是我可以给你,我会用一些错误更新我的问题,但是请我不指望补丁命令能解决这个问题,我已经修补了很多库:(
  • 我刚刚阅读了我的问题,我明白你的意思看起来我想解决所有问题,但实际上我只是想在没有激活 java 模块系统的情况下在 intellij 上运行我的项目,也许现在听起来更好?
  • 你必须在 Java 9 上运行吗?
  • 是的,我们真的很想知道将服务迁移到 java 9 需要付出多少努力,我们不想落后于 java 版本。我们想优雅地做到这一点,首先在乞讨中以最小的努力启动并运行此服务,然后慢慢添加 java 9 功能等......

标签: java intellij-idea java-9


【解决方案1】:

所以,显然有人遇到了我所面临的同样问题,所以发生的情况是,当您的服务由不属于您的源的类启动时(在我的情况下,我的服务由 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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-19
    • 2018-03-13
    • 2020-06-24
    • 1970-01-01
    • 2018-09-27
    • 2018-06-21
    • 2017-10-26
    • 1970-01-01
    相关资源
    最近更新 更多