为啥当代码编译正常并设置类路径时找不到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类的主要内容,如果未能解决你的问题,请参考以下文章