【问题标题】:Running a module on command line gives error : Module target not found在命令行上运行模块会出错:找不到模块目标
【发布时间】:2019-03-28 09:30:21
【问题描述】:

我是 JAVA9 模块化架构的新手,我正在尝试从 Windows 命令行编译和运行 JAR 中的模块。

我创建了简单的 HelloWorld.java 主类,项目架构如下:

我可以使用以下命令成功编译和创建 JAR 文件。

编译:

javac -d target/HelloWorld src/HelloWorld/com/java/modularity/test1/HelloWorld.java src/HelloWorld/module-info.java

在“jarfile”目录下创建一个HelloWorld.jar文件:

jar -cfe jarfile/HelloWorld.jar com.java.modularity.test1.HelloWorld  target/HelloWorld/module-info.class target/HelloWorld/com/java/modularity/test1/HelloWorld.class

尝试从 JAR 文件运行模块时出现以下错误:

D:\sts_workspace\java9tutorial>java -p jarfile -m HelloWorld
module HelloWorld does not have a ModuleMainClass attribute, use -m <module>/<main-class>

在命令中更改幻灯片时出现以下错误:

D:\sts_workspace\java9tutorial>java -p jarfile -m target/HelloWorld/com.java.modularity.test1.HelloWorld
Error occurred during initialization of boot layer
java.lang.module.FindException: Module target not found

这是我的入口类 HelloWorld.java :

package com.java.modularity.test1;

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Testing first HelloWorld module ...");
    }
}

这里是 HelloWorld 模块说明:

module HelloWorld {

}

我还尝试提取我生成的 HelloWorld.jar 文件,并且“Main-Class”属性也存在于 MANIFEST.MF 文件中:

Manifest-Version: 1.0
Created-By: 1.8.0_172 (Oracle Corporation)
Main-Class: com.java.modularity.test1.HelloWorld

我需要在我的模块定义中导出入口类吗?任何建议都会帮助我解决问题。

【问题讨论】:

  • 您是否使用1.8.0_172 创建了jar?想知道它是如何出现在清单中的。另外,如果您导出包含问题中提到的 Main 类的包怎么办?

标签: java command-line java-9 java-module


【解决方案1】:

尝试改变

-m target/HelloWorld/com.java.modularity.test1.HelloWorld

-m HelloWorld/com.java.modularity.test1.HelloWorld 

因为语法是module[/mainclass]

【讨论】:

  • 我试过你提到的命令。但它没有用。新命令“java -p jarfile -m HelloWorld/com.java.modularity.test1.HelloWorld”和错误:在模块 HelloWorld 中找不到或加载主类 com.java.modularity.test1.HelloWorld。
  • 我的 HelloWorld 入口类是否需要提及导出声明?从错误看来,VM 正在 HelloWorld 模块中搜索入口类定义。
  • 另一个假设,我正在运行这个程序最新的 jdk 11.0.1,它可能有不同版本的 JAR 命令。这可能是这个问题的根源吗?
  • @GunjanShah 与 JDK 11 一起运行并不重要,因为其中没有这样的代码,即使使用较低版本的 Java 编译也可能会中断。我想知道更多关于 jar 创建部分。另外,如果您在 module-info 中导出包,是否会修复它?
猜你喜欢
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 2022-08-15
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
相关资源
最近更新 更多