java – 在编译的类中更改字符串常量
我需要更改部署的
Java程序中的字符串常量,即编译的.class文件中的值.它可以重新启动,但不容易重新编译(虽然这是一个不方便的选项,如果这个问题没有产生任何答案).这可能吗?
更新:我只是使用十六进制编辑器查看文件,看起来我可以轻松地更改字符串.那工作是否不会使文件的某种签名无效?旧的和新的字符串都是字母数字,如果需要,可以是相同的长度. 更新2:我修正了因为我需要改变的特定类是非常小的,并且在新版本的项目中没有改变,我可以编译它,并从那里拿出新的类.仍然感兴趣的答案,不涉及编译,但为教育目的. 解决方法
如果你有这个类的来源,那我的做法是:
>获取JAR文件 蚂蚁任务示例: <jar destfile="${jar}" compress="true" update="true" duplicate="preserve" index="true" manifest="tmp/META-INF/MANIFEST.MF" > <fileset dir="build/classes"> <filter /> </fileset> <zipfileset src="${origJar}"> <exclude name="META-INF/*"/> </zipfileset> </jar> 在这里我也更新清单.先放入新类,然后添加原始JAR中的所有文件. duplicate =“preserve”将确保新的代码不会被覆盖. 如果代码未签名,您还可以尝试替换字节,如果新字符串的长度与旧字符的长度完全相同. Java对代码进行了一些检查,但是有no checksum in the .class files. 你必须保留长度;否则类加载器会变得困惑. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |