【发布时间】: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