问题标签 [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 回答
506 浏览

java - 调用 JavaCompiler.run() 时找不到 javac 文件

我正在尝试使用JavaCompiler.run()来编译动态生成的源文件。下面是我的程序,当我运行它时,我得到了 System.err:

javac:找不到文件:C:..bla..bla..\test\A.java C:..bla..bla..\test\B.java C:..bla..bla..\test \C.java 用法:javac 使用 -help 获取可能选项的列表

文件没有编译,但是当我输入命令提示符时,一切都被编译了

javac C:..bla..bla..\test\A.java C:..bla..bla..\test\B.java C:..bla..bla..\test\A.java

这是完整的源代码

store(filename, source) 保存文件源并返回存储文件的完整路径。

0 投票
4 回答
724 浏览

java - 如果不在类文件中,编译后的代码将存储在哪里

最近在阅读THE STRUCTURE OF THE JAVA VIRTUAL MACHINE时遇到一个疑问

在第 5 页第 5 章。2、

由 Java 虚拟机执行的编译代码使用独立于硬件和操作系统的二进制格式表示,通常(但不一定)存储在文件中,称为类文件格式。

那个括号但不一定是这个原因。

问题是,

在哪种情况下编译的代码不会存储在类文件中?如果它不会存储在类文件中,那么在哪里以及如何?

编辑:请注意,这个问题与 ClassLoader 无关。

0 投票
2 回答
1686 浏览

java - 以编程方式创建具有来自 GUI 的外部 JAR 的可运行 JAR?

我有一个简单的测试程序,只有一个按钮。当用户单击按钮时,程序应该创建一个 Runnable JAR。Runnable JAR 是一个在 Firefox 中打开 google.com 的简单程序。该计划分为三个班级。


1) Main.java


2) Selenium.Java


3)TestGUI.java

我有两个主要课程。我添加TestGUI.java到清单中,所以 GUI 会显示出来。一旦用户单击按钮,我希望我的程序创建一个可运行的 JAR,其中包含Main.javaSelenium.java.

null pointer exception但是,我得到一个错误int compilationResult = compiler.run(null, null, null, file1ToCompile, file2ToCompile);

我怎样才能做到这一点?

0 投票
1 回答
1195 浏览

java - How to dynamically create new class implementing some interface and instantiate it?

Is it possible to compose new class at runtime in Java?

What are the means for that? Refection? Compiler API?

I can do

Can I do the same having A.class value?

0 投票
2 回答
1241 浏览

java - 访问注释处理器中的常量字段

假设一个类定义了一个常量字段:

并假设注释接口声明如下:

最后,假设注释使用如下:

问题:在注释处理器中,我如何才能CONSTANT_FIELD从其用于设置值的元素中获取元素@Something


编辑:在问题本身中包含一个具体示例。

我有一个这样使用的注释:

注释处理器需要知道这是在类RULE_statement中定义的常量。BQLParser如果我可以通过设置注释的属性直接访问Elementfor ,它将消除对属性的需要。此注解在实际应用程序中使用了数千次,并且始终只是常量的声明类型。解决这个问题会将注释的使用简化为:BQLParser.RULE_statementrulerecognizerrecognizerrule

0 投票
0 回答
68 浏览

java - 在 glassfish 3 中运行时编译 JUnit 类

我在我的应用程序中有要运行的 JUnit 测试,但是这些 JUnit 测试是在运行时创建和编译的。我正在加载一个文本模板,替换一些类标签,并希望在运行时使用来自 java 的 javax.tools.Compiler 编译此源代码。

我正在 glassfish 3 上部署和运行此应用程序,这似乎是问题所在,编译器找不到 JUnit 库(但它包含在 .war 中)并引发编译异常。创建的 JUnit 测试源代码可以编译,没有语法错误或类似的东西。

该应用程序是通过 maven 构建的,这里是 pom.xml:

我正在使用 CharSequenceCompiler ( http://www.ibm.com/developerworks/library/j-jcomp/ ) 的小修改版本在运行时编译类。编译器只使用 jdk 类来处理源代码。

有任何想法吗?

0 投票
2 回答
3055 浏览

java - 如何使用通配符将 JavaCompiler 的类路径设置为多个 .jar 文件

我正在使用JavaCompilerofjavax.tools来编译一些 java 代码,并且我试图在我的文件中使用通配符classpath以包含所有.jar文件,但我失败了。

这是我的代码:

上面的代码工作得很好。但是当我试图classpath改变

它失败了

我还尝试了以下更改

但他们都没有工作。有任何想法吗?

谢谢

注意:路径包含斜杠和反斜杠的原因是因为我的程序在运行时识别环境并自动补全路径。

编辑:我正在使用 tomcat 6 和 java 1.7.0_21

0 投票
2 回答
2703 浏览

java - 如何以编程方式访问类的 javadoc?

我想在服务类运行之前显示一些文本。该文本可以是 HTML,由类的 javadoc 生成。是否可以从类本身访问/生成它?

0 投票
1 回答
436 浏览

android - 当构建目标设置为 16 但在 api 级别 17 编译时 Proguard 失败

我可以在 4.1.2 (api 16) 和 4.2.2 (api 17) 上调试和运行我的应用程序。如果我在构建设置为 17 时尝试导出应用程序进行生产,它会正常工作,但如果我将目标降低到 17,我会遇到一些错误,主要错误是

警告:com.google.android.gms.common.images.a:在类 android.widget.TextView 中找不到引用的方法 'android.graphics.drawable.Drawable[] getCompoundDrawablesRelative()'

不知道为什么它会抛出该错误或为什么它适用于一个 api 级别而不适用于另一个?

这是我的 proguard 配置文件

0 投票
1 回答
165 浏览

java - 编译 .java 文件并从中执行一个函数

好的,所以我有一个程序,用户可以在其中编写 .java 文件并执行它(在运行时....duh !!)。目前,用户只能编辑一个 .java 文件(暂时)。现在我想编译 .java 文件并将其制成 .class 文件。要运行该文件,我希望用户有一个void main()函数,我只需执行该函数即可运行它。因此,我使用 JTextArea、BufferedReader、BufferedWriter 等使 .java 文件可编辑。现在我编写的用于编译文件的代码是:

该代码将文件编译为 .class 文件。现在,当我从中执行主要功能时,它不起作用。事实上,成功的价值是真实的(因为它打印的是真实的)。完成后,用户按下“运行”按钮,我使用它来运行该功能:

Script script = new Script(); script.main();

现在由于某种原因,脚本不会自行更新。它仍然执行在修改脚本之前编写的相同内容....尽管文件按预期写入,但脚本仅在下次启动程序时才会进行某种“更新”。(我没有单独尝试过,但它在 IDE 中更新......这是 Netbeans)。

现在我不仅需要解决这个问题,而且还想解释正在做什么。请给我一个解释,说明什么是错的,为什么是错的以及需要做些什么来解决它。

问候,
拉克什