我是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文件,并且MANIFEST.MF文件中也存在“ Main-Class”属性:
Manifest-Version: 1.0
Created-By: 1.8.0_172 (Oracle Corporation)
Main-Class: com.java.modularity.test1.HelloWorld
我是否需要在模块定义中导出条目类?任何建议都将帮助我解决问题。
答案 0 :(得分:0)
尝试更改
-m target/HelloWorld/com.java.modularity.test1.HelloWorld
到
-m HelloWorld/com.java.modularity.test1.HelloWorld
因为语法是 module [/ mainclass]