问题标签 [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 - 使用 javax.tools.JavaCompiler 时设置 JVM 堆空间
我正在使用 JavaCompiler API 来编译一些 Java 源代码。但是,我收到了 OutOfMemoryError 异常。我尝试使用 -Xmx1G 选项,但它不起作用:
有没有人成功地增加了设置正确选项的堆大小?我也没有成功尝试过:
Xmx1G
-Xmx1G
J-Xmx1G
-J -Xmx1G
-J Xmx1G
java - 为什么 Grails 在 Mac OS x 7 上使用旧的 JVM 编译器?
操作系统 x 10.7
我想在其中一项服务中使用 Java 1.7 NIO,我得到了以下信息:
怎么回事!他妈的!?好的。我在代码中检查java版本:println
最后我明白了
或者更具体地说
变成:
classpath - 将 JavaCompiler 与类路径一起使用,在 ear 中引用 jar
我正在开发一个项目,其中部署在 JBoss 服务器上的企业存档(ear)需要动态编译(和运行)一个类。我正在使用 JavaCompiler 类来执行此操作 - 复杂性来自这样一个事实,即正在编译的类引用了包含在耳朵内的 ejb jar 中的一些类。
当部署的耳朵在部署时“爆炸”时,这不是问题,因此它只是一个目录而不是存档 - 在这种情况下,我可以在编译器的 -classpath 选项中指定所需的 jar,并且编译工作美好的。不幸的是,由于我正在使用的系统的限制,将这些耳朵“爆炸”部署不是一个可接受的解决方案,并且编译器似乎无法“看到”所需的 jar,当它被打包在档案中时。
鉴于动态编译是从有问题的耳朵进行的,因此系统的类加载器可以访问所需 jar 的内容,有什么办法可以告诉编译器只使用系统类加载的类装载机?
我很欣赏这是一个冗长的问题,但任何帮助将不胜感激。
谢谢
eclipse - 在 Eclipse 中使用 Tomcat 中的 JavaCompiler 使用 webapp 类路径和 Maven
我有一个现有的“示例 Webapp”,它使用 Maven 引用“示例库”。我在 Eclipse 4.3RC3 中使用 m2e 插件运行 Tomcat 7。当我在 Eclipse 内的 Tomcat 上启动 Example Webapp 时,我已经验证它example-library.jar
可能已部署在 Tomcat 实例的WEB-INF/lib
文件夹中。
示例 Webapp 具有使用JavaCompiler.CompilationTask
. 这些动态生成的类引用example-library.jar
. 不幸的是,编译任务失败,因为找不到引用的类。
我知道我可以设置JavaCompiler
classpath,但System.getProperty("java.class.path")
只返回 Tomcat 类路径,而不是 webapp 类路径:
其他人说我需要WEB-INF/lib
从 servlet 上下文中获取真正的路径,但是类生成代码对 servlet 上下文一无所知 --- 它被编写为不知道它是在客户端还是在客户端上使用服务器。
在另一个问题中,一个答案表明我可以枚举类加载器 URL,果然这为我提供了 jars WEB-INF/lib
,但是当我将其作为-classpath
选项提供时compiler.getTask()
,任务仍然失败,因为它找不到引用的类。
如何简单地将当前执行代码的类路径提供给JavaCompiler
实例,以便它从库中找到类WEB-INF/lib
?(提出了一个类似的问题,但从未回答有关使用 .ear 文件中引用 jar 的问题JavaCompiler
。)
示例:为了不惜一切代价让事情正常进行,我什至尝试对类路径进行硬编码。例如,我foobar.lib
在我的 webapp lib 目录中有,所以我使用了以下代码,根据我上面指出的答案修改:
最后success
是false
,我diaognostics
表示package com.example.foo.bar does not exist...
,即使那个包在foobar.jar
.
java - 在 Eclipse Plugin 运行时编译 Java 类
我在这里处于一个非常尴尬的境地。我正在开发一个“Eclipse 插件”,它必须将 .java 文件“编译”成 .class 文件(甚至可能是一个 jar)。
我正在尝试使用Java Compiler API来执行以下操作:
问题是,当我打电话时_sjfm = _javaCompiler.getStandardFileManager(null, null, null);
遇到 NullPointerException 因为,这是不运行 JDK 时的“预期”行为(请参阅此错误报告)
这篇StackOverflow 帖子在某种程度上帮助了我,但是从必须可发布的 Eclipse 插件中编译 Java 文件的正确方法是什么?
- 使用替代的“编译器”,只包含罐子并使用它们?
- 在我的插件中包含 tools.jar(位于 JDK 文件夹中),动态加载它并从中编译?
- 我想不出的任何其他解决方案
你会推荐什么 ?
eclipse - 如何以编程方式使用 JDT 编译器?
我使用 JDT 来编译我的 java 类。BatchCompiler 返回一个字符串,但我需要一组问题/错误及其列和行信息。编译器.编译(单位);将错误打印到它的打印机,compiler.resolve(unit) 完全符合我的要求,但它只能编译一个 java 文件。
我以这种方式创建了一个编译器对象:
并为编译器创建包含文件名和文件内容的 CompilationUnits。
AFAIK,有 2 种编译方法,其中一种是 compile(units) 方法,它返回 void 并向其 PrintWriter 打印错误和问题,因为它不返回列信息,这对我没有用。另一种方法是 resolve(unit) 方法,但它只能与一个 CompilationUnit 一起使用。
有谁知道我如何以编程方式使用 JDT 编译器来编译多个文件?
api - Javac:忽略“应该在名为...的文件中声明”
我正在使用编译器 API (javax.tools.JavaCompiler) 中的工具来动态生成 Java 字节码。我构建源代码并使用 API 编译它,然后通过反射使用它。
只要我只尝试生成的非公共类,那就太好了。如果我这样做,我会得到一个“MyClass 类是公共的,应该在名为 MyClass.java 的文件中声明”,这是完全正常的,它不是从 Java 文件编译的。
我正在寻找绕过此错误的方法,在 Java 选项和 API 中都没有找到。
java - 如何获取编译器编译一个类所需的所有源的列表
为了在运行时创建和加载一个类,我首先从数据库中读取它的内容,创建一个新的SimpleJavaFileObject,最后在运行时通过将它传递给CompilationTask来编译它。关键是这个新文件可能引用其他文件(直接导入或通过 de.package.*“间接”),这些文件也存储在 db 中,不能作为类或源代码文件使用。
像 Test1 一样,我必须提前一步创建和编译 Test2,因为没有JavaFileObjects或类可以提供给编译器。
那么:如何获得编译器编译一个类所需的所有源的列表?
知道 Test1 需要 Test2 就足够了。我首先通过将Processor传递给CompilationTask来尝试它。我检查了树中的所有属性,但没有发现任何有用或完整的东西。如果在包上使用 * 导入了一个类,则无法获得完整的限定名......至少对我来说不是:-/
有任何想法吗?也许有更好的方法来解析javasources?
感谢您的帮助:-)
java - ClassNotFoundException 加载运行时编译的子类
我正在使用 JavaCompiler 在运行时从 Web 应用程序中编译 CustomProcessor.java
编译顺利,我最终得到了一个我试图加载的类文件URLClassLoader
问题是我正在点击我ClassNotFoundException
在Processor
应用程序其他地方使用的一个(因为我知道它在那里)。
我需要做什么才能在运行时com.mycompany.Processor
可见?
谢谢。
java - 用java编译一个Jar
多年来,我一直在使用 IDE (Eclipse) 为我编译我的 jar 文件,这些年来我已经了解了它们是如何工作的,但是我仍然不完全理解 jar 是如何知道主要方法在哪里的,我也是好奇手动编译它有多简单(或不简单)。
我有一个(某种)我正在开发的 IDE,它需要能够编译和运行一个 jar,其中包括来自用户的文件以及一个 jar 或一堆其他类(API),我有在这里看到一些提到 JavaJavaCompiler
类但从未提供演示代码的问题,而且似乎几乎没有人知道如何手动编译,所以我想贡献一下。那么,如何使用 java 代码创建 jar 文件呢?请提供演示代码。