问题标签 [java-compiler-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
873 浏览

java - Java 编译器 API NullPointerException

我正在使用此代码在运行时编译 Java 文件。首先,这是我的目录树(在 Eclipse 中)。

这是我得到 NullPointerException 的代码(我已经尝试在 Eclipse 中使用 JDK 作为我的标准 VM)。

这是 CustonJavaFileObject:

我究竟做错了什么?

编辑:

我的 PATH 中没有 JDK(我无法添加它)

这是我的堆栈跟踪:

0 投票
2 回答
1945 浏览

java - 使用 JavaCompiler 以编程方式编译 java?

我从另一个 Stack Overflow 线程得到了这个 Java 代码

但我不断收到这样的 NullPointerException

确实编译但它在运行时抛出异常。我究竟做错了什么?

0 投票
3 回答
12197 浏览

java - 是否可以仅在内存中以编程方式编译 java 源代码?

我发现许多参考资料解释了如何使用该类以编程方式编译 JavaJavaCompiler类:

但是,我想知道是否有一个开源库可以让我编译以编程方式生成的源代码(因此不涉及 src 文件)并在输出流中生成一些字节码(而不在文件系统中生成类文件)。

例如,我正在寻找能够写这样的东西:

谢谢你的帮助。

0 投票
1 回答
46 浏览

java - Java 执行之间的 Java 字符 IO

使用javax.tools.JavaCompilerand javax.tools.ToolProvider,我将一个用户输入字符串(应该是一个方法)与一个预定义的类一起包装在一个大字符串中,并在我的代码中执行它。有没有办法(在同一代码中)实例化已编译的类(因为它直到运行时才存在)以使用预定义的一组案例测试所述函数?

示例:提示用户编写一个方法,该方法返回作为参数发送给它的相反布尔值。

用户键入所述方法。

我围绕该方法包装了一个通用类,并使用一组预定义的测试用例(true,false)来检查它的功能(应该返回 false,true)

0 投票
1 回答
157 浏览

eclipse - JAXB 编译错误,afterUnmarshall 的未使用参数

void afterUnmarshal(Unmarshaller unmarshaller, Object parent)在我的 bean 中使用,如果不使用参数,编译器设置为失败。

如果我覆盖具有参数的 javadoc 的超类/接口,编译器似乎可以使用未使用的参数。

但是我找不到任何类来覆盖 afterUnmarshall 方法。是否没有解组器接口或类似的东西来解决这个问题?

0 投票
1 回答
1042 浏览

java - 有没有办法在给定范围内生成唯一的变量名?

给定 a Scope,是否有一个函数可以生成唯一变量名,以便可以在范围内插入唯一名称的变量声明,并且生成的源代码 /CompilationUnitTree仍然可以编译?

0 投票
1 回答
491 浏览

java - 是否有用于按评估顺序访问表达式树的 TreeVisitor?

使用 Java Compiler Tree API,可以使用 a 遍历 a 的叶子树TreePath及其子树TreeVisitor

是否有TreeVisitor按评估顺序访问所有“节点”的实现?例如,如果7 - 8 * 2 + 10被解析为:

是否有一个TreeVisitor会访问BinaryTreefor8 * 2后跟BinaryTreefor 7 - (8 * 2),然后是BinaryTreefor (7 - (8 * 2)) + 10

0 投票
3 回答
159 浏览

blackberry - 为不同版本编译不同的部分 - Java

有没有办法使用 eclipse 为不同的部分编译 BlackBerry Java 代码? BB 版本 OS 6.0 及更高版本中有一个名为LocationInfo的类。

如果尝试为 OS 5 编译,我会收到编译错误(因为未定义 LocationInfo)但是如果我为 OS 6 编译我的代码,我将无法在任何基于 5 的设备上进行部署。

我希望我的代码库是版本 5 并支持Locationinfo的方法 (仅在 6.0 及更高版本中可用)。是否可以进行分段编译或者是否有任何解决方法?

谢谢

0 投票
1 回答
4702 浏览

java-compiler-api - 使用 Java Compiler API 编译多个 java 文件

您好我需要创建、编译和加载 java 类运行时。使用 FTL 我正在创建 java 源文件,并且如果没有动态依赖项,则能够编译源代码。

用一个实例来详细说明,我有两个java源文件,一个接口及其实现类。我可以使用 java 编译器 api 编译接口,如下所示

我为已经在 classpath 中的静态类设置了类路径,但是这种方法不适用于动态创建的类?任何自定义类加载器都可以解决这个问题吗?我的最终实现将在 web/app 服务器中

任何反馈将不胜感激

萨西什

0 投票
3 回答
510 浏览

java - 最好的选择?在编译之前编辑字节码 (asm) 或编辑 java 文件

目标

  • 检测变量之间的比较和副本在哪里进行
  • 在操作发生的行附近注入代码
  • 代码的目的:每次运行类时都会增加一个计数器

通用:计算使用某些参数执行后进行的比较和复制的数量

2 个选项

注意:我总是有一个 .java 文件开头

1)编辑java文件


查找与正则表达式的比较并在行附近注入代码片段然后编译类(我的应用程序使用JavaCompiler)

2)使用ASM字节码工程


还检测我想要跟踪的事件并将片段注入字节码然后使用(已经编译但修改)类

我的问题

最好/最干净的方法是什么?有一个更好的方法吗?