【问题标题】:Run a class in a sub package in a jar file on Windows command line在 Windows 命令行的 jar 文件中运行子包中的类
【发布时间】:2015-10-20 17:16:47
【问题描述】:

我从eclipse导出了一个jar文件,jar文件里面是各种包和带有java类文件的子包。

我想在 Windows 的命令行上运行这些嵌套类文件之一。

该类有一个 main,我正在使用以下内容来尝试运行它,

java -classpath .;./example.jar example

请注意,example 是类的名称以及 jar。

我也试过拼出类的完整路径

java -classpath .;./example.jar the.whole.path.example

如何运行示例类?

编辑:

好吧,这有点愚蠢,完整路径不正确。我检查了很多次,但直到我回到它时才注意到错误。

【问题讨论】:

  • 最后一个 .whole.path.example 看起来是正确的。当你这样称呼它时会发生什么?
  • @Marged。它不会运行。我可能缺少其他一些依赖项。
  • 这是命令的输出吗? java won't run ?
  • @Marged。是的,它无法找到或加载主类。
  • 好的,所以我们将尝试获取有关 ItWontRunException 的信息 ... ;-) 我想说的是:请在您的问题。并提供 .jar 文件的转储

标签: java eclipse command-line jar command-prompt


【解决方案1】:

只需运行java -cp example.jar the.whole.path.example 就可以了。如果不是,那么您的 JAR 文件有问题。类名必须是完全限定的(带有包名)并且指定的类必须有正确的main方法:

public static void main(String[] args) {

}

【讨论】:

    【解决方案2】:

    没有看到您的任何代码或任何输出(提示、提示),很难说出发生了什么,但这对我有用:

    $ cat x/y/z/A.java
    package x.y.z;
    
    public class A
    {
        public static void main(String args[]) throws Exception
        {
            System.out.println("here in A");
        }
    }
    $ javac x/y/z/A.java
    $ jar cvf a.jar x/y/z/A.class
    added manifest
    adding: x/y/z/A.class(in = 459) (out= 311)(deflated 32%)
    $ java -classpath a.jar x.y.z.A
    here in A
    

    如果发帖者或将来阅读本文的人不熟悉 Unix,以 $ 开头的行是我在 shell 中键入的命令,其他所有内容都是从这些命令输出的。 Eclipse 会为你处理前三个,然后最后的java -classpath a.jar x.y.z.A 是执行 x.y.z.A 类中的 main 方法的命令。

    【讨论】:

      【解决方案3】:

      检查您的假设是否正确。显示 jar 的结构并将其与您尝试运行的内容进行比较:

      jar tf example.jar
      

      如果 jar 包含很多条目,您可能需要 grep / 查找相关类:

      jar tf  example.jar | find /i "Example"
      

      【讨论】:

        猜你喜欢
        • 2013-01-09
        • 2013-11-23
        • 2021-10-01
        • 2020-11-14
        • 2014-04-06
        • 2016-11-07
        • 1970-01-01
        • 2013-02-27
        • 2010-12-27
        相关资源
        最近更新 更多