编译动态生成的Java类

时间:2019-07-16 11:44:59

标签: java json

我们有一个要求,我们必须使用json模式动态生成Java pojo类。 到目前为止,我们已经能够即时生成类(jsonschema2pojo库),但是无法编译该类以进行进一步处理。 对于编译,classloader应该获取该类,但是随着java类的动态生成,class loader无法获取它并抛出InvocationTargetException。 有什么办法可以像使用某些Maven插件一样以其他方式再次编译Java包?

谢谢

Vaishali Mangwani

1 个答案:

答案 0 :(得分:0)

如果您正在使用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之类的工具,但这会涉及更多问题,并且从外观上看,这对您而言没有意义。