有没有一种方法可以让某人在不看到代码的情况下运行我的Java程序?

有没有一种方法可以让某人在不看到代码的情况下运行我的Java程序?,java,jar,jakarta-mail,executable,Java,Jar,Jakarta Mail,Executable,所以基本上我制作了一个依赖终端的Java程序,并想开始分发它,但如果不给他们我的代码,我似乎找不到一种方法来做到这一点。制作.jar文件时,它只在Windows上工作 当尝试在Linux(CentOS)上运行时,我得到 及 我使用命令java-jar MyJar.jar在这两个平台上运行它们。我在这个程序中使用JavaMail,所以这可能是一个问题。只有一个类,其中有一个主类 如果有人甚至可以选择使用jar文件来交付用户无法读取代码的程序,那也太好了。谢谢 与安装在客户机Linux机器上的JDK

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

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

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


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

与安装在客户机Linux机器上的JDK相比,您实际用于编译和构建Jar的JDK要新得多。这时JVM抛出一个

Exception in thread "main" java.lang.UnsupportedClassVersionError:
通过在控制台上运行以下命令,要求您的客户机报告其Java版本

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

javac -target 1.4 source/MyClass.java 

对我来说,问题似乎在于您在运行代码的不兼容版本上编译了代码。例如,您使用JDK1.7编译了它,但CentOS只安装了Java1.5版本


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

关于问题标题:

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


除了其他人描述的版本问题,以及您不需要分发.java文件的事实之外,您还需要在应用程序jar文件的清单文件中设置一个类路径条目来引用JavaMail jar文件,并且您必须将应用程序jar文件和JavaMail jar文件交付给用户。这可能很难做到正确。您可能需要查看以解决该问题。

您不能分发已编译的文件吗?只需给它们.class而不是.java
java.lang。当您使用比用于运行它的JDK更新的JDK编译类时,将抛出.java
UnsupportedClassVersionError
。确保你在linux机器和windows机器上使用相同版本的Java。哦,天哪,它们是不同的版本!谢谢我在Windows上使用BlueJ创建jar文件,谢谢,我也会研究一下!
java -version
javac -target 1.4 source/MyClass.java