pas*_*oop 12 python java xml oop jaxb
我们试图避免在一起使用Java和Python的项目中重复代码.大多数代码库都是用Java编写的,由于机器学习环境的普及,现在正在添加Python.
在绿地场景中,我们从某事开始.像swagger或protobuf,从生成的代码中派生出模型.但这现在不起作用.
J类带有一些注释注释,它们的目标是Java 8.
在研究时,我发现了以下可能的路径将类的结构(没有方法)转换为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>
Run Code Online (Sandbox Code Playgroud)
以及默认的插件配置
<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>
Run Code Online (Sandbox Code Playgroud)
但是我收到了一个错误
[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.
Run Code Online (Sandbox Code Playgroud)
然后,我将JSON Schemas作为中介进行了研究,但这并没有真正削减它,因为从JSON模式创建Python类源代码并不容易.
那么有没有办法从Java代码生成简单的"Pojo"Python类?没有方法,没有复杂的交叉编译,只有简单的结构转换.我可以从IntelliJ中的Java文件生成UML图,所以所有信息都在那里,我只需要一个有助于转换的工具
那么有没有办法从Java代码生成简单的"Pojo"Python类?
我有一个去,下面是解决方案:
考虑以下简单化 Pojo.java
public class Pojo {
private String string = "default";
public int integer = 1;
public String getString(){
return string;
}
}
Run Code Online (Sandbox Code Playgroud)
解决方案需要3个阶段
我可以找到以下选项:
使用以下相关代码和选项1(也通过网站):
ObjectMapper MAPPER = new ObjectMapper();
JsonSchemaGenerator generator = new JsonSchemaGenerator(MAPPER);
JsonSchema jsonSchema = generator.generateSchema(Pojo.class);
System.out.println(MAPPER.writeValueAsString(jsonSchema));
Run Code Online (Sandbox Code Playgroud)
下面输出json模式字符串:
{"type":"object","id":"urn:jsonschema:Pojo","properties":{"string":{"type":"string"},"integer":{"type":"integer"}}}
Run Code Online (Sandbox Code Playgroud)
这个阶段是必需的,主要是因为我发现对于简单的用例(至少),3下面的步骤需要一个definitions强制性属性的json模式.我想这是因为不断发展的模式定义@ http://json-schema.org/.此外,我们可以包含一个title属性来指定下一步将生成的python类的名称.
我们可以在1上面的步骤的java程序中轻松完成这些作为后续步骤.我们需要一个以下形式的json模式字符串:
{"definitions": {}, "title": "Pojo", "type":"object","id":"urn:jsonschema:Pojo","properties":{"string":{"type":"string"},"integer":{"type":"integer"}}}
Run Code Online (Sandbox Code Playgroud)
请注意,只有添加 "definitions": {}, "title": "Pojo"
frx08/jsonschema2popo似乎很好地完成了这项工作.
pip install jsonschema2popo
jsonschema2popo -o /path/to/output_file.py /path/to/json_schema.json
Run Code Online (Sandbox Code Playgroud)
小智 1
TechWalla @ https://www.techwalla.com/articles/how-to-convert-java-to-python 有详细的说明。看看是否对你有帮助。
将说明粘贴到此处 步骤 1 下载并解压 java2python。您下载的文件是一个 gzip 文件,其中包含一个 tarball 文件;两者都是压缩方案,并且都可以使用开源程序 7zip 解压缩。
步骤 2 将 java2python 文件夹的内容放在 C:\ 驱动器的根目录中。
步骤 3 打开命令提示符并导航到“C:\java2python\”,然后输入不带引号的“python setup.py install”。这将告诉 Python 解释器运行安装脚本并准备您的计算机。将目录更改为“C:\java2python\bin\”并保持窗口打开。
步骤 4 将要转换的 Java 文件复制到 java2python 下的 bin 子文件夹中。在命令行中,运行“j2py -i input_file.java -o output_file.py”,将 input_file 和 output_file 替换为您的文件名。
步骤5 打开新建的Python文件夹,阅读代码。它可能并不完美,因此您需要仔细检查它以确保它从 Python 的角度来看是有意义的。然而,即使花时间手动检查,您也可以从手动转换中节省大量时间