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

java - 带有自定义 ClassLoader 和 FileManager 的 JavaCompiler

我希望在机器上不存在依赖项的情况下编译源代码。
示例:文件 A.java:

我没有 B 源,我希望挂钩 JavaFileManager 或自定义 ClassLoader 以获取有问题的符号(包 'some.package' 和 B 类),然后使用我拥有的服务来检索源细绳。

编译代码:(inputFiles有A.java)

JavaFileManager (getFileForInput..) 和我的类加载器 (findClass, loadClass ..) 上的钩子在编译时没有触发,我收到错误消息:

编辑

在使用 API、查看 JavaCompiler(旧版本)源代码并阅读编译概述之后,我仍然找不到可以用来从语法树中提供符号的 API 挂钩。似乎 API 需要根据 kschneid 建议的包名称获取所有资源。
我想到的一种解决方法是运行 JavaCompiler 并分析缺少符号的错误消息。这样我就会知道需要哪些符号,获取它们并重新编译。
还有其他解决方法/解决方案吗?

0 投票
3 回答
361 浏览

java - 无法使用 JavaCompiler 编译其他类中引用的默认包类

我有一种情况,我需要动态编译类。

以下是我的 java 类的组织结构。

其中 A 是具有默认包的类,B 是具有包名 test 的类。B 具有 A 作为属性。

文件保存在各自的文件夹中(根据包)

我无法使用 JAVA Compiler API 编译它。

0 投票
1 回答
492 浏览

java - 使用 javax.tools.JavaCompiler 等

我正在寻找Oracle 的 Java 编译器 API使用的工作示例。我想构建一些接近javac自定义/扩展错误日志记录功能的东西。

0 投票
1 回答
1069 浏览

java - 如何使用 JavaCompiler API 一次性编译多个 Java 类

我是 Java 新手,我正在关注本教程,因为它提供的信息非常丰富,并且非常详细地解释了所有内容。在教程的底部,它解释了如何使用 JavaFileManager 编译多个 java 文件并给出了一些例子,但我仍然无法自己编译多个文件

另一个问题是,在示例中,它只显示了如何编译一个 java 文件(我已经可以开始工作了),但我遇到了多个文件,因为我希望能够编译由我自己系统中的多个java类

这就是我现在所要做的:

0 投票
1 回答
1211 浏览

java - 使用 JavaCompiler 编译目录

我有以下哪些代码用于使用 JavaCompiler 编译单个文件:

我的问题是:如何更改它以编译特定目录中的所有源文件?

0 投票
3 回答
4323 浏览

java - Java 编译器 run() 方法

我在网上找到了有关 JavaCompiler 的代码

它说compiler.run(null, null, null这三个空值分别是默认System.inSystem.outSystem.err。但是这些值实际上是做什么的,因为我找不到这些值的 API?有人可以解释一下吗?

0 投票
2 回答
302 浏览

java - 从另一个 java 程序运行 java 程序

我正在尝试从另一个 Java 应用程序运行 Java 程序。这是我的代码:

javac工作正常并在 bin 目录中创建test.class文件。但是java -classpath C:/Users/Dinara/Desktop/D/bin test不运行该test.class文件。的内容test.java

我认为识别 Java 命令有问题。你能给我一个解决这个问题的示例代码或分享想法吗?我正在使用 Netbeans 运行 Main 类,应用程序文件夹的位置是 C:\Users\Dinara\Main

0 投票
7 回答
37985 浏览

java - 使用 javax.tools.JavaCompiler 在内存中完全编译代码

我正在使用 javax.tools 包(JDK 1.7)中的 JavaCompiler 即时编译一些东西,如下所示:

它可以工作,但我想在内存中完成所有操作(例如,使用代码传递一个字符串,而不是源文件,并获取字节码而不是 .class 文件)。我发现扩展InputStreamandOutputStream参数没有用,因为它可能与控制台中的相同。你知道一种让 run 方法像这样工作的方法吗?或者您知道使用该方法执行此操作的确认getTask()方法吗?(扩展 FileManager 看起来很容易,但不是那么容易 :)

0 投票
1 回答
1993 浏览

java - JavaCompiler 无法正确编译文件

我正在尝试习惯 JavaCompiler 并尝试使用它编译程序,我可以成功编译包含单个文件的程序,但是当我尝试编译具有多个文件的项目时。我在编译实现其他类的文件以及该类在何处使用已实现类中的方法时遇到错误。

这是我用来编译java代码的代码

这是我正在尝试编译的类之一的示例

有谁知道这里出了什么问题以及为什么我的代码没有找到实现的类,即使它与实现它的类在同一个文件夹中?

是不是因为包不在程序的顶部?

编辑:这是上述示例的输出错误

这就是System.getProperty("java.class.path")返回的内容

0 投票
2 回答
549 浏览

java - 注释绑定时间(Java 中何时绑定注释)

我正在编写代码,其中数据库我的表名必须根据我是在我的开发环境还是生产环境中进行更改。由于我使用的是 Dynomo DB 的高级 API,因此表名被定义为注释。因此,例如以下代码是否可行,以及控制其行为的规则是什么:

这导致的一系列问题是:

  1. Java Bound 中的注解是什么时候绑定的?编译时间还是运行时间?
  2. 可以在执行中途更改绑定吗?

谢谢。