为啥当代码编译正常并设置类路径时找不到base64类

Posted

技术标签:

【中文标题】为啥当代码编译正常并设置类路径时找不到base64类【英文标题】:why base64 class is not found when code compiles ok and classpath is set为什么当代码编译正常并设置类路径时找不到base64类 【发布时间】:2014-11-16 04:49:47 【问题描述】:

为什么下面的代码会出错

C:\temp>java Test -cp commons-codec-1.9.jar 授权字符串:xxx 线程“主”java.lang.NoClassDefFoundError 中的异常:org/apache/commons/co dec/二进制/Base64 在 Test.main(Test.java:22) 引起:java.lang.ClassNotFoundException: org.apache.commons.codec.binary.Bas e64 在 java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:425) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 1 更多

代码

import org.apache.commons.codec.binary.Base64;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;


public class Test 

    public static void main(String[] args) 

        try 
            String webPage = "xx";
            String name = "xxx";
            String password = "xx";

            String authString = name + ":" + password;
            System.out.println("auth string: " + authString);
            byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
            String authStringEnc = new String(authEncBytes);
            System.out.println("Base64 encoded auth string: " + authStringEnc);

            URL url = new URL(webPage);
            URLConnection urlConnection = url.openConnection();
            urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc);
            InputStream is = urlConnection.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);

            int numCharsRead;
            char[] charArray = new char[1024];
            StringBuffer sb = new StringBuffer();
            while ((numCharsRead = isr.read(charArray)) > 0) 
                sb.append(charArray, 0, numCharsRead);
            
            String result = sb.toString();

            System.out.println("*** BEGIN ***");
            System.out.println(result);
            System.out.println("*** END ***");
         catch (MalformedURLException e) 
            e.printStackTrace();
         catch (IOException e) 
            e.printStackTrace();
        
    


【问题讨论】:

【参考方案1】:

尝试将cp 标志放在类名之前的命令中:

java -cp commons-codec-1.9.jar Test

这是来自java 命令:

用法:java [-options] 类 [args...]

(执行一个类)

【讨论】:

以上是关于为啥当代码编译正常并设置类路径时找不到base64类的主要内容,如果未能解决你的问题,请参考以下文章

java编译 为啥显示找不到文件

为啥我的代码在渲染时找不到类?

java为啥每次都是找不到文件。找不到文件?

为啥使用 Origin 标头时找不到路由

javac编译时找不到文件的问题和运行项目找不到指定类问题

java运行时找不到主类