我的Java库存在问题。我正在使用javax.mail和mysql-connector。 编译时我没有任何问题,但如果我尝试用sudo执行程序:
$sudo java Server -jar mysql-connector-java-5.1.28.jar
它给了我这个错误:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:259)
at dbConnect.dbQuery(dbConnect.java:192)
at Server.main(Server.java:39)
如果我尝试在没有sudo的情况下执行它:
$java Server -jar mysql-connector-java-5.1.28.jar
它给了我这个错误:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/internet/AddressException
at dbConnect.registration(dbConnect.java:161)
at dbConnect.splitUsrPass(dbConnect.java:87)
at dbConnect.dbQuery(dbConnect.java:196)
at Server.main(Server.java:39)
Caused by: java.lang.ClassNotFoundException: javax.mail.internet.AddressException
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 4 more
我可以理解为什么没有管理员权限它不起作用(我想邮件库需要它们)但是我觉得如果我给它管理员权限它就找不到MySQL库。
有人知道这是否是一个已知问题?
答案 0 :(得分:0)
如果要在命令行上使用Java运行某些内容,则有两个选项:
运行课程:java MyClass
运行一个jar:java -jar MyJar.jar
你要做的是两个,这将导致-jar
- 部分被忽略。
我猜你想要做的是运行类Server
,并在类路径上使用MySQL
- jar。然后正确的命令是:
java Server -cp mysql-connector-java-5.1.28.jar
您还可以将包含MySQL
- jar的目录添加到CLASSPATH
环境变量中。您在使用sudo
时获得不同错误消息的原因可能是因为root
用户与您的用户不同CLASSPATH
(您的用户缺少javax.mail
- jar on类路径,而root
有它。)