问题标签 [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 投票
4 回答
2546 浏览

java-compiler-api - 支持泛型的 Java 动态代码生成

是否有任何工具可以提供 Java 动态代码生成并且还支持泛型?

例如,Javassist 是我需要的那种工具,但它不支持泛型。

我编写了一个使用 Java 6 Compiler API 的小库,但据我所知,它依赖于 JDK。有没有办法指定另一个编译器?还是只为我的应用程序提供我需要使用 Java 编译器 API 调用的部分?

0 投票
4 回答
1081 浏览

java - 具有相互依赖的类的 Java 编译器 API

我正在使用 Java Compiler API 来编译内存中的类。也就是说,类被编译为字节码(没有 .classes 文件存储在磁盘中),然后通过重建字节码来加载。

有时,我需要编译一个依赖于另一个也是在内存中编译的类的类。例如:编译A类,然后编译依赖于A类的B类。

为了解决这个问题,我将 Class A 和 Class B 作为编译器 API 的 getTask 方法所需的编译单元传递。

但是,我真的不喜欢这个解决方案,因为它让我重新编译已经编译的 Class A。

有没有办法解决这个问题?

编辑:我通过这个链接找到了一个解决方案:http: //www.ibm.com/developerworks/java/library/j-jcomp/index.html

0 投票
1 回答
251 浏览

java - 从 Java 内部运行 Java 代码

可能的重复:
在 Java 中使用 eval
加载外部源代码并在内部使用它们(通过重新编译或其他方式)

我想在 Java 中模拟一个“eval”,以便该函数接受一个字符串(一些源代码),编译它,运行它,然后返回返回值。

我知道我可以使用 JavaCompiler API 编译它,但我不确定实际运行这样的代码的最佳方法。Runtime.exec 觉得这个任务太重了……我不想每次运行这个“eval”函数时都生成另一个 java 进程,只是为了评估“30+20”之类的。这将是缓慢且资源密集型的。

最后,它必须能够运行任何 Java 代码,因此依赖 Java 内部的脚本语言评估器是行不通的(例如,如果输入是比“30+20”更复杂的 Java)

有什么选择吗?

0 投票
1 回答
348 浏览

java - 我可以在 Google 应用引擎中使用 JavaCompiler 吗?

有没有办法通过JavaCompiler在 Google App Engine 中调用 Java 源编译器?

(我没有javax.tools在白名单上看到任何课程,所以恐怕答案是否定的)

更新

我想知道 Java 服务器页面如何在 Google App Engine 中工作,因为 JSP 被编译为 servlet,这显然需要 Java 编译器?

0 投票
2 回答
1140 浏览

java - 如何使用 Java Tree Compiler API 找到标识符的类型声明?

我有一个变量/标识符的名称,比如,xJCCompilationUnitand Scope。有没有办法找到类型x

0 投票
1 回答
997 浏览

java - 如何在 Google App Engine 中动态编译 Java 类

在回答这个问题时,我了解到不可能javax.tools从 GAE 应用程序中调用 Java 编译器。

  • 这个限制是否仍然适用?

  • 如果是这样,我有哪些选项可以“即时”将 Java 源代码编译为可加载的类文件?

0 投票
2 回答
2104 浏览

java - 如何通过 CompilationTask 设置编译源

我不知道如何设置源文件compilationTask

我试过这个:

但我收到以下错误:

线程“主”java.lang.IllegalArgumentException 中的异常:不是有效的类名:src/Hello.java

当然,如果我放空而不是类,我会得到“没有源文件”,因为没有给出源文件。我尝试使用JavaCompiler之前的 run 函数,但我无法在字符串参数中指定选项(或者我不知道如何)。

这是解决方案:

0 投票
4 回答
2412 浏览

classloader - 修改字节码使方法返回true

我有类文件有这样的方法:

这个验证方法中有很多代码,但我只想让它总是返回真或假。有人可以指出如何修改类文件来实现这一点吗?

0 投票
1 回答
224 浏览

java - Webstart 和 JavaCompiler API 限制

我有一个只有签名 jar 的应用程序,所有这些都由同一个证书,我的。我不想用 Webstart 运行应用程序。应用程序运行编译器,编译后的代码运行 LWJGL。但是,当我运行该应用程序时,它通过编译代码返回错误,它实际上无法找到 LWJGL(-library) 包(原始应用程序可以很好地看到它)。当我将应用程序编译为可信库时,它也会出错:

http://download.oracle.com/javase/6/docs/technotes/guides/jweb/mixed_code.html 我找到了这个网站,但它并没有让我对特定主题更加明智,因为它显然与编译后的代码与其他代码的处理方式不同。

谁能帮我解决这个问题?还是清理一下?

编辑:我已经得出结论,编译后的代码被视为无符号。要识别这些库,需要将它们添加到类路径中。

0 投票
3 回答
202 浏览

java - 如何加载与当前类不在同一个 jar 存档中的类?

情况:

我正在制作一个用于绘制算法时间复杂度的模拟器。学生可以添加加载自己的 .java 文件来运行它。我的程序编译(使用'JavaCompiler').java 文件。然后它会尝试加载 .class 文件:

在 Eclipse 中运行我的程序时,一切正常,学生可以完美地使用该程序。

问题:

但后来我将我的项目导出到一个可执行的 jar 文件。编译部分仍然有效,但加载类失败,因为它在 jar 文件中搜索

我想知道为什么我不能这样做:(更改 . 与 /)

有哪些可能的选择?这是我能想到的:

  • 将编译后的 .class 文件添加到当前运行的 .jar 文件中。这甚至可以工作吗?

    我知道可以编辑 jar 档案。但是这可以在运行时工作而无需重新启动程序吗?

  • 其他使用“loadClass()”的方法?这样我就可以加载一个不包含在我的 jar 文件中的类文件

还有其他想法吗?