【发布时间】:2012-02-15 11:46:54
【问题描述】:
这应该很简单,但我以前从未做过,也没有找到任何解决方案。
我目前正在使用 Eclipse 编写我的程序,该程序导入了一些外部 JAR 库,例如 google data api 库。我可以使用 Eclipse 编译/构建/运行程序。
但是现在我想在终端运行它,那么我应该把那些JAR文件放在哪里,以及如何构建和运行程序?
谢谢!
【问题讨论】:
这应该很简单,但我以前从未做过,也没有找到任何解决方案。
我目前正在使用 Eclipse 编写我的程序,该程序导入了一些外部 JAR 库,例如 google data api 库。我可以使用 Eclipse 编译/构建/运行程序。
但是现在我想在终端运行它,那么我应该把那些JAR文件放在哪里,以及如何构建和运行程序?
谢谢!
【问题讨论】:
你可以这样做:
1)javac -cp /path/to/jar/file Myprogram.java
2)java -cp .:/path/to/jar/file Myprogram
所以,假设您在终端中的current working directory 是src/Report/
javac -cp src/external/myfile.jar Reporter.java
java -cp .:src/external/myfile.jar Reporter
看看这里设置Classpath
【讨论】:
src/external/,源文件在src/Report/Reporter.java,你能给出具体的命令吗?
/usr/bin/java -cp /home/username/folderx/j.jar:/home/username/folderx MyClass
用于编译依赖于jar的java文件
javac -cp path_of_the_jar/jarName.jar className.java
用于执行类文件
java -cp .;path_of_the_jar/jarName.jar 类名
【讨论】:
Javac Reporter.java
java 记者
同样可以在windows环境变量中设置。 例如,在 Win7 中
右键开始-->计算机 然后属性-->高级系统设置-->高级-->环境变量 在用户变量中,单击classPath,然后编辑并在最后添加jar的完整路径。 瞧
【讨论】:
假设您的 jar 应用程序“myapp.jar”中写入了以下代码 sn-p。
import org.json.JSONObject;
public class Main {
public static void main(String[] args) {
// write your code here
System.out.println("Hello World!");
JSONObject jo = new JSONObject("{ \"abc\" : \"def\" }");
System.out.println(jo.toString());
}
}
它正在使用我们从中导入“org.json.JSONObject”的外部库 json.jar。 运行以下命令会报错。
java -jar myapp.jar
异常信息:
线程“main”中的异常 java.lang.NoClassDefFoundError: org/json/JSONObject at com.reve.Main.main(Main.java:10) 引起:java.lang.ClassNotFoundException: org.json.JSONObject at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown来源)在 java.base/java.lang.ClassLoader.loadClass(未知来源) ... 1 更多
我们必须在运行 jar 文件时包含 json.jar 文件。在构建 myapp.jar 文件之前,我们必须指定文件的类路径。
在 META-INF/MANIFEST.MF 文件中:
Manifest-Version: 1.0
Class-Path: lib/json.jar lib/example2.jar
Main-Class: com.reve.Main
在 Class-Path 关键字下指定用空格分隔的外部库。然后在构建项目和工件之后,我们可以通过简单地编写我们上面讨论的相同命令来运行 jar 文件。
【讨论】: