提问人:Mikhas 提问时间:9/24/2023 更新时间:9/24/2023 访问量:44
使用编译器插件编译后如何修改java字节码?
How to modify java bytecode after compilation using compiler plugins?
问:
我想在编译阶段/之后但在打包之前修改一些 java 类字节码,以便使用自定义引导方法。invokedynamic
为此,我使用扩展模块编写了一个 Java 编译器插件,并附加了一个在字节码生成阶段后执行的侦听器,但是,该模块的公共 API 不公开任何方法或引用字节码流或生成的文件。jdk.compiler
com.sun.source.util.Plugin
jdk.compiler
.class
我还有其他可以遵循的策略吗?
到目前为止,代码如下所示:
package plugin;
import com.sun.source.util.JavacTask;
import com.sun.source.util.Plugin;
import com.sun.source.util.TaskEvent;
import com.sun.source.util.TaskListener;
public class Main implements Plugin, TaskListener {
@Override
public String getName() {
return "my-plugin";
}
@Override
public void init(JavacTask task, String... args) {
task.addTaskListener(this);
}
@Override
public void finished(TaskEvent e) {
if(TaskEvent.Kind.GENERATE.equals(e.getKind())){
System.out.println("no byte code reference here :(");
}
}
@Override
public boolean autoStart() {
return true;
}
}
答: 暂无答案
评论
LambdaMetafactory
JavacTask
generate()
JavaFileManager