从jar文件导入多个类适用于某些类,而不适用于其他类

时间:2019-11-21 12:41:46

标签: java jar

我正在尝试从许多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

1 个答案:

答案 0 :(得分:1)

这里:

java -cp "apache/lib/*" MainClass

将您的放在类路径上。

java MainClass

仅将MainClass放在类路径上(假设位于当前路径中) 目录)。

含义:您希望类路径包含所有个包含必需类的位置:具有库的目录和具有您的类的目录。

尝试类似

java -cp "./:apache/lib/*" MainClass

之类的。关键是:确保在类路径上显示所有所有所需的目录(对我上面的示例不太确定,因为apache/lib有点腥:您可能应该从此处的绝对路径开始)!