试图实现 jcifs 和 UniAddress 并得到 NoClassDefFoundError?

Posted

技术标签:

【中文标题】试图实现 jcifs 和 UniAddress 并得到 NoClassDefFoundError?【英文标题】:Trying to implement jcifs and UniAddress and getting NoClassDefFoundError? 【发布时间】:2012-10-03 08:05:45 【问题描述】:

我正在使用 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 中完成的。

【问题讨论】:

javac 步骤之后的当前目录中是否有netp.class 啊!您在java 步骤中缺少krb5 部分! netp 类在什么包中? 也尝试不使用"...",以排除可能的错误原因...... 只需在 netp 之前添加包的名称,如果 jcifs 的路径正确并且您从正确的目录运行命令“java..”,它将起作用。请参阅我对 正确 含义的回答。 【参考方案1】:

您的 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

适用于窗户

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

【讨论】:

现在将尝试所有这些,但作为仅供参考,这是我的代码 --> box.com/s/po4frdmy0obqiroy9anp 我现在已经改变了我所拥有的并且我正在像这样运行它,但我仍然得到:错误:无法找到或加载主类 netp.java ...由于某种原因它不是拿起它,我不明白为什么。 "Could not find or load main class netp.java" 当你编译你放 ".java"。当你运行时没有文件类型只有完整的类名(在你的情况下 - 只是 netp)查看我的最后更新 所以问题与路径问题有关。如果我按照您建议的方式运行它,它就可以工作。完成后,我将继续调查并发布问题的最终原因!但是谢谢林斯基!你帮了大忙! 为了在命令行中只运行“java[c]”,您必须在PATH variable 中指向一些 jre[jdk],看看里面有什么,您可能指向“错误" jdk.【参考方案2】:

运行程序时还需要在类路径上提供jar:

java -cp jcifs_1.3.17/jcifs-1.3.17.jar myJavaApp

【讨论】:

Doesnt work... 说:错误:无法找到或加载主类 myJavaApp @RD是当前目录下的myJavaApp.class文件吗? 是的!对我来说,它似乎以某种方式没有获取 JAR 文件,但我不明白为什么。看起来我做的一切都是正确的,但没有运气......【参考方案3】:

尝试将当前目录也添加到类路径中:

java -cp .:jcifs-krb5-1.3.17/jcifs-krb5-1.3.17.jar myJavaApp

如果您使用的是 Windows,请将冒号替换为分号:java -cp .;jcifs-krb5-1.3.17/jcifs-krb5-1.3.17.jar myJavaApp

干杯,

【讨论】:

我在 linux 系统上使用 : 作为 CP 分隔符对我有用。如果您使用的是 Windows 机器,您可能想尝试使用分号/; 并将 CP 括在"..."java -cp ".;jcifs_1.3.17/jcifs-1.3.17.jar" myJavaApp 顺便问一下,bruteHack 是如何进入游戏的? 抱歉,在不同版本之间跳转。稍后会上传完整的代码。

以上是关于试图实现 jcifs 和 UniAddress 并得到 NoClassDefFoundError?的主要内容,如果未能解决你的问题,请参考以下文章

KSoap-Android\JCIFS 发送空的 HTTP 帖子

如何使用 jCIFS 在 Android 中使用默认查看器打开文件

使用 jcifs 列出所有文件和目录

如何使用 JCIFS 和 apache VFS 访问 SMB URL?

使用 Java 和 Samba JCIFS 访问文件

通过jcifs.jar 创建远程文件和文件夹