【问题标题】:Compiling a dynamically generated java class编译动态生成的java类
【发布时间】:2020-03-30 07:33:42
【问题描述】:

我们有一个要求,我们必须使用 json 模式动态生成一个 java pojo 类。 到目前为止,我们能够动态生成类(jsonschema2pojo 库),但无法编译类以进行进一步处理。 对于编译类加载器应该获取类,但由于 java 类是动态生成的,类加载器没有获取它并抛出 InvocationTargetException。 有没有什么方法可以再次编译java包,比如使用一些maven插件或其他方式?

谢谢,

Vaishali Mangwani

【问题讨论】:

  • 什么时候生成类?它是您构建的一部分,还是您在运行时在应用程序中生成源代码?
  • .java 在运行时在一个文件夹中创建。现在需要编译并加载它。这样应用程序可以在运行时使用它。
  • 我认为您应该提供一些示例代码,让我们对正在发生的事情有所了解。我不知道你是如何编译生成的源代码的?你是如何为你的应用程序设置类路径的?等等

标签: java json


【解决方案1】:

如果您使用的是 Maven,那么您可以配置插件。 https://joelittlejohn.github.io/jsonschema2pojo/site/1.0.1/generate-mojo.html.

这将构建您的 POJO。

例如在“pom.xml”中我们使用:

<plugins>
    <plugin>
        <groupId>org.jsonschema2pojo</groupId>
        <artifactId>jsonschema2pojo-maven-plugin</artifactId>
        <version>1.0.0-alpha4</version>
        <configuration>
            <sourceDirectory>${basedir}/schemas</sourceDirectory>
            <outputDirectory>${basedir}/src/main/java</outputDirectory>
            <targetPackage>com.package</targetPackage>
            <useCommonsLang3>true</useCommonsLang3>
            <includeAdditionalProperties>false</includeAdditionalProperties>
            <includeConstructors>true</includeConstructors>
            <useLongIntegers>true</useLongIntegers>
            <inclusionLevel>ALWAYS</inclusionLevel>
            <generateBuilders>true</generateBuilders>
            <includes>
                <include>**/*.json</include>
            </includes>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>generate</goal>
                </goals>
            </execution>
        </executions>
        ...
    </plugin>
</plugins>

在我们的例子中,我们将 POJO 作为单独的包/库,因此它可以在项目之间共享。

如果您需要运行时编译,那么 https://github.com/OpenHFT/Java-Runtime-Compiler 之类的工具可能会有所帮助,但这涉及更多,而且从外观上看,它对您的情况没有意义。

【讨论】:

  • 我正在使用 jsonschema2pojo 并将 .java 类保存在源外部的文件夹中。现在面临创建相同的 .class 文件并将其加载运行时的问题。所以简而言之流程是.. .java -> .class -> 加载 .class 以供运行时使用.. 但在第二步中仍然面临问题..
猜你喜欢
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 2015-05-27
相关资源
最近更新 更多