Java 编译或不编译.class文件

Java 编译或不编译.class文件,java,compilation,reverse-engineering,.class-file,Java,Compilation,Reverse Engineering,.class File,在Tomcat浏览器中有一个在Windows上运行的web应用程序。 应用程序用户将.jar文件的数量作为其逻辑的存储 当我打开需要修改逻辑的jar文件时,我会看到一堆.class文件。(我假设是Java编译的类)。当我试图在文本编辑器中打开.class文件时,我看到一个半可读的乱码 当我将这个编译后的.class提供给showmycode.com这样的服务时,我可以看到实际的java代码。 此时,我根据需要修改代码,并希望将更新后的.class文件放回应用程序使用(将其放回jar中) 我是否必

在Tomcat浏览器中有一个在Windows上运行的web应用程序。 应用程序用户将.jar文件的数量作为其逻辑的存储

当我打开需要修改逻辑的jar文件时,我会看到一堆.class文件。(我假设是Java编译的类)。当我试图在文本编辑器中打开.class文件时,我看到一个半可读的乱码

当我将这个编译后的.class提供给showmycode.com这样的服务时,我可以看到实际的java代码。 此时,我根据需要修改代码,并希望将更新后的.class文件放回应用程序使用(将其放回jar中)

我是否必须将.class文件编译成“半可读的乱七八糟”文件,或者我可以将其作为源代码文件放在那里(可能不是,但我想以防万一)。
如果我必须编译atered代码,我可以不用在某个JavaIDE中启动一个项目,通过命令行或其他方式将其编译成.class吗

编辑没有源代码的应用程序有两种主要方法

第一个,正如您所发现的,是反编译、编辑、重新编译。优点是您不必了解字节码,因为它只是反编译为Java。主要的缺点是,即使是最好的反编译器也不能保证生成可重新编译的代码。如果应用程序完全被混淆了,您可以忘记重新编译

另一种方法是拆解、编辑和重新组装。我建议这样做(披露,我写的)。另一种选择是ASM,但它是为程序修改而设计的,而不是手工编辑,而且更笨重


字节码编辑的主要优点是,即使应用程序已被模糊处理,它也始终有效。缺点是,它显然要求您理解并能够直接使用字节码编程。

您为什么要开始执行反编译-编辑-重新编译循环?你不应该这么做。只需处理原始的、有文档记录的、未混淆的源代码,并在代码准备就绪时编译即可。这样,你总是有可读的、文档化的代码。看到你的背景是C#-你所做的类似于反编译.NET DLL/EXE,编辑代码,然后重新编译它们。作为一个工作流,它没有多大意义。如果你必须反编译一个文件-只需做一次,然后记录它,理解它,并从那时起始终使用源代码。我正在修改一个我无法访问其源代码的应用程序。在大多数情况下,最好使用反射来做这件事。我不明白如何查看源代码(在.Net中反射)将帮助我更改.jar文件的逻辑。