java - 如何运行包含 .jar 文件的 java 程序

标签 java linux jakarta-ee ubuntu javac

我有两个类(class)

CLASS1 (the main class)
    - calls threading glass


CLASS2 (the threading class)
    - calls function
    - calls json.simple.jar functons

和一个 .JAR ( https://code.google.com/p/json-simple/)

jar/json.simple.jar

现在的主要问题是我实际上设法使这两个类都可以使用这些命令进行编译

javac -d . -cp '.:jar/json.simple.jar' *.java;

这将创建一个名为 package1 的文件夹,然后当我尝试运行它时出现错误

java javanolo.CLASS1 -jar 'jar/json.simple.jar';


Selected (9) IPS ... <-- this is the first **println**
Exception in thread "main" java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException
        at javanolo.CLASS1.main(CLASS1.java:70)
Caused by: java.lang.ClassNotFoundException: org.json.simple.parser.ParseException
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 1 more

我认为这是因为它没有找到一些 json 简单函数。为什么?我已经导入了它们

// json encode/decode
import org.json.simple.JSONValue;
import org.json.simple.JSONObject;
import org.json.simple.parser.ParseException;

而且我确定我已经导入了 .jar,因为如果我运行

javac -d . *.java;


error :

import org.json.simple.JSONValue;
^
CLASS1.java:14: error: package org.json.simple does not exist
import org.json.simple.JSONObject;
^
CLASS1.java:15: error: package org.json.simple.parser does not exist
import org.json.simple.parser.ParseException;
^
CLASS2.java:16: error: package org.json.simple does not exist
import org.json.simple.JSONValue;
^
CLASS2.java:17: error: package org.json.simple does not exist
import org.json.simple.JSONObject;
^
CLASS2.java:18: error: package org.json.simple.parser does not exist
import org.json.simple.parser.ParseException;
^
CLASS2.java:148: error: cannot find symbol
public Map<String,String> openAndGetGeoDataByProxy(String ip,String port,int timeout) throws IOException, InterruptedException, ParseException
                                                                    ^
symbol:   class ParseException
location: class CLASS2
CLASS2.java:99: error: cannot find symbol
} catch (ParseException ex) {
^
symbol:   class ParseException
location: class CLASS2
CLASS2.java:188: error: cannot find symbol
Object jsonObject = JSONValue.parse(line);
^
symbol:   variable JSONValue
location: class CLASS2
CLASS2.java:191: error: cannot find symbol
JSONObject jsonArray = (JSONObject)jsonObject;
^
symbol:   class JSONObject
location: class CLASS2
CLASS2.java:191: error: cannot find symbol
JSONObject jsonArray = (JSONObject)jsonObject;
^
symbol:   class JSONObject
location: class CLASS2
CLASS2.java:194: error: cannot find symbol
JSONObject jsonArray2 = (JSONObject)jsonArray.get("array_result");
^
symbol:   class JSONObject
location: class CLASS2
CLASS2.java:194: error: cannot find symbol
JSONObject jsonArray2 = (JSONObject)jsonArray.get("array_result");
^
symbol:   class JSONObject
location: class CLASS2

所以我确定在编译时使用了 json-simple.jar。

  1. 主要问题是,我如何使用该 .jar 文件运行 CLASS1 和 CLASS2?
  2. 为什么基于 LINUX 的系统与基于 WINDOWS NETBEANS 的系统如此不同?我的意思是 java 是独立于平台的...
  3. 我能否通过 SFTP 将 NETBEANS 连接到我的服务器,以便我可以直接在那里编码。

谢谢。

编辑尝试

我已经尝试了以下命令,它们都不起作用,它给我的消息就像我正在运行 java -help 命令

尝试1 java -cp .;jar/json.simple.jar javanolo.CLASS1

尝试2 java -cp .;'/root/folder/folder/jar/json.simple.jar' j​​avanolo.CLASS1

尝试3 java -cp .;/root/folder/folder/jar/json.simple.jar javanolo.CLASS1

谁能帮帮我(聊天会更好)?我真的需要这个

最佳答案

有了这个:

java javanolo.CLASS1 -jar 'jar/json.simple.jar'

你运行你的类并给出命令行的其余部分,即 -jar jar/json.simple.jar 作为参数。

你想要的是:

java -cp .;jar/json.simple.jar javanolo.CLASS1

或者,在 UNIX shell 中:

java -cp .:jar/json.simple.jar javanolo.CLASS1

请注意,您的类路径在编译和执行时是相同的。

关于java - 如何运行包含 .jar 文件的 java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20721739/

相关文章:

java - 带有教程的示例企业标准 Spring 应用程序

java - 更改java中的最低有效位(LSB)

java - Jmeter TCP 采样器不循环

java - 线程安全的 Servlet

linux - 循环遍历 Bash 中路径变量的元素

java - 我应该为 Eclipse 中的每个 Java 项目创建工作区吗

linux - Bash 中的日期比较

python - 将手动安装的 python 库集成到系统中?

java - 如何在 Java EE 中启动后台进程

java - 将 Maven java 应用程序作为依赖项的 Maven Web 项目?