我正在使用 JCIFS (http://jcifs.samba.org/)。我的代码很简单,取自 Login.java 示例:
import jcifs.*;
import jcifs.smb.*;
public class netp {
public static void main( String argv[] ) throws Exception {
System.out.println("START");
String ip = "10.0.0.1";
String domain = "domain";
String user = "user";
String pass = "pass";
UniAddress dc = UniAddress.getByName( ip );
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication( domain + ";" + user + ":" + pass );
SmbSession.logon( dc, auth );
System.out.println("END");
return;
}
}
如果我这样做,编译它会起作用:
javac -cp jcifs-krb5-1.3.17.jar netp.java
但是,如果我这样运行它:
java -cp jcifs-1.3.17.jar netp
我得到:
Error: Could not find or load main class netp
我做错了什么?
我已经在这里上传了完整的源代码:
https://www.box.com/s/po4frdmy0obqiroy9anp
注意:我在 Windows 中执行所有操作。
最佳答案
您的 myJavaApp 类似乎在某个包中,除了根本没有设置类路径之外,您还省略了包名。
我的测试目录结构:
.
\--- jcifs-1.3.17.jar
\--- testapp
\--- myJavaApp.java
我是这样编译的:
javac -cp jcifs-1.3.17.jar testapp/myJavaApp.java
它按预期在 testapp 文件夹中提供了 myJavaApp.class。我像这样在 Linux 上运行它:
java -cp .:jcifs-1.3.17.jar testapp.myJavaApp
在这样的窗口上:
java -cp .;jcifs-1.3.17.jar testapp.myJavaApp
它扔了
jcifs.util.transport.TransportExceptionjava
java.net.NoRouteToHostException: No route to host
这意味着 myJavaApp 已成功运行。
如果我们删除 testapp 目录,例如
.
\--- jcifs-1.3.17.jar
\--- myJavaApp.java
它编译为:
javac -cp jcifs-1.3.17.jar myJavaApp.java
在 linux 上运行:
java -cp .:jcifs-1.3.17.jar myJavaApp
window
java -cp .;jcifs-1.3.17.jar myJavaApp
编辑:
所有 java[c] 命令都从 root(.)/testing 目录运行
编辑^2:
我已经下载了您的代码并将自己放在 netp 目录中。编译代码如下:
C:\netp>"C:\Program Files\Java\jdk1.6.0_25\bin\javac.exe" -cp jcifs-krb5-1.3.17.jar netp.java
然后像这样成功运行它:
C:\netp>"C:\Program Files\Java\jdk1.6.0_25\bin\java.exe" -cp .;jcifs-krb5-1.3.17.jar netp
它输出:
START
END
关于java - 尝试实现 jcifs 和 UniAddress 并获得 NoClassDefFoundError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12860223/