java-compiler-api相关内容

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

我正在使用 javax.tools 包 (JDK 1.7) 中的 JavaCompiler 来即时编译一些东西,如下所示: compiler.run(null, null, "-cp", 路径, "path/to/my/file.java"); 它可以工作,但我想在内存中完成所有操作(例如,传递带有代码的字符串,而不是源文件,并取回字节码而不是 .class 文件).我发现扩展 InputSt ..
发布时间:2021-11-25 17:19:15 Java开发

JavaCompiler 无法正确编译文件

我正在尝试习惯 JavaCompiler 并尝试使用它编译程序,我可以成功编译包含单个文件的程序,但是当我尝试编译包含多个文件的项目时.我在编译实现其他类的文件以及该类使用已实现类中的方法时出错. 这是我用来编译java代码的代码 private final String directoryForBin = "C:/TempBINfolder/bin";公共列表 doCompilation ..
发布时间:2021-11-22 16:37:38 Java开发

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

我的用例是使用 JDK 6 中提供的 ToolProvider 和 JavaCompiler 类从 Java 程序编译生成的源文件.源文件包含对上下文类加载器(它在 J2EE 容器中运行)中的类的引用,但不在系统类加载器.我的理解是默认情况下 ToolProvider 将使用系统类加载器创建 JavaCompiler 实例. 有没有办法指定 JavaCompiler 使用的类加载器? ..
发布时间:2021-11-22 16:08:24 Java开发

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

我正在使用 javax.tools 包 (JDK 1.7) 中的 JavaCompiler 来即时编译一些东西,如下所示: compiler.run(null, null, "-cp", 路径, "path/to/my/file.java"); 它可以工作,但我想在内存中完成所有操作(例如,传递带有代码的字符串,而不是源文件,并取回字节码而不是 .class 文件).我发现扩展 InputSt ..
发布时间:2021-11-22 16:00:00 Java开发

android studio 与 Java 编译器错误:字符串太大而无法使用 UTF-8 编码,而不是编写为“STRING_TOO_LARGE"

当我在 android studio 中清理 android 项目时,错误发生了,我已经回到以前的提交或不同的分支,这几天前找到了,但现在有这个错误.我已经检查了这个问题,并且没有为我的项目添加大图像或字符串.Kothlin 中的 STRING_TOO_LARGE 字符串 解决方案 暂时可以降级 Gradle 版本来解决这个问题.使用 gradle 3.1 版本,如以下 3.1.3. ..
发布时间:2021-11-21 18:18:26 Java开发

我可以从编译时注释向类添加方法吗?

如果我创建一个自定义注释(例如:@SaveFuncName("saveMe") 将添加一个名为 saveMe() 的方法以及我的处理器生成的一些代码),可以javac 编译器使用我的注释处理器向类添加方法?或者我只能创建一个不同的类? 解决方案 或者我只能创建一个不同的类? 没错.现有的 API 不允许我们修改现有的类,只能生成新的类. 从技术上讲,如果你想做一些hacky ..
发布时间:2021-11-10 22:14:45 Java开发

在运行时编译 java 类,依赖于嵌套的 jar

在 spring-boot 应用程序中,我在运行时执行以下操作: 生成java类 编译 使用反射访问已编译类的一些静态字段. 我的代码基于 这篇文章 并且在运行时编译我生成的类时遇到问题.在 IDE 编译中运行时可以正常工作,但是当从 spring-boot jar 编译运行时失败,说缺少符号或某些包不存在.我正在编译的类依赖于位于 \BOOT-INF\lib\ 下的 jar 中的 ..

将JavaCompiler与Classpath引用耳朵内的jar

我正在一个项目中,部署在JBoss服务器上的企业归档文件(ear)需要动态编译(并运行)一个类.我正在使用JavaCompiler类来执行此操作-复杂性来自以下事实:正在编译的类引用了耳内ejb jar中包含的某些类. 当部署的耳朵在部署时“爆炸"时,这不是问题,因此它只是目录而不是存档-在这种情况下,我可以在编译器的-classpath选项中指定所需的jar,和编译工作正常.不幸的是,由于 ..
发布时间:2020-06-26 20:29:44 其他开发

有没有一种工具可以用来比较二进制/字节代码级别的两个Jars?

这个想法是比较两个jar,看看它们是否是从相同的源生成的,并在二进制/字节代码级别比较它们是否相同.同样,如果它们都使用相同的编译器(即Eclipse JDT或JIT等编译器)进行编译. 我看过Apache Common BCEL,但是它仅在将原始字节码分解为源代码之后才进行比较,然后像diff工具一样进行比较.逐行比较文本,但是我想要的是比较字节码,而不将其分解/重新排列为源代码,然后进行 ..
发布时间:2020-06-26 20:29:40 Java开发

JavaCompiler无法正确编译文件

我试图适应JavaCompiler并尝试使用它来编译程序,我可以成功地编译包含单个文件的程序,但是当我尝试编译具有多个文件的项目时.在编译实现其他类的文件以及该类使用已实现的类中的方法的任何地方时,都会出现错误. 这是我用来编译Java代码的代码 private final String directoryForBin = "C:/TempBINfolder/bin"; publi ..
发布时间:2020-06-26 20:29:35 Java开发

javax.tools是否依赖JDK?

我想使用JavaCompiler动态创建一些类. 我找到了javax.tools包的源代码,但是没有实现;互联网上的一些帖子说这取决于tools.jar,我不确定tools.jar是否与JRE相关. 那么,我可以在未安装JDK的JRE环境中运行该程序吗? 另一个问题,JavaCompiler的实现细节是什么,是否正在创建一个新的过程来调用javac命令? 谢谢 解决方 ..
发布时间:2020-06-26 20:29:33 Java开发

如何在内存中编译和运行Java源代码

我想将String视为Java文件,然后编译并运行它.换句话说,使用Java作为脚本语言. 为了获得更好的性能,我们应该避免将.class文件写入磁盘. 解决方案 此答案来自我的一个博客这是三个源代码文件. MemoryJavaCompiler.java package me.soulmachine.compiler; import java.io.IOExceptio ..
发布时间:2020-06-26 20:29:30 其他开发

动态重新编译并重新加载类

我正在用Java构建一个可以接收Java源文件的服务器,它应该使用JavaCompiler动态地对其进行编译,然后加载该类.但是,问题在于,如果服务器接收到具有相同名称但内容不同的文件,它将仍然加载先前的类并提供相同的输出.我已经注意到一些答案,建议为要尝试加载的类创建一个超类并使用其他classLoader,但是如果将Java源文件动态发送到服务器,情况仍然如此吗? 这是我在FileSer ..
发布时间:2020-06-13 18:35:18 Java开发

使用Java编译器API编译多个Java文件

嗨,我需要创建,编译和加载Java类运行时.我正在使用FTL创建Java源文件,并且如果没有动态依赖项,则能够编译源代码. 要详细说明一个实例,我有两个java源文件,一个接口及其实现类.我可以使用java编译器api来编译接口, String classpath=System.getProperty("java.class.path"); String testpat ..
发布时间:2020-06-13 18:34:35 其他开发