【问题标题】:What path to write in java -classpath?在 java -classpath 中写什么路径?
【发布时间】:2016-04-21 07:22:33
【问题描述】:

我有一个包含许多文件和目录的包(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;

从我的命令输出来看,我怀疑这是错误的。指定路径的正确方法是什么?我想指出什么?

【问题讨论】:

  • mvn package 应该在target 中创建了一个 jar 文件。这可能包括也可能不包括所有依赖项和/或可执行文件。也许该项目包含一些运行它的 shell 脚本?或者至少是自述文件?
  • 啊,是的。有一个jar文件。但是在运行它时,我得到了同样的错误,但使用的是 jar 文件的名称。

标签: java unix package classpath maven-plugin


【解决方案1】:

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

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

现在像这样运行应用程序:

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

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


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

    org.eclipse.californium.examples.HelloWorldServer

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

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

“目标/类”是正确的根目录。 java 命令将尝试根据包命名导航到“HelloWorldServer.class”文件。

不要试图这样做:

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

这行不通。


1 - 或 Windows 上的分号。

【讨论】:

    猜你喜欢
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多