3

所以基本上我制作了一个依赖于终端的 Java 程序并想开始分发它,但如果不给他们我的代码,我似乎无法找到一种方法来做到这一点。制作 .jar 文件时,它仅适用于 Windows。

尝试在 Linux (CentOS) 上运行时,我得到

  Exception in thread "main" java.lang.UnsupportedClassVersionError:

   Could not find the main class: MyClass. Program will exit.

我正在使用命令 java -jar MyJar.jar 在两者上运行它们。我在这个程序中使用 JavaMail,所以这可能是一个问题。只有一个类,它有一个主要的。

如果有人甚至可以选择使用 jar 文件来交付用户无法阅读代码的程序,那也很棒。谢谢!

4

4 回答 4

3

您实际用于编译和构建 Jar 的 JDK 比安装在客户端 Linux 机器上的JDK 更新。那是JVM抛出一个

Exception in thread "main" java.lang.UnsupportedClassVersionError:

通过在控制台上运行以下命令,让您的客户报告他的 Java 版本

java -version

然后,如果您使用的是Eclipse,请相应地设置项目的目标运行时。如果您自己编译 Java 源文件

javac -target 1.4 source/MyClass.java 
于 2013-07-03T19:30:33.353 回答
0

对我来说,听起来问题在于您在运行代码的不兼容版本上编译了代码。例如,您使用 JDK 1.7 编译它,但 CentOS 操作系统只安装了 java 1.5 版本。 以下是有关此事的一些更详细的信息。

至于你的问题的标题,不,你不必给他们java源代码让他们运行它。所以还有其他事情出错了。很可能是我给出的答案。

于 2013-07-03T19:30:43.353 回答
0

关于问题标题:

混淆你的代码。不要直接打印你的名字,使用生成器方法。

http://en.wikipedia.org/wiki/Obfuscation_(软件)

http://www.yworks.com/en/products_yguard_about.htm

http://www.allatori.com/

http://www.zelix.com/

http://www.sable.mcgill.ca/JBCO/

于 2013-07-03T19:32:19.423 回答
0

除了其他人描述的版本问题以及您不需要分发 .java 文件这一事实之外,您还需要在应用程序 jar 文件的清单文件中设置一个 Class-Path 条目以引用JavaMail jar 文件,您必须将应用程序 jar 文件和 JavaMail jar 文件交付给用户。这可能很棘手。你可能想看看One-JAR来解决这个问题。

于 2013-07-03T21:03:39.410 回答