我无法正确地为我的Java实现生成Jar。我不是Java大师(因此我为什么使用Make而不是Ant)。直到我意识到我的Windows机器没有hava javac,我才认为我不关心罐子。然后我心想“如果我只有一个罐子”
所以我在Makefile中一起破解了几行
相关的行是
all: client server jar
client: bin bin/Job.class bin/JobQueue.class bin/Client.class bin/FileTransfer.class
server: bin bin/Job.class bin/JobQueue.class bin/Server.class bin/ServerThread.class bin/FileTransfer.class
jar: client server
jar cfe HBNQServer Server bin/Server.class bin/Job.class bin/JobQueue.class bin/ServerThread.class bin/FileTransfer.class
jar cfe HBNQClient Client bin/Client.class bin/Job.class bin/JobQueue.class bin/FileTransfer.class
然而,当我尝试运行它时,我得到了No Class Found Exception。
$ java -jar HBNQServer
Exception in thread "main" java.lang.NoClassDefFoundError: Server
Caused by: java.lang.ClassNotFoundException: Server
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
我确信对于那些更熟悉“Jaring”文件的人来说,这个错误很明显。
如果我遗漏了任何重要代码,可能会找到Here
答案 0 :(得分:2)
我相信您的问题是bin
前缀。如果您对类文件进行jar操作,则它必须位于与其完全限定的包名称相同的目录中。例如,如果实现com.mycompany.Server
类,则jar文件中的相应路径必须为com/mycompany/Server.class
。在您的情况下,所有内容都在jar文件的bin
目录中,因此无法找到您的(可能是非包合格的)类。将所有类放在bin
包中,或者在没有bin
前缀的情况下将它们装箱。
这样的事可能有用:
jar: client server
cd bin; jar cfe ../HBNQServer Server Server.class Job.class JobQueue.class ServerThread.class FileTransfer.class
cd bin; jar cfe ../HBNQClient Client Client.class Job.class JobQueue.class FileTransfer.class
答案 1 :(得分:1)