2

我在运行 Java 9.0.1 的 Eclipse Oxygen.1a Release (4.7.1a) 的 Maven 项目中创建了一个简单的 Hello World 主类和一个 module-info.java 文件。

当我尝试通过右键单击启动主类 - 作为 Java 应用程序运行时,出现错误:

启动层初始化时出错
java.lang.module.FindException: Module com.github.gv2011.quarry.modules.moda not found

我可以从 target/classes 目录的命令行成功运行它:

java -p . -m com.github.gv2011.quarry.modules.moda/com.github.gv2011.quarry.modules.moda.Hello
Hello

如果我手动编辑创建的启动配置并添加 VM 参数

-p target/classes
-m com.github.gv2011.quarry.modules.moda/com.github.gv2011.quarry.modules.moda.Hello

它也有效。

有没有一种更舒适的方式来从 Eclipse 启动主类而无需手动启动配置编辑?

主类:

package com.github.gv2011.quarry.modules.moda;
public class Hello {
  public static void main(final String[] args) {
    System.out.println("Hello");
  }
}

模块-java:

module com.github.gv2011.quarry.modules.moda {
  exports com.github.gv2011.quarry.modules.moda;
}

相关问题:Eclipse - 添加 module-info.java 时找不到模块

Eclipse 创建的启动配置(不工作)是这样的:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
    <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
        <listEntry value="/quarry-modules-a/src/main/java/com/github/gv2011/quarry/modules/moda/Hello.java"/>
    </listAttribute>
    <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
        <listEntry value="1"/>
    </listAttribute>
    <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
    <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.github.gv2011.quarry.modules.moda.Hello"/>
    <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="quarry-modules-a"/>
    <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
</launchConfiguration>

有效的是:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
    <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
        <listEntry value="/quarry-modules-a/src/main/java/com/github/gv2011/quarry/modules/moda/Hello.java"/>
    </listAttribute>
    <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
        <listEntry value="1"/>
    </listAttribute>
    <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
    <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.github.gv2011.quarry.modules.moda.Hello"/>
    <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="quarry-modules-a"/>
    <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
    <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-p target/classes&#13;&#10;-m com.github.gv2011.quarry.modules.moda/com.github.gv2011.quarry.modules.moda.Hello"/>
</launchConfiguration>
4

2 回答 2

1

这将在 Eclipse Photon 中修复(我已经使用 4.8M6 进行了检查)。

如果你不想等到六月,你可以从https://www.eclipse.org/downloads/index-developer.php下载当前的里程碑版本

设置模块路径以前根本没有在 m2e 中为 Oxygen 实现(它是在https://bugs.eclipse.org/bugs/show_bug.cgi?id=529398中为 Photon 实现的。)

于 2018-05-08T06:58:36.733 回答
0

正如评论中所指出的,不幸的是,有一个Eclipse 错误很少引起注意(这对我来说似乎是一个应该立即修复的阻止程序)。

至于现在,我认为这是最简单的解决方法:

  • 转到您的启动配置并找到 VM 参数。
  • 输入-p ${project_classpath:module_name}(将module_name替换为真实的模块名称)。
于 2018-05-08T04:45:34.000 回答