简体   繁体   English

创建具有多个类依赖关系的jar文件

[英]Creating a jar file with multiple class dependencies

I am trying to run a jar file I made, I keep getting this error: 我正在尝试运行我创建的jar文件,但不断出现此错误:

     java -jar Client.jar
Exception in thread "main" java.lang.NoClassDefFoundError: Client (wrong name: Client/Client)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    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)

I used this command 我用这个命令

jar cmf Client.mf Client.jar Client.class Client.java Client

where Client.mf is: 其中Client.mf为:

  Manifest-Version: 1.0
  Main-Class: Client

The last argument is a folder containing all the depency classes: 最后一个参数是一个包含所有依赖类的文件夹:

ButtonListen.class
ButtonListener.class
Client$1.class
Client$2.class
Client$3.class
NewPage.class
NewPage.java
NextPage.class
NextPage.java
OptIPDemo$1.class
OptIPDemo$2.class
OptIPDemo$3.class
OptIPDemo$4.class
OptIPDemo$5.class
OptIPDemo$Doc$1.class
OptIPDemo$Doc.class
OptIPDemo.class
OptIPDemo.java
ServerStats.class
ServerStats.java
blue2.jpeg
blue3.JPG

For whatever reason it is giving me a NoClassDefFoundError, but I dont know why, or how to resolve it. 无论出于什么原因,它都给我一个NoClassDefFoundError,但是我不知道为什么,或者如何解决。

Client.class seems to be missing. Client.class似乎丢失。 And I would get into the habit of using packages to organize your code. 而且我会养成使用包来组织代码的习惯。

You either need to compile with -d 您要么需要使用-d进行编译

javac -d classes

...or move all your classes into a classes/Client directory ...或将所有课程移至classes / Client目录

mkdir classes/Client
mv *.class classes/Client

Then, adjust your manifest to use a package-qualified Main-Class: 然后,调整清单以使用包合格的Main-Class:

Main-Class: Client.Client

And finally, build the jar so that the classes are located within the Client directory of the jar: 最后,构建jar,使这些类位于jar的Client目录中:

cd classes
jar cmf ../Client.mf ../Client.jar *

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM