在java-classpath中写什么路径?

What path to write in java -classpath?

我有一个包含许多文件和目录的包(Californium,一种 CoAP 协议实现)。它作为一个 Maven 项目出现。我已经转到终端中的 pom.xml 文件和 运行 mvn package 的目录。一切顺利。但是在转到其中一个示例 (Helloworldserver.class) 并尝试使用 java HelloWorldServer 对其进行 运行 时,我得到:

Error: Could not find or load main class HelloWorldServer

我通过键入 echo $CLASSPATH 查看了类路径,但我什么也没得到。所以我尝试设置类路径:

java -classpath org.eclipse.californium.examples

它生成对 java 命令可用的所有可能选项的描述,并且不设置类路径。

我在上面的命令中选择了类路径,因为在HelloWorldServer.java中,有第一行:

package org.eclipse.californium.examples;

根据我的命令输出判断,我怀疑这是错误的。如何指定路径的正确方法?我要指什么?

当您使用 Maven 构建代码时,它会创建一个 "target" 目录,并在其中创建一个 "classes" 目录树,其中包含编译器生成的 class 文件。

找到 "target/classes" 目录或任何它的名字。 (它在标准 Maven 文件结构中称为 "target/classes",但 POM 文件可以另外指定。)

现在 运行 应用程序是这样的:

  $ java -classpath target/classes:<dependency-1>:<dependency-2>:... \
        org.eclipse.californium.examples.HelloWorldServer

其中 <dependency-1><dependency-2> 等是依赖 JAR 文件的路径名...由 Maven 下载到本地 .m2 存储库。


-classpath 参数是冒号分隔的1 目录名列表、jar/zip 文件名或jar/zip 的一般模式文件模式。如果您 运行 反对 class 尚未打包成 JAR 或 ZIP 文件的文件,则需要提供 class 树的根目录。例如,如果您的 HelloWorldServer class 的全名是

    org.eclipse.californium.examples.HelloWorldServer

那么目标目录树将如下所示:

  ...
  target:
    classes:
      org:
        eclipse:
          californium:
            examples:
              HelloWorldServer.class

"target/classes" 是正确的根目录。 java 命令将尝试根据包命名导航到 "HelloWorldServer.class" 文件。

不要被诱惑这样做:

$ java -classpath target/classes/org/eclipse/californium/examples:... \
     HelloWorldServer.class

不行。


1 - 或 Windows 上的分号。