【问题标题】:How to setup Main class in manifest file in jar produced by NetBeans project如何在 NetBeans 项目生成的 jar 中的清单文件中设置 Main 类
【发布时间】:2011-02-20 09:01:22
【问题描述】:

我有以下问题。我的 NetBeans IDE 6.8 中有一个 Java 项目。当我编译它并生成一个包含所有可能内容的 .jar 文件时,META-INF 是不正确的。它不包含要执行的类 - 使用 main() 方法。

当我单击 IDE 中的“运行”按钮时,一切正常。项目的设置也设置了正确的方式——指向我项目中的一个类。

我尝试添加带有清单文件的 META-INF 文件夹,但没有成功。

有没有办法在 NetBeans 中手动执行此操作,因为我发现如果我在清单中添加缺少的 Main 类,一切正常。

(我想我遇到了某种错误......)

//编辑: 我追求的结果是我希望使用 NetBeans 构建创建的 jar 可以使用命令执行:

引用Sun Documentation

在清单文件中设置 Main-Class 后,您可以从命令行运行应用程序: java -jar app.jar

【问题讨论】:

  • 首先,您可以创建两种罐子……一种是简单的“罐子”,另一种是“可执行罐子”。确定你创造了正确的?我从来没有在netbeans中尝试过,但是eclipse为你提供了一个创建可执行jar的向导,你可以在那里选择你的主类。如果 netbeans 不提供类似的指导,我会感到惊讶?!
  • @Philipp Andre:不确定是否有这样的向导,但有一个窗口“项目首选项”,上面写着我的 Main.class 但在构建之后 - 清单文件中没有任何内容
  • 这解决了我的问题,但我首先找到了这个解决方案,所以我想在这里发帖stackoverflow.com/questions/15282098/…
  • @LeniKirilov 请帮助解决这个问题:stackoverflow.com/questions/24740803/…

标签: java netbeans manifest


【解决方案1】:

我将总结提出的解决方案以及对我有帮助的解决方案!

阅读此错误报告后: bug in the way NetBeans 6.8 creates the jar for a Java Library Project.

  1. 在我的项目根目录中创建 manifest.mf 文件

  2. 编辑 manifest.mf。我的看起来像这样:

    Manifest-Version: 1.0
    Ant-Version: Apache Ant 1.7.1
    Created-By: 16.3-b01 (Sun Microsystems Inc.)
    Main-Class: com.example.MainClass
    Class-Path: lib/lib1.jar lib/lib2.jar
    
  3. 打开文件 /nbproject/project.properties

  4. 添加行

    manifest.file=manifest.mf

  5. 清理 + 构建项目

现在.jar 已成功构建。

非常感谢vkraemer

【讨论】:

  • 它工作正常。假设我将使用超过 25 个罐子。如何在类路径中指定所有库名?
  • 对于那些想知道 com、example 和 MainClass 代表什么的人:Oracle tutorial 我们希望在运行 JAR 文件时执行 MyPackage 包中 MyClass 类中的 main 方法。 i> Main-Class: MyPackage.MyClass(对我不起作用)
【解决方案2】:

您似乎遇到了bug in the way NetBeans 6.8 creates the jar for a Java Library Project

这个问题意味着有一个解决方法。

我无法使用 NB 6.8 和/或 NetBeans 6.9-dev 进行验证...

您可能希望在 NetBeans.org 网站/问题跟踪器上注册并更新问题并添加您的“投票”。

【讨论】:

    【解决方案3】:

    这很简单。

    • 右键单击项目
    • 转到属性
    • 转到类别树中的运行
    • 在右侧面板中设置Main Class
    • 构建项目

    就是这样。希望这会有所帮助。

    【讨论】:

    • 这没有帮助 - 我已经在问题中描述了它
    • 对不起我的帖子。错过了您的问题。
    • 它对我不起作用..在清理项目后它再次给上一课
    • 如果您允许远程访问您的计算机,我可以检查一下
    【解决方案4】:

    在 7.3 中,只需启用 Properties/Build/Package/Copy Dependent Libraries,主类将在构建时根据所选目标添加到清单中。

    【讨论】:

      【解决方案5】:

      将 manifest.file=manifest.mf 添加到 project.properties 并在项目目录中创建 manifest.mf 文件在 NB 6.9 中可以正常工作,并且在 NB 6.8 中也应该可以工作。

      【讨论】:

        【解决方案6】:

        从 7.2.1 开始,这仍然是一个问题。创建一个库,因为你不知道如果你把它变成一个应用程序会做什么,你就完蛋了。

        确实找到了解决此问题的方法。编辑nbproject/project.properties,把下面这行改成false如图:

        mkdist.disabled=false

        在此之后,您可以更改属性中的主类,它将反映在清单中。

        【讨论】:

          【解决方案7】:

          真正的问题是 Netbeans JAR 如何对其项目进行处理。在实际发布您的程序供他人使用时,Manifest 文件中的“Class-Path:”是不必要的。如果您在 Netbeans 中添加了一个外部库,则它充当一个包。我建议您使用 WINRAR 之类的程序来查看 jar 中的文件,并将您的库作为包直接添加到 jar 文件中。

          jar 文件内部的外观:

          MyProject.jar
          
              Manifest.MF
                   Main-Class: mainClassFolder.Mainclass
          
              mainClassFolder
                   Mainclass.class
          
              packageFolder
                   IamUselessWithoutMain.class
          

          【讨论】:

            【解决方案8】:

            我读了又读,想弄清楚为什么我得到了一个找不到类的错误,结果发现 manifest.mf 有一个错误:

            Main-Class: com.example.MainClass
            

            我通过转到项目属性对话框(右键单击项目文件),然后运行主类修复了错误 并纠正了 Netbeans 决定放在这里的任何内容。 Netbean 插入了项目名称而不是类名称。不知道为什么。可能是在muratina上喝醉了……

            【讨论】:

              【解决方案9】:

              不要犹豫,在您第一次构建项目后查看您的项目文件。查找清单文件并选择使用记事本打开。

              添加行:

              Main-Class: package.myMainClassName
              

              其中package 是您的包,myClassName 是具有main(String[] args) 方法的类。

              【讨论】:

                【解决方案10】:

                兄弟你不需要设置类路径只需按照这些简单的步骤(我使用Apache NetBeans)

                步骤:

                1. 提取要添加到项目中的 jar 文件。

                2. 只复制项目中需要的那些包(文件夹)。 (不要复制清单文件)

                3. 用 WinRAR 打开主项目 jar 文件(dist/file.jar)。

                4. 将该文件夹或包粘贴到主项目 jar 文件中。

                5. 这些包在您的项目中 100% 工作。

                警告:不要对清单文件进行任何更改。

                另一种方法:

                • 在我的情况下,lib 文件夹位于 dist(主 jar 文件)文件夹之外。
                • 我们需要将 lib 文件夹移动到 dist 文件夹中。然后我们设置类路径 主 jar 文件的 manifest.mf 文件。

                  编辑 manifest.mf 并添加这种类型的行

                • 类路径:lib\foldername\jarfilename.jar lib\foldername\jarfilename.jar

                警告: lib 文件夹必须在 dist 文件夹内,否则 jar 文件不会访问您的 lib 文件夹 jar 文件

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-10-06
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-03-21
                  • 2011-01-22
                  • 2015-04-02
                  • 2013-10-26
                  相关资源
                  最近更新 更多