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

java - 如何将 JDK6 ToolProvider 和 JavaCompiler 与上下文类加载器一起使用?

我的用例是使用 JDK 6 中提供的 ToolProvider 和 JavaCompiler 类从 java 程序编译生成的源文件。源文件包含对上下文类加载器中类的引用(它在 J2EE 容器中运行),但不在系统类加载器中。我的理解是,默认情况下 ToolProvider 将使用系统类加载器创建 JavaCompiler 实例。

有没有办法指定一个类加载器供 JavaCompiler 使用?

我尝试了这种方法,根据 IBM DeveloperWorks 上的某些内容进行了修改:

FileManagerImpl 定义为:

堆栈跟踪表明它在注释处理期间仅被调用一次。我验证了要编译的源文件中引用的类不在系统类路径上,但可以从上下文类加载器中获得。

0 投票
2 回答
19223 浏览

java - 使用 javax.tools.JavaCompiler 编译源时如何设置类路径?

我使用类javax.tools.JavaCompiler(jdk6)编译源文件,但源文件依赖于一些jar文件。如何设置类路径javax.tools.JavaCompiler

0 投票
1 回答
626 浏览

java - 使用 JSR 199 Compiler API 在目录树中编译一组 Java 文件

我正在尝试使用 Compiler API 编译许多文件。

假设我有一个目录结构

有什么方法可以发现所有 Java 文件并使其编译所有内容,而无需递归到所有目录并查找所有 *.java 文件?

编辑:我想做的是编译我在某个目录树中得到的所有类。这些类是相互独立的。然后我加载类并实例化这些类的一些对象并调用方法。没有一个类需要有主。

0 投票
1 回答
2405 浏览

java - javax.tools 是否依赖于 JDK?

我想用来JavaCompiler动态创建一些类。

找到了包的源码javax.tools,但是没有实现;互联网上的一些帖子说这取决于tools.jar,我不确定是否tools.jar与 JRE 有联系。

那么,我可以在没有安装 JDK 的 JRE 环境中运行程序吗?

另一个问题,它的实现细节JavaCompiler是什么,它是创建一个新进程来调用javac命令吗?

谢谢

0 投票
2 回答
1890 浏览

java - 如何运行JavaCompiler编译的代码?

有没有办法运行JavaCompiler编译的程序?[javax.tools.JavaCompiler]

我的代码:

现在我想以 1 秒的生命周期运行该程序并将输出输出到字符串变量。有什么办法可以做到吗?

0 投票
4 回答
3011 浏览

java - 使用 JavaCompiler 和 ClassLoader 编译和运行用户代码

我正在编写用于 Java 学习的网络应用程序。使用哪些用户可以在我的服务器上编译他们的代码 + 运行该代码。使用 JavaCompiler 很容易编译:

我设法用代码加载类:

我怎样才能保护我的应用程序免受无限循环和邪恶的学生;)

  1. 有没有办法终身运行该代码?
  2. 内存泄漏是否有任何风险,我能做些什么来解决这个问题。
  3. 这是一个很好的解决方案,还是你能提出更好的建议?

谢谢。齐姆

0 投票
2 回答
2185 浏览

java - 以编程方式编译存储在任意子文件夹中的包中的 Java 类

我正在寻找用 Java 编译一个应用程序,它由一定数量的包中的不同数量的 java 类组成。在命令行中,我可以切换到包含根包的文件夹并键入:

或者

编译我的根包的所有主要子包中的所有 java 类。

但是,我希望能够在 Java 应用程序中执行此操作。(我们的想法是,我们向学生提供一个包含单元测试的应用程序。单元测试需要针对他们的代码运行,然后应用程序创建一个 JAR 文件,其中包含他们的源文件,这些文件已被测试结果“加水印”。所有这工作正常,但我们想确保测试的类文件是从提交的源文件创建的,因此以编程方式编译 java 源的想法)。

问题在于每个学生都将他们的根包存储在任意位置,我似乎无法将文件的位置传递给 JavaCompiler (javax.tools)。

是否有可能,如果是这样,有人可以就如何正确编译任意放置的根包提供一些提示。

干杯

理查德

更多信息:

学生有一个文件夹结构:

其中包含根包。他们启动应用程序(可能存储在此文件夹中 - 因此没有问题 - 但很可能存储在其他地方),要求他们提供包含根包的文件夹。进入后,学生点击创建 JAR 按钮,编译包中的文件,对新编译的文件运行测试,然后创建 JAR。

在思考这个问题的同时,解决方案可能是告诉学生将我们的“create JAR”应用程序安装在包含他们的根包的文件夹中。

0 投票
6 回答
14112 浏览

java - 使用 Java 编译器 API 时出现空指针异常

MyClass.java:

编译 MyClass.java 文件的 SimpleCompileTest.java 的清单。

简单编译测试.java:

我正在执行 SimpleCompileTest 类并获得 NullPointerException。ToolProvider.getSystemJavaCompiler() 返回 null。有人可以告诉我代码有什么问题吗

0 投票
1 回答
780 浏览

java - 使用 Javassist 编译的类的类路径

正如标题所暗示的,用 Javassist 编译的类的类路径是什么?

我的场景是:A 类是用 Javassist 编译的。B类使用Java Compiler API编译并引用A类。问题是A类对B类不可见......

有任何想法吗?

0 投票
1 回答
109 浏览

java - Java默认编译目录

我正在使用 Java Compiler API 在运行时构建几个类。但是,我希望将这些类编译到默认编译目录中,生成其他类文件。

有一个简单的方法吗?如果我检查类路径,我可以看到第一个 URI 实际上是我想要的目录,但它总是第一个吗?