2

我有以下目录结构和文件:

Folder
    +
    |--/org
    |--Online.java
    |--Online.class

当我执行以下代码时:

C:\>cd Folder
C:\Folder>java Online http://www.google.com google.html

我的文件执行并根据我的要求给我正确的输出。

现在,我想将包 'org' 和 Online.class 文件添加到一个 Jar 文件中,例如 Eg Online.jar

我通过执行以下代码做到了这一点:

jar cvf Online.jar *

现在,当我尝试执行以下代码时:

java -jar Online.jar http://www.google.com google.html

它向我显示错误:

Failed to load Main-Class manifest attribute from Online.jar

有谁可以帮我离开这里吗?我想知道这里有什么问题?

4

5 回答 5

2

查看java教程页面: 设置应用程序的入口点

于 2013-05-28T13:54:22.690 回答
2

这取决于你如何构建你的 jar。您将需要一个带有主类名称的清单文件

我通常使用 ant 来构建,所以我的构建任务是这样的:

    <target name="Build_myjar">
        <jar destfile="my.jar" filesetmanifest="mergewithoutmain">
            <manifest>
                <attribute name="Main-Class" value="MyMainClass"/>
                <attribute name="Class-Path" value="."/>
            </manifest>
            <fileset dir="bin"/>
        </jar>
    </target>

注意 Manifest 已经有 MainClass 名称,因此它负责调用 MainClass

于 2013-05-28T14:03:55.193 回答
1

我认为可能需要修改默认清单以包含主类...

  Main-Class: Online.class
于 2013-05-28T13:57:26.317 回答
1

假设您的 FQCN 是 org.Online (这有点尴尬),结构应该是:

Folder
    +
    |--org
    |    +
    |    |--Online.class
    |
    |--META-INF
         +
         |--MANIFEST.MF

那是:

  • 您不必包含 Online.java。
  • 将类文件 Online.class 放在包目录 org 下。
  • 包括 META-INF/MANIFEST.MF

META-INF/MANIFEST.MF 的内容应该是:

Manifest-Version: 1.0
Main-Class: org.Online

也就是说,指定完全限定的类名。

于 2013-05-28T14:07:52.497 回答
0

我通常使用该命令jar -cmf MANIFEST_FILE jarfile.jar *.class并指定一个自定义清单文件,因为我得到与您相同的错误。

这是我使用的简单清单文件(src

Manifest-Version: 1.0
Class-Path: .
Main-Class: MainClassName

警告:清单必须以换行符或回车符结尾。如果最后一行没有以新行或回车结束,则不会正确解析。

运行时,我使用java -jar jarfile.jar或只是双击 Windows 上的 .jar。

于 2013-05-28T14:24:30.093 回答