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

java - Annotation Processor - How to get the Class it is processing

I am trying to write a custom Anntoation processor. The annotation processor will process each class file at compile time to check annotations, But how am i able to get the class that it is currently processing? I am only able to get the class name in the following codes.

0 投票
1 回答
1902 浏览

java - 从字符串编译 Java 代码会导致 ClassNotFoundException

我正在尝试使用 javax.tools 编译字符串中的代码的代码示例。Class.forName 导致 ClassNotFoundException。有人知道为什么吗?我正在使用 Java 7。

0 投票
1 回答
218 浏览

java - 使用 Compiler API 编译 Java 项目

我正在尝试使用 Compiler API 动态编译整个 java 项目。我最初的想法是首先知道如何使用命令行在一行中编译它,然后在编译器对象上应用相同的原理/参数。问题是,我从来没有,错误,使用 CLI 编译。(使用IDE的坏处?哈哈)

那么,我在正确的轨道上吗?再者,项目编译能不能做到一行执行?我很难弄清楚这一点,因为它是一个项目,它包含大量的包。

0 投票
1 回答
134 浏览

java - 是否可以使用 JRE 作为标准 VM 来实例化 Java 编译器?

我正在尝试使用反射动态编译和加载java类。如果我使用 JDK 作为标准 VM,我的代码可以正常工作,没有任何异常。ToolProvider.getSystemJavaCompiler()但是当我将 JRE 用作标准 VM 时,相同的代码会引发空指针异常。

我的类路径中不能有 JDK。那么,我们是否可以选择使用 JRE 作为标准 VM 来编译 java 代码?谁能帮我解决这个问题?提前致谢。

0 投票
1 回答
734 浏览

annotation-processing - 编译器 API + 注释处理 == 双诊断消息?

我将 Java Compiler API (JSR199) 与自定义注释处理器 (JSR269) 结合起来。提供给编译器的 Java 源代码中的一些语法错误会导致诊断消息出现两次。许多语法错误仍然只会导致一条诊断消息。例如,不匹配的大括号只会产生一条消息,但带有无效限定标识符的导入会产生两条诊断消息,但仅在使用注释处理器时。

以下是一些会导致问题的示例输入:

对于注释处理器,我有以下内容。(我尝试过从进程返回 false 并且我也尝试过手动实现处理器而不是扩展 AbstractProcessor。)

下面是一些用于调用编译器和添加注释处理器的代码。

我的输出看起来像:

如果我取出processors.add(ap);线路,那么重复的错误消息就会消失。添加多个处理器没有额外的影响。

知道为什么注释处理器在使用编译器 API 时会导致重复的诊断消息吗?(并且仅针对某些语法错误)

0 投票
2 回答
46 浏览

java - 词法分析只给出一个输出?

我测试了这个例子(lex.java,但它只给了我一个输出。

我作为读者给出了这篇文章:

nextToken ()函数是:

isdie主要方法:

System.out.println(lexeObject.nextToken());

输出是:

标识

为什么?但文本文件包含多个关键字?有谁知道是什么问题?

0 投票
1 回答
308 浏览

java - 编译器未调用自定义 JavaFileManager 的 getJavaFileForOutput(...) 方法

我有一个看起来像这样的自定义 JavaFileManager:

为了便于阅读,我编辑了很多代码;该类还实现了 list(...) 方法和 inferBinaryName(...) 方法。

在我项目的另一个领域,我运行类似于以下内容的内容:

如果我在 windows/mac/linux 上的 eclipse 中运行一些 junit 测试,它的工作原理完全符合我的预期。如果我在 windows 上的 glassfish 中运行我的项目,它也完全符合我的预期。如果我在 Mac OS X Mavericks 或 Centos 6.4 上的 glassfish 中运行相同的项目,getJavaFileForOutput(...) 根本就不会被调用!我的文件管理器的 getClassLoader(...) 方法最终被调用,但到那时为时已晚。

阻止调用我的 getJavaFileForOuput 方法的 linux+glassfish 环境有什么独特之处?

我很确定我已正确设置所有环境以使用相同的 jdk 版本:jdk1.7.0_45。

有什么建议吗??

0 投票
1 回答
5946 浏览

java - 使用 javac 和 javax.tools.JavaCompiler 有什么区别?

Maven 编译器插件文档状态

Compiler Plugin 用于编译项目的源代码。从 3.0 开始,默认编译器是 javax.tools.JavaCompiler(如果您使用的是 java 1.6),用于编译 Java 源代码。如果要强制使用 javac 插件,则必须配置插件选项forceJavacCompilerUse

事实上,当forceJavacCompilerUse我们的构建中没有指定时,会有一些构建错误,例如当代码引用com.sun.包时(遗留,我们知道这是一个坏主意......)

这两种编译模式一般与 Maven 之间有什么其他区别?是否有任何应该知道的输出差异?

0 投票
2 回答
10439 浏览

java - 有没有我们可以用来在二进制/字节代码级别比较两个罐子的工具?

这个想法是比较两个罐子,看看它们是否是从相同的源生成的,并比较它们在二进制/字节代码级别是否相同。此外,如果它们都使用相同的编译器编译,即 Eclipse JDT 或 JIT 等编译器。

我看过 Apache Common BCEL,但它只是在将原始字节码分解为源代码后进行比较,然后像 diff 工具一样进行比较;逐行比较文本,但我想要的是比较字节码而不被分解/重新排列为源代码,然后进行比较。

我正在研究如何比较直接的二进制/字节码比较!!!

免费工具/API 推荐会很好:) Ta

0 投票
2 回答
123 浏览

java - 如何用 Java 替换 XML?

我不了解使用 XML 存储设置、页面或 GUI 布局甚至 bean 集的全球时尚。

如果我们考虑到 XML 不是单一语言,而是定义多种语言的模板这一事实,那么大规模的疯狂就变得显而易见了。

为什么要使用数十种语言而不是使用一种?

例如,Java。

它可以定义或声明任何类型的 GUI 层次结构、设置表等。

那么我们为什么不使用java文件来存储所有的东西呢?

例如,可以提供如下 java 格式的设置文件:

该文件可以通过运行时编译器即时编译,并通过反射提取字段。

那么,我们为什么不这样做呢?

唯一想到的原因是安全性。

外部文件不仅可以包含属性,还可以包含一些构造函数代码,这可能会破坏应用程序或使其崩溃。

所以。这种情况有什么保护措施吗?我们可以限制运行时编译文件的可能功能吗?

更新

我的意思不是Java。Java 只是一个示例。我需要使用单一语言的方法。

更新 2

我声称,在整个项目方面使用一种单一语言会更好。

假设在 MVC 模式中,我们将为模型、视图和控制器使用三种不同的语言!这将是无稽之谈!我们使用单一语言。我的意思是我们人们使用不同的语言,但每个程序员都使用一种语言,但仍然分隔 MVC。这就是配置文件的含义:再分离一个概念。仅仅因为概念是分开的,使用不同的语言没有任何意义。

这也适用于 HTML / JavaScript / CSS。拥有三种语言是没有意义的。没有任何该死的感觉!

我当然理解历史原因等。但这些都是没有意义的,这些只是讨厌的原因。

那么,为什么我们会看到具有相同性质的新项目和新项目呢?

为什么 MS 为 WPF 创建 XAML?他们创造了新的新鲜的 C# 语言,为什么不把 XAML 也放进去呢?

Oracle 为什么要为 JavaFX 创建 FXML?感谢上帝,他们放弃了 JavaFX 脚本!因为他们只想为 RIA 提供三种语言!