我正在尝试从许多jar文件中导入许多类,例如:
//httpcore-4.4.10.jar
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.ContentType;
//commons-collections4-4.4.jar
import org.apache.commons.collections4.ListUtils;
//httpclient-4.5.10.jar
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPatch;
我在终端中使用以下内容:
javac -cp "./apache/libs/*" MainClass.java
可能的jar文件是: httpcore-4.4.10.jar,commons-collections4-4.4.jar,httpclient-4.5.10.jar
它正确编译,然后我尝试运行该文件:
java -cp "apache/lib/*" MainClass
我得到Error: Could not find or load main class MainClass
当我这样做
java MainClass
我得到:
java.lang.ClassNotFoundException: org.apache.http.client.methods.HttpEntityEnclosingRequestBase
这很奇怪,因为我也从同一个jar文件中导入了其他类,并且它们也被加载
有时候,我在lib中有相同版本的jar,但是我删除了它。
一段代码:
public void call_api(String json_str, String json_type) throws Exception {
CloseableHttpClient client = HttpClients.createDefault();
HttpEntityEnclosingRequestBase httpObj;
json_str = json_str.replaceAll("\'", "\"");
json_str = json_str.replaceAll("True", "true");
json_str = json_str.replaceAll("False", "false");
证明我可以从同一个jar文件中获取CloseableHttpClient
类,然后无法获取HttpEntityEnclosingRequestBase
答案 0 :(得分:1)
这里:
java -cp "apache/lib/*" MainClass
将您的库放在类路径上。
java MainClass
仅将MainClass放在类路径上(假设位于当前路径中) 目录)。
含义:您希望类路径包含所有个包含必需类的位置:具有库的目录和具有您的类的目录。
尝试类似
java -cp "./:apache/lib/*" MainClass
之类的。关键是:确保在类路径上显示所有所有所需的目录(对我上面的示例不太确定,因为apache/lib
有点腥:您可能应该从此处的绝对路径开始)!