如何使用此makefile与src /和bin /中的文件正确生成java jar文件

时间:2010-12-23 02:55:49

标签: java jar makefile

我无法正确地为我的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

2 个答案:

答案 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)

您的JAR需要manifest,正如here所述。