我最近安装了 Oracle JDK,设置了环境变量。一切正常。
java -version
在终端上
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
我有一个简单的Hello.java
程序,我想在终端上运行。
package com.company;
public class Hello {
public static void main(String[] args) {
System.out.println("hello, world");
}
}
我编译并Hello.class
生成文件,在.../out/.../com/company/..
在我的 IDE 中运行良好,但最终我必须从终端运行。cd-ed 到 Hello.class 目录。
java Hello
给出以下错误信息。
Error: Could not find or load main class Hello
我怎样才能让它从终端运行。
答案1
将以下内容复制到名为 Hello.java 的脚本中:
package com.company;
public class Hello {
public static void main(String[] args) {
System.out.println("hello, world");
}
}
-d
以下命令中的选项将创建适当的目录层次结构。使用以下命令编译 Java 程序:然后javac -d . Hello.java
使用以下命令运行它:
java com.company.Hello
答案2
产生错误的问题
Java 在您的指令指定的路径中查找您的应用程序package
。在本例中com.company
。
您可以通过注释掉包指令来编译该简单程序,在没有包的情况下编译它,或者创建路径并通过完整路径调用它。
$ mkdir -p com/company
$ mv Hello.class com/company/
$ java com/company/hello
hello, world
如果您package com.company;
通过注释掉该行来删除它,它将按照您已经尝试过和期望的方式工作。
如果你有一个大型项目,其中包含多个用于存放类文件的文件夹,则可以使用 jar 管理器程序或命令行版本罐创建一个你好文件。
你的集成开发环境提供上面指定的路径和其他详细信息。您可以使用以下方式手动创建此环境以运行命令(以及在存档中包含多个类和包)罐命令。
使用Jar命令创建jar程序
您可以创建 Hello 应用程序以按预期运行,并使用此方法包含路径类型:
创建路径
$ mkdir -p com/company
将您的类文件放在包行的路径中:
$ mv Hello.class com/company
创建清单文件来指示main class
位置
清单.txt:
Manifest-Version: 1.0
Main-Class: com.company.Hello
跑过罐创建包的命令
$ jar cfm test.jar manifest.txt com/
现在您将创建一个新文件,名为测试文件. 第二个参数可以命名为任何名称,包括你好要不就你好。新文件可以通过多种方式运行:
$ java -jar test.jar
$ ./test.jar
如果你已经使用第二个参数创建了 jar 文件hello
,那么你可以使用以下命令运行它:
$ ./hello
您还可以重命名java.jar文件创建后可以重命名为任意名称,然后以此名称运行它。
运行 Java 类非常受限制,因为它必须通过编译它的类名来运行。
要以不带“-jar”参数的命令形式运行 jar 文件,您必须更改权限位(chmod +x Hello.jar
)。
Jar 命令详细信息
本例中的 jar 参数是:
-c 创建新的档案 -f 指定档案(jar 文件名) -m 包含指定清单文件中的清单信息
Jar 是作为 JDK 包的一部分安装的。您可以从手册页 ( man jar
) 中获取更多使用详细信息,也可以通过不带参数运行它来获取快速帮助。