这是我的第一个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程序时正确设置类路径?
答案 0 :(得分:4)
尝试以这种方式执行 在Windows中
java -cp .;path/to/vendorcatalogapi.jar MainClass
在linux环境中
java -cp .:path/to/vendorcatalogapi.jar MainClass
答案 1 :(得分:3)
java
和javac
命令只接受一个cp
或classpath
参数。
如果您有多个类路径元素,可以使用分隔符元素连接它们,在Windows上为';'
,在unix系统上为':'
:
javac -cp .;vendorcatalogapi.jar update.java
java -cp .;vendorcatalogapi.jar MyFirstClass