2010-11-12 78 views
4

我运行在Ubuntu 10.10下面的代码,使用OpenJDK的1.6.0_18:参数在Java中的Jar忽略

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的罐子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: . 
+1

你的jar的META-INF/MANIFEST.MF包含什么? – 2010-11-12 15:01:06

+0

我已经更新了OP。 Main-Class路径与包声明相同。 – 2010-11-12 15:05:41

+0

哇。我觉得自己像个白痴。毕竟它是'主要类':我正在启动一个不同的类来处理这些争论,并将它们(错误地)传递给所需的类。 – 2010-11-12 15:09:02

回答

3

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

1

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

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

这在Debian Lenny上工作。

+0

果然,这可以工作(用':'替换';'),但这是一种解决方法。这是OpenJDK中的错误吗? – 2010-11-12 15:01:40

2

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

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

+0

你有一个敏锐的眼睛;这只是一个错字,但这确实是问题的根源。我编辑了OP来演示。 – 2010-11-12 15:15:57