【问题标题】:Eclipse issue with java 9 and mavenjava 9和maven的Eclipse问题
【发布时间】:2018-04-17 00:32:28
【问题描述】:

我安装了版本:Oxygen.1a Release (4.7.1a) Build id:20171005-1200,支持 Java 9。

在 eclipse.ini 上有建议的配置

-vm
C:\Program Files\Java\jdk-9\bin\javaw.exe
--add-modules=ALL-SYSTEM

我已经通过 java 9(java 9 模块化)code 项目开发来测试依赖注入作为来自 Eclipse 的纯 Java 项目,但是当我集成 Maven 运行我的来自 Eclipse 时,我系统地得到以下错误

启动初始化时发生错误 layerjava.lang.module.FindException:模块 com.my.module.hello.test 没找到

唯一的解决方案是添加 VM 参数

--module-path target/classes;../my-module-api/target/classes;../my-module-it/target/classes --module com.my.module.hello.test/com.my.module.hello.Reflection

确实,如果将我在加载过程中可以看到的详细参数添加到 Vm 参数中

... [0.694s][info][class,load] java.lang.NamedPackage 来源: jrt:/java.base [0.697s][info][class,load] com.my.module.hello.MyHello 资源: 文件:/C:/Users/212442540/workspace-training/my-module-prj/my-module/target/classes/ [0.698s][信息][类,负载] java.lang.module.ModuleDescriptor$$Lambda$24/2114889273 来源: java.lang.module.ModuleDescriptor ...

当我删除“--module-path”参数时,这一行就消失了。

注意:Eclipse 能够在编译或编辑过程中正常工作。查看完成等..

我也在我的项目中添加了 modpath 依赖项

强制依赖项目配置

我在项目配置中手动添加了依赖项

看来 Eclipse 可以编译 java 9 模块,但如果与 maven 集成则无法运行模块。

强制依赖于 Configratin Run 我还手动添加了依赖项 图 1

但 eclipse 会继续删除它们。

之前:

图2

运行 eclipse 后恢复:

图 3

如果与 maven 集成,eclipse 似乎会系统地重置配置。

【问题讨论】:

  • 那段代码难道不是模块功能的演示吗?它甚至可以在没有这些参数的情况下工作吗?
  • java 命令应该是 java --module-path target/classes;../my-module-api/target/classes;../my-module-it/target/classes --模块 com.my.module.hello.test/com.my.module.hello.Reflection 但我期待 Eclipse 为我完成这项工作
  • 您是否通过任何 Eclipse 指令来设置它们,例如 this one
  • 是的..tx ..-vm C:\Program Files\Java\jdk-9\bin\javaw.exe --add-modules=ALL-SYSTEM
  • @eis : 在 Maven 之前是的,现在没有了。

标签: java eclipse maven java-platform-module-system module-path


【解决方案1】:

我可以重现你的问题,它看起来像 M2Eclipse 的错误。

Please report it to EclipseBug 526838 - Eclipse wrong Module dependencies on Run configuration when integrated with maven

作为解决方法,使用外部工具配置而不是Java应用程序运行配置:

  1. 运行 > 外部工具 > 外部工具配置...
  2. 选择程序并点击左上角的新启动配置图标
  3. 输入以下值:
     
    位置:C:\windows\system32\cmd.exe
     
    工作目录:${workspace_loc:/my-module}
     
    参数:

    /C java
    -p target/classes;../my-module-api/target/classes;../my-module-it/target/classes
    -m com.my.module.hello.test/com.my.module.hello.Reflection
  4. 点击运行

【讨论】:

  • @venergiac 感谢您的报告。我在答案中添加了指向错误的链接。
  • @giusy 是的,我想是的,因为当我重新打开运行配置时,手动插入的类路径/模块路径条目已经消失。但我不确定它是 m2e 还是 JDK 错误。
猜你喜欢
  • 2018-04-03
  • 2018-03-19
  • 2022-01-06
  • 2012-07-08
  • 2013-03-22
  • 2011-01-17
相关资源
最近更新 更多