Jar文件 - 防止访问源代码

时间:2011-01-27 22:44:17

标签: java jar executable-jar runnable

我想将一个小型Java应用程序移交给可运行的jar,但我不希望任何人访问我的源代码。我是否正确地假设jar文件中没有包含源代码(.java文件)?

User269799

10 个答案:

答案 0 :(得分:3)

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

jar tvf foo.jar

请注意,Java可以很容易地进行反编译 - 因此,虽然任何收件人都无法访问带有注释等的实际源代码,但他们可以非常清楚地看到您的逻辑。您可能想要使用混淆器来帮助保护您的IP。就个人而言,我试图避免使用混淆器 - 考虑到当我们具有通知和测试的真实来源时,我们大多数人发现维护代码的难度,想象一下当你没有这些东西时有多难: )这是你的电话。只需确保彻底测试混淆代码 - 可能存在细微问题,尤其是在使用反射时。

答案 1 :(得分:2)

Jar文件通常只包含.class文件,它们是java字节码文件以及资源。但是,为了使代码更加安全,您需要关闭调试信息,如果您确实想要安全,请通过混淆器运行它。

编辑:berry120的评论是对的 - 它们可以包含源文件,但通常它们不包含。我只想澄清未来的任何读者。这取决于用于生成jar的工具的设置。

答案 2 :(得分:2)

你是对的,jar中没有源代码(除非你将你的构建系统配置为专门将它放在那里)。但是你总是冒着代码从字节码反编译的风险。一个混淆器可能会有所帮助。

答案 3 :(得分:2)

是。通常,jar只包含字节编译的.class文件。也就是说,它们也可以包含源代码 - 它取决于你(或你的工具)分别放入它们。

但请注意,反编译在.class文件上的效果非常好,因此不要使与安全相关的任何内容依赖于此类代码混淆技术。

答案 4 :(得分:2)

如果计算机可以运行它,人类可以对其进行逆向工程,对Java来说并不是特别难。

所以技术保护根本行不通。您需要以具有约束力的合同或类似形式提供法律保护。您甚至可以将您的作品置于GPL之下,但支付给您的人除外,这足以让大多数企业避免盗窃您的作品。

您想要避免什么情况?

答案 5 :(得分:1)

通常没有,但您可以使用jar -tvf <filename>命令进行检查。

但是我必须警告你,将大多数.class文件反编译成合理可读的java源代码非常容易。

为避免这种情况,您必须使用混淆器,但这需要您做一些额外的努力。 (例如RetroGuard。)

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

答案 6 :(得分:1)

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

如果您确实需要它以确保安全,那么您需要进行模糊处理。

答案 7 :(得分:1)

这将取决于你生成.jar的方式,Eclipse确实有一个选项,可以在.jar中包含.java文件,但默认情况下它被禁用,如果需要你必须激活它。

答案 8 :(得分:1)

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

你可以解决这个问题,例如yGuard,它很容易作为一个蚂蚁任务挂钩,但正如其他人所说,你的代码真的那么重要,没有人能看到它吗?

答案 9 :(得分:0)

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