【问题标题】:Arguments ignored in Java JarJava Jar 中忽略的参数
【发布时间】:2010-11-12 14:52:07
【问题描述】:

我在 Ubuntu 10.10 上使用 OpenJDK 1.6.0_18 运行以下代码:

 package mypkg;
 public class MyTest {
   public static void main(final String[] args) {
     System.out.println(args.length + " argument(s)");
     for (final String arg : args) {
       System.out.println(arg);
     }
   }
 }

编译成Jar后,我完全不明白为什么从终端执行以下命令返回0 argument(s)

java -jar mytest.jar 这是一个测试

这是我对the Java docs的解释,声明:

java [ 选项 ] -jar file.jar [ 参数 ... ]

我几乎感觉我在终端中输入了错误的命令。什么给了?

编辑: MANIFEST.MF 包含:

Manifest-Version 1.0
Created-By: 1.6.0_18 (Sun Microsystems Inc.)
Main-Class: mypkg.Starter
Class-Path: .

【问题讨论】:

  • 你的 jar 的 META-INF/MANIFEST.MF 包含什么?
  • 我已经更新了 OP。 Main-Class 路径与包声明相同。
  • 哇。我觉得自己像个白痴。毕竟是Main-Class:我正在启动一个不同的类来处理参数,并将它们(错误地)传递给所需的类。
  • @Rob 您可以使用您的评论作为答案,我会接受它,因为这实际上是导致我找到问题根源的原因。
  • 有时找出问题所需要的只是向其他人解释您的问题。 :) - 很高兴你明白了。

标签: ubuntu jar java executable-jar


【解决方案1】:

查看META-INF/MANIFEST.MF 文件的内容;确保您的 Main-Class 使用的是正确的类。

【讨论】:

    【解决方案2】:

    您的清单将mkpkg.MyTest 指定为主类文件,而您实际发布的文件名为mypkg.MyTest

    另外,你指定一个“.”的类路径。在您的清单中,这充其量是多余的,但可能会导致您看到的问题(因为您的本地目录中可能有一个名为 mkpkg 的目录)。

    【讨论】:

    • 你的眼睛很敏锐;这只是一个错字,但这确实是问题的根源。我已经编辑了 OP 来演示。
    【解决方案3】:

    如果你知道你的主类,你可以不用 -jar 选项来做。

    java -classpath .:my_jar_file.jar; package.MainClass [arguments]
    

    这在 Debian Lenny 上对我有用。

    【讨论】:

    • 果然,这行得通(将; 替换为:),但这是一种解决方法。这是 OpenJDK 中的错误吗?
    猜你喜欢
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多