gpt4 book ai didi

java - 向 Java 添加自定义编译时处理步骤的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-01 23:17:33 27 4
gpt4 key购买 nike

在将源代码编译为字节码之前添加编译时步骤来分析和修改源代码的最简单方法是什么?

我可以用 Java 写这个吗?最好将其编写为 IDE 插件吗?

最佳答案

Can I write this in Java?

是的,当然。有许多基于 Java 的库用于操作字节码:

Would it be best written as an IDE plugin?

在我看来,没有。您没有提到您正在使用哪个 IDE,但根据我自己的经验,编写 IDE 插件比向 Ant/Maven/Gradle 等构建工具添加自定义步骤具有更陡峭的学习曲线。即使您当前没有使用这些构建工具之一,我个人认为,采用这些工具之一也会比编写 IDE 插件更容易。

此外,将构建步骤绑定(bind)到特定 IDE 会降低构建的可移植性。在走这条路之前要考虑两件事:

1) 如何在 Jenkins 或 Bamboo 等持续集成服务器上运行构建。在构建服务器上调用使用自定义插件的 headless Eclipse/Netbeans 构建并非不可能,但它并不像运行使用 Ant/Maven/Gradle 等“标准”工具的构建那么简单。

2) 这会对您团队的其他成员产生什么影响?您需要找到一种方法将插件分发给每个开发人员,处理插件的版本控制和更新等。您团队中的每个人都使用相同的 IDE 吗?

我对您的项目、您的团队(如果您在团队中工作)或您正在开发的软件类型一无所知,因此这些注意事项可能不适用于您。我只是根据我自己的经历提到它们作为思考的食粮。

What is the simplest way to add a compile-time step to analyse and modify the source code before it is compiled to byte code?

您的构建使用什么? Ant ?马文? Gradle ?您要遵循的具体步骤很大程度上取决于您的构建工具。

根据您想要完成的任务,您可能根本不需要编写任何内容。

For example, analysing parts of the code and splitting the work into multiple threads where necessary –

查看AspectJ 。您也许可以编写一个方面来拦截对某些方法的调用并将它们提交给 ExecutorService 。有现成的插件可以从最常见的构建系统调用 AspectJ 编译器。

如果您确实想自己写一些东西,我认为您最好的选择是 write a custom Ant task 。我建议使用 Ant 任务,因为它是最低的共同点。它当然可以使用 Ant 运行,但 Maven 和 Gradle 也可以调用 Ant 任务。

编写一个新类 extends Task并在那里做你的事情。

public class MyTask extends Task {
public void execute() {
// do your bytecode manipulation here...
}
}

您可以从 Ant 脚本中像这样调用它:

<taskdef name="mytask" classname="MyTask" classpath="classes"/>
<mytask/>

查看 Apache Axis2 code generation task有关进行构建时代码生成以及如何处理类路径问题/访问代码的示例。

关于java - 向 Java 添加自定义编译时处理步骤的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20996261/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com