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