【发布时间】:2018-09-12 19:33:04
【问题描述】:
我们正在努力避免在同时使用 Java 和 Python 的项目中出现重复代码。大部分代码库都使用 Java,由于机器学习环境中的流行,现在添加了 Python。
在未开发的场景中,我们会从某事开始。像 swagger 或 protobuf 并从生成的代码中派生模型。但这现在行不通。
J 类带有一些注解,它们针对 Java 8。
在研究过程中,我发现以下可能的途径将类的结构(没有方法)转换为 Python 类结构:
- 从 Java 类生成 XML 模式
- 从 xml 架构文件生成 Python 类
额外的好处:这两种语言在我们的项目中实际上是通过 XML 进行通信的,因此模式文件对其他用例很有帮助。我们使用 maven 构建 Java,因此最好将其包含在 maven 进程中。
我在 pom.xml 中包含了这个:
<!-- https://mvnrepository.com/artifact/org.codehaus.mojo/jaxb2-maven-plugin -->
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.3.1</version>
</dependency>
以及默认插件配置
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<executions>
<execution>
<id>schemagen</id>
<goals>
<goal>schemagen</goal>
</goals>
</execution>
</executions>
<!--
Use default configuration, implying that sources are read
from the directory src/main/java below the project basedir.
(i.e. getProject().getCompileSourceRoots() in Maven-speak).
-->
</plugin>
但我得到一个错误
[ERROR] Failed to execute goal org.codehaus.mojo:jaxb2-maven-plugin:2.3.1:schemagen (default-cli) on project common: JAXB errors arose while SchemaGen compiled sources to XML. -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:jaxb2-maven-plugin:2.3.1:schemagen (default-cli) on project common: JAXB errors arose while SchemaGen compiled sources to XML.
然后,我将 JSON Schemas 视为一种中介,但这并没有真正削减它,因为从 JSON 模式创建 Python 类源代码并不容易。
那么有没有办法从 Java 代码生成简单的“Pojo”Python 类?没有方法,没有复杂的交叉编译,只有一个简单的结构转换。我可以从 IntelliJ 中的 Java 文件生成 UML 图,所以所有信息都在那里,我只需要一个帮助转换的工具
【问题讨论】:
-
我使用 python 库 generateDS 从 XSD 生成模型文件并取得了一些成功。这是一个链接:davekuhlman.org/generateDS.html 你可以给它一个 XSD,它会为你生成一个生成的模型。
-
是的,我知道那个库。但是如上所述,从 Java 生成 XSD 文件对我来说并不成功。
-
好吧,我以为你还在走那条路,我的错。如果您不反对继续这样做,那么查看该 JAXB 错误的堆栈跟踪也可能会有所帮助。
-
看看这是否对您使用 JSON 模式方法有帮助? stackoverflow.com/questions/12465588/…
-
@TarunLalwani,不,因为它不生成类源代码。它只在运行时工作。我想要类代码,以便 PyCharm 或 vim 等在开发过程中做 IDE 支持。