繁体   English   中英

使用Java中的命令行通过外部Jar编译多个软件包

[英]Compiling multiple packages using the command line in Java with external Jars

我有以下文件结构,需要使用命令行进行编译。 我一直在使用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)

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

使用类的完全限定名称包括库,以避免所引用类的运行时错误

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

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

在下面使用:

C:\src>java maps.TestClasses.TestSOM

如果您的班级在src目录中。 如果有其他更改目录到该目录。

cd maps/TestClasses

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

如果您的班级是Test.java。

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

暂无
暂无

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

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