Java 创建具有多个类依赖项的jar文件

Java 创建具有多个类依赖项的jar文件,java,jar,executable-jar,Java,Jar,Executable Jar,我正在尝试运行我创建的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(

我正在尝试运行我创建的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)
我使用了这个命令

jar cmf Client.mf Client.jar Client.class Client.java Client
其中Client.mf是:

  Manifest-Version: 1.0
  Main-Class: Client
最后一个参数是包含所有从属类的文件夹:

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

不管出于什么原因,它给了我一个NoClassDefFoundError,但我不知道为什么,或者如何解决它。

Client.class似乎丢失了。
我会养成使用包来组织代码的习惯。

似乎缺少Client.class。
我会养成使用包来组织代码的习惯。

您需要使用-d进行编译

javac -d classes
…或将所有类移动到类/客户端目录中

mkdir classes/Client
mv *.class classes/Client
然后,调整清单以使用包限定的主类:

Main-Class: Client.Client
最后,构建jar,使类位于jar的客户机目录中:

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

您需要使用-d进行编译

javac -d classes
…或将所有类移动到类/客户端目录中

mkdir classes/Client
mv *.class classes/Client
然后,调整清单以使用包限定的主类:

Main-Class: Client.Client
最后,构建jar,使类位于jar的客户机目录中:

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

它们位于所有客户端包中。Client.class、Client.mf和Client.java位于Client上面的目录中。Client$1.class、Client$2.class和Client$3.class是Client的内部类,因此Client class也位于包Client XOR中。如果在包Client中编译类,则这三个类文件将位于Client directory之外;然后它们都需要在JAR文件的/Client中。使用Main Class:Client.Client指示包含主方法的类。它们位于所有客户端包中。Client.class、Client.mf和Client.java位于Client上面的目录中。Client$1.class、Client$2.class和Client$3.class是Client的内部类,因此Client class也位于包Client XOR中。如果在包Client中编译类,则这三个类文件将位于Client directory之外;然后它们都需要在JAR文件的/Client中。使用Main类:Client.Client来指示包含Main方法的类。