Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jar文件-阻止访问源代码_Java_Jar_Executable Jar_Runnable - Fatal编程技术网

Java Jar文件-阻止访问源代码

Java Jar文件-阻止访问源代码,java,jar,executable-jar,runnable,Java,Jar,Executable Jar,Runnable,我想把一个小的Java应用程序作为一个可运行的jar交付,但我不希望任何人能够访问我的源代码。我认为jar文件中没有包含源代码(.java文件)对吗 User269799通常没有,但是您可以使用jar-tvf命令来检查它 但是,我必须警告您,将大多数.class文件反编译为可读性相当好的java源代码非常容易 为了避免这种情况,您必须使用模糊处理程序,但这需要您付出额外的努力。(例如……) 话虽如此,问自己一个问题:“我的代码真的那么有价值或特别,我需要做这一切吗?”通常答案是否定的,我们编写的

我想把一个小的Java应用程序作为一个可运行的jar交付,但我不希望任何人能够访问我的源代码。我认为jar文件中没有包含源代码(.java文件)对吗


User269799通常没有,但是您可以使用
jar-tvf
命令来检查它

但是,我必须警告您,将大多数
.class
文件反编译为可读性相当好的java源代码非常容易

为了避免这种情况,您必须使用模糊处理程序,但这需要您付出额外的努力。(例如……)


话虽如此,问自己一个问题:“我的代码真的那么有价值或特别,我需要做这一切吗?”通常答案是否定的,我们编写的大多数代码都没有什么特别之处。

你是对的,但是.class文件可以很容易地反汇编成java代码,而且在大多数情况下都非常准确

如果您真的需要它具有适当的安全性,那么您需要进行模糊处理。

Jar文件通常只包括.class文件,它们是java字节码文件以及资源。然而,为了使代码更加安全,您需要关闭调试信息,如果您真的想确保安全,请通过模糊处理程序运行它

编辑:berry120的评论是正确的-它们可以包含源文件,但通常不包含。我只是想为以后的读者澄清一下。这取决于用于生成jar的工具的设置。

假设您不将java文件放入jar文件,它们不会神奇地出现:)当然,您可以在jar文件中包含任何您喜欢的内容。您可以列出要检查的内容:

jar tvf foo.jar

请注意,Java可以很容易地反编译——因此,尽管任何接收者都无法通过注释等访问您的实际源代码,但他们可以非常清楚地看到您的逻辑。您可能希望使用模糊器来帮助保护您的IP。就我个人而言,我尽量避免混淆器——考虑到我们大多数人都发现,当我们有真正的源代码和命令和测试时,维护代码是多么困难,想象一下,当你没有这些东西时,这是多么困难:)不过,这是你的决定。只需确保彻底测试模糊代码—可能会有一些微妙的问题,特别是在使用反射时。

该.jar文件不包含源代码,只包含字节码(.class)。但由于字节码是独立于机器的,因此可以非常容易地进行反编译。没有办法阻止其他人访问您的源代码。

您是对的,jar中没有源代码(除非您将构建系统配置为专门放在其中)。但是您的代码总是有被字节码反编译的风险。模糊处理可能会有所帮助。

这取决于您生成.jar的方式,Eclipse确实可以在.jar上包含.java文件,但默认情况下它是禁用的,如果需要,您必须激活它。

是的。通常,JAR只包含字节编译的.class文件。这就是说,它们也可以包含源代码,这取决于您(或您的工具)将什么放入其中


但是,请注意,反编译在.class文件上运行得非常好,因此不要让任何与安全相关的东西依赖于像这样的代码混淆技术。

Jar文件可能包含源代码(您可以选择是否包含源代码),因此不包含源代码不是问题。不过,您需要注意的是,人们可能会对jar文件中的类文件进行反向工程


您可以使用一个模糊器来绕过这个问题,例如它可以很容易地作为ant任务挂钩,但是正如其他人所说的,您的代码真的那么重要以至于没有人看到它吗?

如果计算机可以运行它,人类可以对它进行反向工程,而这对Java来说并不特别困难

所以技术保护根本不起作用。您需要以具有约束力的合同或类似形式的法律保护。你甚至可以把你的作品置于GPL之下,除了那些付钱给你的人,这对于大多数企业来说足以避免窃取你的作品


您希望避免的具体情况是什么?

我使用Eclipse中的“创建可运行的Jar”创建它,它只创建一个Jar文件,而不允许用户指定要包含哪些文件。@user269799:因此,请稍后使用我显示的命令查看Jar文件。同意,修复远程用户报告的生产缺陷本身就足够麻烦了。添加额外的混淆步骤只会带来更多麻烦。@Matthias Benkard,我认为jar文件是完全安全的,其他人无法从中还原任何源代码!!你说“它们也可以包含源代码”你能说服我吗???@Alaa,这是一个完全的误解,jar文件绝对不是完全安全的,诸如此类!它们本质上只是zip文件,可能包含也可能不包含源代码,但它们也包含的类文件可以很容易地反向工程回Java代码。@berry120,“很容易反向工程回Java代码”哇!那么,保护我的java源代码的最佳方法是什么呢???@Alaa不写任何东西。:)但说真的,为什么你认为你需要保护你的源代码?谁发来的?@Alaa如果识别你的信息源可以识别安全算法和类似的漏洞,或者识别硬编码密码,那么这就是你的信息源的问题。不管你怎么混淆它,它只是让我们更难理解最初编写的内容,但它从来没有让我们不可能。Jar文件也可以包含Java源代码,它们不一定只包含类文件。我应该指定我想检查Eclipse如何打包jars。谢谢。不一定正确,jar文件可以而且有时确实包含源代码——不包含源代码的情况更常见。