没有清单文件 Eclipse

No manifest file Eclipse

他们向我发送了一个 java 代码(用 Eclipse 编写),该代码以 zip 形式提供。解压后,我有以下文件:

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

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

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

    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 文件添加到构建路径?

如果您尝试使用以下命令执行它:java -jar jssc.jar 但失败了,请尝试使用以下命令

java -cp jssc.jar anon.Main

上面会告诉JVM在它的class路径中加载jssc.jar然后在Mainclass.

中执行main方法

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

例如:

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

我猜你应该对提供的 java 文件做一些修改,同时使用提供的 .jar 文件作为参考。

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

  • Select "File" > "Import..."
  • 选择 "General" > "Existing Projects into Workspace"
  • 点击"Next >"
  • Select "Select archive file:"
  • 使用 "Browse" 按钮找到他们给你的存档。
  • Select eclipse 会找到的项目
  • 单击 "Finish" 按钮

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

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

“为什么要命令 运行 一个罐子?”你问。我希望与一些朋友和同事分享该程序,以获得反馈。我可以使用 JLINK(“clean javafx:jlink”),但创建的图像只能在 Windows OS 上使用,而不适用于 Mac 或 Linux。具有正确命令行的 jar 文件应该 运行 on 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 参数为我们提供了 class 路径,如果还有其他元素,它们将是 "; “分开了。

当我将 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 参数添加的模块列表是在 module-info.java 文件中的 requires 行。我的模块信息中也有 java.desktop 的要求行,但本地 Java(假设它是模块化版本)应该已经涵盖了。

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