【问题标题】:No manifest file Eclipse没有清单文件 Eclipse
【发布时间】:2019-11-08 13:58:52
【问题描述】:

他们向我发送了一个压缩包中的 java 代码(用 Eclipse 编写)。解压后,我有以下文件:

- .settings
  - org.eclipse.jdt.core.prefs
- bin
  - anon
     - Discovery.class
     - Main$1.class
     - Main.class
     - Server.class
- src
 - anon
     - Discovery.java
     - Main.java
     - Server.java
- .classpath
- .project
- jssc.jar

当我尝试从命令行执行 jssc.jar 时,我收到一条消息说没有主要清单属性。 我已解压 jar 文件以查看清单及其包含的内容:

  • jssc:里面有很多“类”文件
  • libs:包含包含每个操作系统文件的文件夹
  • META-INF:带有文件清单

所以,似乎有一个清单。但是,当我打开它时:

    Manifest-Version: 1.0
    Ant-Version: Apache Ant 1.8.1
    Created-By: 1.6.0_45-b06 (Sun Microsystems Inc.)
    X-COMMENT: Main-Class will be added automatically by build

我该怎么办?如何将 jar 文件添加到 buildpath?

【问题讨论】:

  • 我猜你需要在类路径中使用 jssc 来执行主类,但是有很多可用的教程。你也可以问“他们”。

标签: java eclipse manifest


【解决方案1】:

如果您尝试使用以下命令执行它:java -jar jssc.jar 并且失败尝试使用以下命令

java -cp jssc.jar anon.Main

上面会告诉JVM在其类路径中加载jssc.jar,然后执行Main类中的main方法。

更新:如果 java 程序需要的类多于 jssc.jar 中存在的类,请将它们添加到 -cp 选项中,并带有 ';'分隔符。

例如:

java -cp jssc.jar;bin/anon/;libs/a.jar;libs/;.... anon.Main

【讨论】:

  • 我试着按照你说的做,但我得到一个错误:```错误:未找到或加载主类 anon.Main ``
  • 我认为 jssc.jar 只是一个依赖项。所以你真正需要的是java -cp jssc.jar;bin/ anon.Main。它可能不是包含您的匿名类的 jssc.jar。你不能问谁给你这个项目吗???
  • 正是@kutschkem,您需要将 bin/anon 包插入到类路径中,以便 JVM 知道 Discovery、Server 和 Main 类。还要检查 Main 类是否包含 public static void main (String[] args) 方法。
  • @kutschkem 照你说的做,引导我到:java.nio 的 java.nio.file.Files.provider(Unknown Source) 的线程“main”java.lang.NullPointerException 中的异常。 file.Files.newOutputStream(Unknown Source) at java.nio.file.Files.write(Unknown Source) at anon.Main.log(Main.java:240) at anon.Main.main(Main.java:69)
  • @jtrose7 太好了!这意味着它正在做某事,您可以开始调试。我再次建议您与提供代码的人交谈。
【解决方案2】:

我想您应该对提供的 java 文件进行一些修改,同时使用提供的 .jar 文件作为参考。

所以您可能应该将项目导入 Eclipse 作为第一步。
为此:

  • 选择“文件”>“导入...”
  • 选择“常规”>“现有项目进入工作区”
  • 点击“下一步>”
  • 选择“选择存档文件:”
  • 使用“浏览”按钮查找他们提供给您的存档。
  • 选择eclipse会找到的项目
  • 点击“完成”按钮

【讨论】:

    【解决方案3】:

    首先,我要承认@ioannis-barakos 的建议为我解决了这个问题。我添加这个答案只是因为我的情况有点复杂,并且不容易将 cmets 纳入接受的答案,特别是因为我打算对我的解释非常明确。

    我遇到了这个问题,因为我试图找出正确的命令来运行由 Eclipse/Maven“安装”命令生成的 jar。该程序是模块化的,并使用 JavaFX 作为 GUI。 Maven命令“clean javafx;run”成功。

    “为什么要让命令运行 jar?”你问。我希望与一些朋友和同事分享该程序,以获得反馈。我可以使用 JLINK(“clean javafx:jlink”),但创建的映像只能在 Windows 操作系统上运行,而不是 Mac 或 Linux。带有正确命令行的 jar 文件应该在 Mac 上运行。 (至少在 jigsaw 和 javafx 分离之前,他们很容易做到。)

    所以,我拥有的成功的 Windows 命令行如下:

    java -cp myProject-0.0.1.jar --module-path "%PATH_TO_FX%" --add-modules javafx.graphics,javafx.controls my.package.path.LaunchMyProject
    

    正如@ioannis-barakos 解释的那样,-cp 参数为我们提供了类路径,如果还有其他元素,它们将是“;”分开。

    由于我将 JavaFx 用于 GUI,因此必须包含 JavaFX 模块的路径。这是通过 --module-path 参数完成的。模块的其他位置将是“;”分开。这里的位置绝对可以拼出,但我使用的是环境变量 PATH_TO_FX。这指向 JavaFX SDK 中的 /lib 文件夹,其中包含 javafx .jar 文件。为此,我遵循 GluonGetting Started with JavaFX 提供的文档 最后注意,环境变量用引号引起来,因为我将我的 JavaFX 文件夹放在与其他 java jdks 相同的文件夹中,在 c:/program files/java , program files 中的 " " 否则会被解释为分隔符。

    我使用 --add-modules 参数添加的模块列表是在 requires 的 module-info.java 文件中找到的模块列表 行。我的模块信息中也有 java.desktop 的 requires 行,但本地 Java(假设它是模块化版本)应该已经涵盖了。

    最后,可以找到包含 main 的类的确切语法是将 .jar 转换为 .zip 并检查文件夹。注意地址中没有“/”或“\”,只有“.”。分隔符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      • 2018-02-10
      • 1970-01-01
      • 2020-07-28
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多