使用Java中的命令行和外部Jars编译多个包

问题描述 投票:0回答:3

我有以下文件结构,需要使用命令行进行编译。我一直在使用 Eclipse,它在编辑器中运行良好。

/src
     /maps
          Structures/ (.java files) using a 3rd party external JAR file in E:\Lib\math.jar
          Util/ (.java files)
          TestClasses/ (.java files) Test.java is the main class

我使用以下 javac 指令编译了上述文件

C:\src\maps>javac -classpath E:\Lib\math.jar Util\*.java Structures\*.java TestClasses\*.java

编译没有问题并创建相关的 .class 文件。

但是,当我尝试使用以下 java 指令运行主类时

C:\src\maps>java TestClasses\TestSOM

我收到以下异常

Exception in thread "main" java.lang.NoClassDefFoundError: TestClasses\TestSOM (
wrong name: maps/TestClasses/TestSOM)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
2)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:472)

使用命令行执行主类的正确方法是什么?

java command-line package javac
3个回答
2
投票

使用类的完全限定名称并且还包括库以避免引用的类出现运行时错误

C:\src\>java -classpath .;E:\Lib\math.jar map.TestClasses.Test

假设

Test.java
有您提到的 main 方法。


0
投票

使用以下:

C:\src>java maps.TestClasses.TestSOM

如果您的类位于 src 目录内。如果有任何其他更改目录到该目录。


0
投票
cd maps/TestClasses

java -classpath E:\Lib\math.jar;../Structures;../Util; Test

如果你的类是Test.java。

您应该开始将所有类放在同一个文件夹中,这样会更容易启动您的项目。 它们不需要位于单独的文件夹中,当您确实使用单独的文件夹时,您希望它们位于不同的“包”中。

© www.soinside.com 2019 - 2024. All rights reserved.