如何在Eclipse中运行Java 9主类而不编辑启动配置?

时间:2017-12-09 12:17:15

标签: eclipse java-9 eclipse-oxygen java-module java-10

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

当我尝试右键单击启动主类时 - 运行为Java应用程序 我收到错误:

  

启动层初始化期间发生错误
  java.lang.module.FindException:找不到模块com.github.gv2011.quarry.modules.moda

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

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

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

-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 not found when adding 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>

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

正如评论中所指出的那样,有一个Eclipse bug很遗憾很少受到关注(这看起来像是一个应该立即修复的阻止者)。

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

  • 转到启动配置并找到VM参数。
  • 输入-p ${project_classpath:module_name}(用实际模块名称替换 module_name )。