分发java应用程序

时间:2012-11-08 20:52:35

标签: java

我最近开发了一些我希望其他人在他们的机器上运行的java应用程序。 我做了一些研究,现在知道要分发java代码,你需要创建.jar文件。 嗯,我做到了,但当我分发这些文件时,它运行在一些计算机上,但在其他计算机上它返回错误说:“主类无法找到”。

  1. JRE版本是否有任何问题。
  2. 用户如何知道他/她应该在哪个版本上运行该应用程序。
  3. 我可以用我的app / jar文件打包正确的jre版本。如何??
  4. jar文件与其他版本的jre不兼容,除非编译它们。

4 个答案:

答案 0 :(得分:2)

选项1:创建一个清单文件,其条目如下所示,并包含在jar中:

     Main-Class: MainProgram

选项2:在运行程序时,只需提及您的Main班级名称,例如如果jar名称为myprogram.jar且主要类别为MainProgram,则按以下方式运行该程序:

        java -cp myprogram.jar MainProgram

如果你的MainProgram接受一些参数,他们也会在命令行中传递它们,例如

       java -cp myprogram.jar MainProgram argument1 argument2

答案 1 :(得分:0)

某些SDK(如Eclipse)具有创建jar文件的功能。 如果您在控制台上工作,这可能会帮助您创建稳定的jar文件:

'jar cfm className.jar MANIFEST.MF className.class'

答案 2 :(得分:0)

  1. 除第4点外,这无关紧要。
  2. 您必须告诉他们所需的最低版本。
  3. 你可以,但是你可能需要创建一个安装程序,它比jar更复杂。
  4. 一般情况下是,如果您的用户至少拥有您编译的版本的VM。您在jar中打包的类文件将针对某个版本的JRE,并且它们的格式会不时发生变化。更高版本的JRE支持更低版本的类文件。
  5. 错误消息表明JRE无法找到您的主类。从评论看起来您没有正确指定清单。它是否包含在jar内的META-INF目录中? jar -tf my_jar.jar告诉你什么?

    如果您担心JRE版本,请尝试在javac命令中指定较低的目标版本。您可以在-target xx调用中添加javac,也可以-source xx添加javac -help。请查看{{1}}以获取有关标志的说明。

答案 3 :(得分:0)

您可以使用jlink。它随JDK一起提供。它有助于分发应用程序,而无需安装Java。

Using Java 9 Modularization to Ship Zero-Dependency Native Apps提到-

  

jlink仅将精简的JRE与那些您的   应用程序需求。

甲骨文博客文章Faster and Easier Use and Redistribution of Java SE提到-

  

使用JDK 9随附的“ jlink”工具将使其变得更加容易   供应用程序开发人员打包和部署专用运行时   而不是依赖预先安装的系统JRE。

现在回答您的两个问题-

如果使用jlink,则用户不必知道他/她应在哪个版本上运行该应用程序。此外,您可以将正确的JRE版本与您的App打包在一起。更清楚地说,自JDK 11起, Java运行时环境(JRE)就不存在了。jlink将为您构建专用的JRE。

JDK 11 Release Notes状态-

  

在此版本中,不再提供JRE或Server JRE。只有   提供了JDK。用户可以使用jlink创建较小的自定义运行时。

Reddit has a nice comment关于此问题。

  

不再有单独的JRE,只有包含所有JRE的JDK   部分(例如Java二进制文件)。 此外,除非您使用OracleJDK,否则请不要使用   打算付钱给他们。 OpenJDK是新的默认设置。