如何创建Jar并正确执行它

时间:2013-05-28 13:49:15

标签: java

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

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

当我执行以下代码时:

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

我的文件按照我的要求执行并给我正确的输出。

现在,我想在一个Jar文件中添加包'org'和Online.class文件,例如E.g. 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

任何人都可以帮助我吗?我想知道这里有什么问题?

5 个答案:

答案 0 :(得分:2)

查看java教程页面: Setting an Application's Entry Point

答案 1 :(得分:2)

这取决于你如何建造你的罐子。您将需要一个具有主类名称

的清单文件

我通常使用一个蚂蚁来构建,所以我的构建任务看起来像这样:

    <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 Name,因此负责调用MainClass

答案 2 :(得分:1)

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

  Main-Class: Online.class

答案 3 :(得分: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

即,指定完全限定的类名。

答案 4 :(得分:0)

我通常使用命令jar -cmf MANIFEST_FILE jarfile.jar *.class并指定一个自定义Manifest文件,因为我得到的错误与你一样。

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

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

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

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