【问题标题】:how to compile and run java in linux with 3rd party jar and my own jar如何使用 3rd 方 jar 和我自己的 jar 在 linux 中编译和运行 java
【发布时间】:2023-03-12 10:29:01
【问题描述】:

我将自己的项目导出到一个jar中,这个项目需要两个3rd-party jar,一个额外的TestMyJar.class用于测试我的项目,怎么做?我尝试了几种方法,但没有运气。更具体地说,这是我的 jar:一个只传递 hello world 消息一个 url 的类。我将此类代码导出到 helloworld.jar

package com.wow.flow.http.dq;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;

public class HttpConnection {

    @SuppressWarnings("deprecation")
    public void client() throws Exception {

        String url = "www.someurl.com"; // sorry if this your registered url, just borrow it as an example
        if (url == null) {
            throw new Exception();
        }

        HttpClient client = new HttpClient();

        PostMethod postMethod = new UTF8PostMethod(url);
        try {
            postMethod.setRequestBody("Hello world");
            int statusCode = client.executeMethod(postMethod);

            if (statusCode == HttpStatus.SC_OK) {

                InputStream responseBody = postMethod.getResponseBodyAsStream();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(responseBody, "utf-8"));
                String line = reader.readLine();
                while (line != null) {
                    System.out.println(new String(line.getBytes()));
                    line = reader.readLine();
                }
            }

        } catch (HttpException e) {
            // TODO: handle exception
        } catch (IOException e) {
            // TODO: handle exception
        } finally {
            postMethod.releaseConnection();
        }
    }

    // Inner class for UTF-8 support
    public static class UTF8PostMethod extends PostMethod {
        public UTF8PostMethod(String url) {
            super(url);
        }

        @Override
        public String getRequestCharSet() {
            // return super.getRequestCharSet();
            return "UTF-8";
        }
    }

}

它需要 dom4j 和 httpclient。这是我的 TestMyJar.class:

package httptest

public class TestMyJar {
    public static void main(String[] args) {
        HttpConnection connection= new HttpConnection();
    }
}

现在我有了三个 jar:helloworld.jar、commons-httpclient-3.1.jar、dom4j-1.6.1.jar 和一个类:TestMyJar.java。如何编译和运行 TestMyJar.java? javac和java我都试过了,都是找不到。

谢谢!

【问题讨论】:

    标签: java linux jar javac


    【解决方案1】:

    您可以使用命令包含任意数量的罐子

    javac MyClass.java -cp jar1 jar2 jar3
    
    java -cp jar1 jar2 jar3 MyClass
    

    【讨论】:

    • 我试过javac MyClass.java -cp jar1.jar jar2.jar jar3.jar 四个文件在同一个目录下,工作目录是一样的。我得到了这个:javac:无效标志:commons-httpclient-3.1.jar 用法:javac 使用 -help 获取可能的选项列表
    【解决方案2】:

    在 Windows 上,您可以使用以下命令运行您的主类:

    java c:/lib/helloworld.jar;c:/lib/commons-httpclient-3.1.jar;c:/lib/dom4j-1.6.1.jar httptest.TestMyJar 
    

    在 Linux 上,使用:

    java /lib/helloworld.jar:/lib/commons-httpclient-3.1.jar;/lib/dom4j-1.6.1.jar httptest.TestMyJar 
    

    httptest 是你的包名,TestMyJar 是你的类,里面有 main 方法。

    【讨论】:

    • 嗨,我在 /lib 中放了 3 个 jar,但我得到了:[root@flow httptest]# java /lib/helloworld.jar:/lib/commons-httpclient-3.1.jar:/lib /dom4j-1.6.1.jar httptest.TestMyJar 线程“main”中的异常 java.lang.NoClassDefFoundError: /lib/helloworld/jar:/lib/commons-httpclient-3/1/jar:/lib/dom4j-1/ 6/1/jar 原因:java.lang.ClassNotFoundException: .lib.helloworld.jar:.lib.commons-httpclient-3.1.jar:.lib.dom4j-1.6.1.jar ...太多的词不适合在评论中,必须省略它找不到主类:/lib/helloworld.jar:/lib/commons-httpclient-3.1.jar:/lib/dom4j-1.6.1.jar。程序将退出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    相关资源
    最近更新 更多