基于模块系统的intellij问题的Java 9迁移
我正在尝试迁移我当前的项目,以便能够在Java9上编译和运行它。我首先尝试将一个基于java8的项目迁移到java9,而不做太多的工作,这意味着基本上不迁移到jigsaw 项目结构类似于基于模块系统的intellij问题的Java 9迁移,java,intellij-idea,java-9,Java,Intellij Idea,Java 9,我正在尝试迁移我当前的项目,以便能够在Java9上编译和运行它。我首先尝试将一个基于java8的项目迁移到java9,而不做太多的工作,这意味着基本上不迁移到jigsaw 项目结构类似于 myjava-service [myjava-service-parent] parent-pom with the following modules - myjava-service - myjava-service-common - myjava-service-test 它使用mvn clea
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服务,但显然intellij将其理解为java 9模块,以及许多拆分包问题、未找到的类和其他我正在努力解决的问题,那么,我的问题是,有没有一种方法可以在Java9环境下在intellij上运行服务,而不会以某种方式触发新的java模块系统
记录在案的问题,如
java.lang.module.ResolutionException:Modules javax.annotation.api和annotations将包javax.annotation导出到module javax.el
因此,显然有人介入了我所面临的相同问题,所以当您的服务由一个不属于源代码的类启动时会发生什么(在我的例子中,我的服务是由Vertx jar中的Starter类启动的)然后IDEA最终使用模块路径而不是类路径
,对于下一版本,如果源代码中没有模块信息文件,IDEA将放弃使用模块路径。
另外,对于那些迫切需要在Java9中运行服务的人来说,有一项工作就是创建一个主类,并在启动服务的类中调用它,在我的例子中,它看起来像
public class Start {
public static void main(String[] args) {
Starter.main(args);
}
}
这个问题要么太模糊,要么太宽泛。你能具体说明你的IDE报告的确切错误吗?还有,intellij是否在java 9上运行?嘿,是的,我可以,正如我所说,将包问题与许多库分开,这只是问题之一,但是的,我可以告诉你,我会用一些错误更新我的问题,但请不要期待修补程序:为了解决这个问题,我已经修补了许多库:(我刚刚读了我的问题,我明白了你的意思,看起来我想解决所有问题,但实际上我只想在intellij上运行我的项目,而不激活java模块系统,也许现在听起来更好了?不过,你必须在java 9上运行吗?是的,我们真的想知道迁移服务需要付出多少努力对于java 9,我们不想在java版本方面落后太多。我们希望能够优雅地做到这一点,首先在乞讨中以最小的努力安装并运行此服务,然后慢慢添加java 9功能等等。。。