【问题标题】:generation of java bytecode using JCodeModel使用 JCodeModel 生成 java 字节码
【发布时间】:2015-09-01 06:48:47
【问题描述】:

我创建了 JCodeModel,其中包含我想要生成的所有类。 问题是我想生成字节码(.class 文件)和一个 jar,但不是源代码。 有没有一种优雅的方法可以在不生成 .java 文件并稍后将其编译成 .class 文件和 jar 的情况下做到这一点?

【问题讨论】:

  • JCodeModel是一个Java源码生成库,不编译生成的源码如何生成字节码?
  • @JohnEricksen 如果我知道我不会问它。通过询问它如何优雅地生成字节码,我正在谈论编译过程。关键是我想以简明扼要、最简单和优雅的方式获得一个工件(jar),从我的角度来看,我会创建大量的源代码文件,稍后我将编译到一个 jar 中(最后删除源代码) 是我想避免/跳过的额外步骤。
  • 您想要通过注释处理器生成的字节码吗?
  • @JohnEricksen 我不确定我是否理解这个问题。我目前正在使用 JCodeModel 从头开始​​生成 java 文件,而不是获取生成的源并将它们编译成类文件。我想要实现的是在不首先创建 java 文件的情况下获取类文件。 “通过注释处理器生成的字节码”是什么意思?注释如何与此相关?
  • 注解处理是使用 JCodeModel 生成源代码的常见用例(我猜答案是否定的)。你想在运行时或开发期间生成类文件吗?

标签: java code-generation jcodemodel


【解决方案1】:

您可以考虑使用几个 java 字节码生成器之一:Any Java Bytecode Generation Guide?

但是,如果您更喜欢处理 JCodeModel lib,您可以选择将中间 Java 代码作为临时阶段保存在内存中。以下是一系列提示:

(1) 下面是一个如何在内存中获取java源文本的例子:Compile dynamically generated class at runtime w/o writing to File

(2) 然后你可以使用类似的东西将编译后的字节码再次保存在内存中:https://github.com/trung/InMemoryJavaCompiler/blob/master/src/main/java/org/mdkt/compiler/InMemoryJavaCompiler.java

(3) 最后,从内存中存储的字节码创建 jar 文件,只需执行类似于:How to use JarOutputStream to create a JAR file?

PS:最后阶段可以通过流直接写入数据库(BLOB 字段左右)来完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多