【问题标题】:Running Java program with classpaths使用类路径运行 Java 程序
【发布时间】:2014-09-16 08:57:39
【问题描述】:

这是我的第一个 java 代码。如果这个问题太幼稚,请见谅。

我有一个外部 jar 文件,一个 API。我希望能够使用 java 程序调用此 API 中的方法。我写了以下代码:

update.java:

import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.io.IOException;
import rediff.inecom.catalog.product.CSVAPI;

class MyFirstClass{
    private final static String api_key = "xyz";
    private final static String path = "/path/to/myfile.csv";

    public void myFunction() {
        CSVAPI cvsapi = new CSVAPI();
        System.out.println(cvsapi);
        try {
            String output = cvsapi.UpdateCSVAPI(api_key,path);
            System.out.println(output);
            System.out.println("Success!");
        }
        catch (Exception e) {
            System.out.println("catch");
            e.printStackTrace(); 
        }
    }

    public static void main(String args[]){
        new MyFirstClass().myFunction();
    }
}

我使用以下命令编译它:

javac -cp vendorcatalogapi.jar update.java

我正在尝试使用以下命令运行它:

java -cp vendorcatalogapi.jar -cp . MyFirstClass

但我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: rediff/inecom/catalog/product/CSVAPI
    at MyFirstClass.myFunction(update.java:12)
    at MyFirstClass.main(update.java:26)
Caused by: java.lang.ClassNotFoundException: rediff.inecom.catalog.product.CSVAPI
    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:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 2 more

如何在运行 Java 程序时正确设置类路径?

【问题讨论】:

  • java -cp .;vendorcatalogapi.jar MyFirstClass 用于Windows,java -cp .:vendorcatalogapi.jar MyFirstClass 用于Unix(类似)。只是一个提示:给.java 文件提供与你的java 类相同的名称。你会更容易找到课程。
  • Bdw 你在环境变量中设置了类路径吗??
  • @BackSlash:谢谢它的工作!

标签: java classpath


【解决方案1】:

尝试以这种方式执行 在窗口中

java -cp .;path/to/vendorcatalogapi.jar MainClass

在linux环境下

java -cp .:path/to/vendorcatalogapi.jar MainClass

【讨论】:

    【解决方案2】:

    javajavac 命令只接受一个 cpclasspath 参数。

    如果您有多个类路径元素,您可以使用分隔元素将它们连接起来,在 windows 上是 ';',在 unix 系统上是 ':'

    javac -cp .;vendorcatalogapi.jar update.java
    java -cp .;vendorcatalogapi.jar MyFirstClass
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-12
      • 2014-10-19
      • 2021-07-16
      • 2011-09-18
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多