【问题标题】:Automatically Creating Manifest File with Eclipse for JAR Files使用 Eclipse 为 JAR 文件自动创建清单文件
【发布时间】:2010-11-27 11:26:58
【问题描述】:

如何为我已经创建的一组 JAR 文件创建一个Manifest 文件。

我使用 Eclipse 创建了我的 JAR 文件。

有没有更好的方法来创建具有Manifest 的 JAR 文件?

【问题讨论】:

    标签: java eclipse jar manifest


    【解决方案1】:

    Eclipse 提供了为 Jar 生成清单文件、将生成的清单保存到项目中或为清单使用指定文件的选项。

    我有 Eclipse 3.4.2,它在这个过程的第四个屏幕上:

    右键Project -> Export -> Java/JAR file, Next, JAR File Specification, Next, JAR Packaging Options, Next, JAR Manifest Specification。

    默认是只为 JAR 生成一个默认清单,而不是将生成的文件保存回项目,所以如果你打开你的 JAR 文件,它会有一个清单,但它只会有类似的东西:

    Manifest-Version: 1.0
    

    在里面。

    如果您想更改现有的 JAR 而不重新构建它们,最简单的方法可能是按照 mad-j 的建议进行操作,并使用 Zip 工具打开它们并编辑现有的 /META-INF/MANIFEST.MF 文件并将其保存回 JAR。

    【讨论】:

    • 我今天用了Eclipse的方法,但是Manifest只有一行,并没有指定我的Main类的位置。无法弄清楚如何让 Eclipse 执行此操作,因此我制作了自己的 Manifest 文件并在我的 Eclipse 项目中导出期间选择了它。
    【解决方案2】:

    我今天刚遇到这个问题。

    是的,Eclipse 会为你创建 Manifest,但这真的是个笑话。

    它只包含Manifest-Version: 1.0 行。我还没有想出如何让它添加我的 Main 类,所以我创建了自己的 MANIFEST.MF 文件,将它添加到我的项目主目录(不是 src 也不是 lib)。然后,当我转到“导出”>“JAR 文件”时,一直点击“下一步”到最后(不要过早点击“完成”),然后单击从项目中选择清单的选项。选择您刚刚添加到项目中的清单文件。确保 Manifest 包含 Main 类的路径(例如 com.company 等)。例如,基本的 Manifest 文件如下所示:

    Manifest-Version: 1.0
    Created-By: 1.6.0 (Sun Microsystems Inc.)
    Main-Class: MyPackage.MyClass
    

    我尝试了@Michael 的方法,但最终我的 JAR 中没有留下任何类文件,只有 Manifest 文件......哦,好吧。我上面的方法效果很好。

    【讨论】:

      【解决方案3】:

      清单是一个简单的文本文件,Sun's tutorial 详细描述了它的内容。

      您所要做的就是创建这样一个文件并使用以下命令update the JAR files

      jar cfm <jar-file> <manifest-addition>
      

      【讨论】:

        【解决方案4】:

        通过 Ant,您可以使用 jar 任务。它有一个 manifest 选项来指定您需要包含的所有属性。像这样的:

          <target name="create-my-jar">
             <jar jarfile="foo.jar" basedir="bin/classes">      
                <manifest>
                <attribute name="Class-Path" value="xxx"/>
                <attribute name="Ant-Version" value="${ant.version}"/> 
                <attribute name="Created-By" value="JDK ${java.version} (${java.vendor})"/>
                <attribute name='Specification-Title' value='xxx' />
                <attribute name='Specification-Version' value='xxx' />
                <attribute name='Specification-Vendor' value='xxx' />
                <attribute name='Implementation-Title' value='xxx' />
                <attribute name='Implementation-Version' value='xxx' />
                <attribute name='Implementation-Vendor' value='xxx' />
                <attribute name='Implementation-Vendor-Id' value='xxx' />
                <attribute name='Implementation-Vendor-URL' value='xxx' />
                <attribute name="Built-By" value="${user.name}"/>
                <attribute name='Build-Date' value='xxx'/>
                <attribute name='Build-Time' value='xxx'/>              
                </manifest>
                </jar>
           </target>
        

        【讨论】:

          【解决方案5】:

          当您使用jar cf jar-file inputs-files 创建jar 时,会创建一个默认清单文件。

          【讨论】:

            【解决方案6】:

            清单文件是文本文件。由于 JAR 文件实际上是 ZIP 文件,因此您还可以使用 7-zip 之类的工具添加清单。当然,这不适用于已签名的 JAR。

            【讨论】:

              【解决方案7】:

              您还可以查看此文档,这有助于我使用 Eclipse 向导解决问题。

              See Eclipse Documentation

              【讨论】:

                【解决方案8】:

                使用 Eclipse,在底部的 JAR Manifest Specification 页面上有一个文本框,您可以在其中浏览您的 Main 类。浏览到您的 Main 类,然后单击 Finish。这会生成带有允许执行 jar 文件的主类信息的清单。 -开发开启

                【讨论】:

                  【解决方案9】:

                  有点晚了,但这是最简单/有效的解决方案:

                  右键Project->Export->Select in Folder Java "Runnable Jar 文件"->

                  下一步-> 启动配置:选择您最近用来测试您的 项目,其余的保持默认

                  清单现在具有正确启动 *.jar 的相关条目

                  【讨论】:

                  • 谢谢,帮了大忙。
                  猜你喜欢
                  • 1970-01-01
                  • 2010-11-09
                  • 1970-01-01
                  • 2013-08-01
                  • 1970-01-01
                  • 2011-02-13
                  • 2012-06-13
                  • 1970-01-01
                  • 2013-06-30
                  相关资源
                  最近更新 更多