Mar*_*tin 25 java compilation code-translation
在将源代码传递给编译器之前,我想在编译时转换 java源代码.换句话说,我想创建一个能够转换的预处理器
"bla bla bla"
Run Code Online (Sandbox Code Playgroud)
进入任何其他代码,如:
new MyClass("bla", 3)
Run Code Online (Sandbox Code Playgroud)
我的实际动机是进行字符串加密,如此处所述
有些人建议编写自定义注释处理器,但据我理解注释:
有些人建议使用Spoon或ObjectsWeb ASM等框架,但这些框架在现有代码库中学习和部署似乎很复杂.
我茁壮成长为两种方法找到一个简单的java代码预处理示例.
有没有人看到任何聪明的方法进行代码转换,而没有用多个常春藤模块完全改变现有的大型代码库?注释似乎是最好的方法,但我不明白该怎么做.
fgl*_*lez 11
我想你可以尝试使用Project Lombok中使用的相同技术
引擎盖下发生了什么?即,样板中的注释结果如何以字节码结尾?
Reinier:注释处理器API只允许您创建新文件,它不允许您修改其中包含注释的文件.这是Lombok的功能,因此Lombok不使用注释处理器API.
相反,Lombok仅使用注释处理器API作为将自身注入编译过程的机制.所有注释处理器都在编译过程的早期初始化,而Lombok在初始化为注释处理器时会修改它.我们只更改了一件事:AST(原始源代码,解析为树形式)首先传递给Lombok,在javac继续之前生成需要生成的任何内容.
也可以将Project Lombok扩展到您的需求
有人已经用 python/jython 编写了一个小型的类似 C 的预处理器 ant 插件。你可以在这里找到它。请注意,我从未使用过它,但也许它可以成为满足您需求的一个很好的起点。
google code 中还有一个java-comment-preprocessor maven 插件(类似风格),这也可能是一个有用的起点。
祝你好运。听起来是一个有趣的挑战。当然,请记住,混淆只是使提取字符串变得更具挑战性,但仍然不是不可能。如果您确实想让它变得更加困难,那么您可能需要考虑加密字符串和/或使用 AOP。
| 归档时间: |
|
| 查看次数: |
3886 次 |
| 最近记录: |