问题标签 [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.
java-compiler-api - 支持泛型的 Java 动态代码生成
是否有任何工具可以提供 Java 动态代码生成并且还支持泛型?
例如,Javassist 是我需要的那种工具,但它不支持泛型。
我编写了一个使用 Java 6 Compiler API 的小库,但据我所知,它依赖于 JDK。有没有办法指定另一个编译器?还是只为我的应用程序提供我需要使用 Java 编译器 API 调用的部分?
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
java - 从 Java 内部运行 Java 代码
我想在 Java 中模拟一个“eval”,以便该函数接受一个字符串(一些源代码),编译它,运行它,然后返回返回值。
我知道我可以使用 JavaCompiler API 编译它,但我不确定实际运行这样的代码的最佳方法。Runtime.exec 觉得这个任务太重了……我不想每次运行这个“eval”函数时都生成另一个 java 进程,只是为了评估“30+20”之类的。这将是缓慢且资源密集型的。
最后,它必须能够运行任何 Java 代码,因此依赖 Java 内部的脚本语言评估器是行不通的(例如,如果输入是比“30+20”更复杂的 Java)
有什么选择吗?
java - 我可以在 Google 应用引擎中使用 JavaCompiler 吗?
有没有办法通过JavaCompiler
在 Google App Engine 中调用 Java 源编译器?
(我没有javax.tools
在白名单上看到任何课程,所以恐怕答案是否定的)
更新
我想知道 Java 服务器页面如何在 Google App Engine 中工作,因为 JSP 被编译为 servlet,这显然需要 Java 编译器?
java - 如何使用 Java Tree Compiler API 找到标识符的类型声明?
我有一个变量/标识符的名称,比如,x
和JCCompilationUnit
and Scope
。有没有办法找到类型x
?
java - 如何在 Google App Engine 中动态编译 Java 类
在回答这个问题时,我了解到不可能javax.tools
从 GAE 应用程序中调用 Java 编译器。
这个限制是否仍然适用?
如果是这样,我有哪些选项可以“即时”将 Java 源代码编译为可加载的类文件?
java - 如何通过 CompilationTask 设置编译源
我不知道如何设置源文件compilationTask
。
我试过这个:
但我收到以下错误:
线程“主”java.lang.IllegalArgumentException 中的异常:不是有效的类名:src/Hello.java
当然,如果我放空而不是类,我会得到“没有源文件”,因为没有给出源文件。我尝试使用JavaCompiler
之前的 run 函数,但我无法在字符串参数中指定选项(或者我不知道如何)。
这是解决方案:
classloader - 修改字节码使方法返回true
我有类文件有这样的方法:
这个验证方法中有很多代码,但我只想让它总是返回真或假。有人可以指出如何修改类文件来实现这一点吗?
java - Webstart 和 JavaCompiler API 限制
我有一个只有签名 jar 的应用程序,所有这些都由同一个证书,我的。我不想用 Webstart 运行应用程序。应用程序运行编译器,编译后的代码运行 LWJGL。但是,当我运行该应用程序时,它通过编译代码返回错误,它实际上无法找到 LWJGL(-library) 包(原始应用程序可以很好地看到它)。当我将应用程序编译为可信库时,它也会出错:
http://download.oracle.com/javase/6/docs/technotes/guides/jweb/mixed_code.html 我找到了这个网站,但它并没有让我对特定主题更加明智,因为它显然与编译后的代码与其他代码的处理方式不同。
谁能帮我解决这个问题?还是清理一下?
编辑:我已经得出结论,编译后的代码被视为无符号。要识别这些库,需要将它们添加到类路径中。
java - 如何加载与当前类不在同一个 jar 存档中的类?
情况:
我正在制作一个用于绘制算法时间复杂度的模拟器。学生可以添加加载自己的 .java 文件来运行它。我的程序编译(使用'JavaCompiler').java 文件。然后它会尝试加载 .class 文件:
在 Eclipse 中运行我的程序时,一切正常,学生可以完美地使用该程序。
问题:
但后来我将我的项目导出到一个可执行的 jar 文件。编译部分仍然有效,但加载类失败,因为它在 jar 文件中搜索它。
我想知道为什么我不能这样做:(更改 . 与 /)
有哪些可能的选择?这是我能想到的:
将编译后的 .class 文件添加到当前运行的 .jar 文件中。这甚至可以工作吗?
我知道可以编辑 jar 档案。但是这可以在运行时工作而无需重新启动程序吗?
其他使用“loadClass()”的方法?这样我就可以加载一个不包含在我的 jar 文件中的类文件
还有其他想法吗?