[英]Generate java code in Eclipse?
有谁知道在eclipse中自动生成Java源代码的方法,例如xml或json文件?
我正在考虑做的一个很好的例子是Google Android sdk所做的事情:他们有一个从资源自动生成的R类。
每次在Eclipse中保存资源文件时,R类都会自动重新生成。
更新:示例:在文本(xml或json文件)中,我有以下内容:
<tags>
<tag id="ALPHA">
<description>The first alpha tag.</description>
<value>231232</value>
</tag>
<tag id="BETA">
<description>This is the beta tag.</description>
<value>231232</value>
</tag>
然后在我生成的java类中,说RI会有类似的东西:
R.tags.ids.ALPHA //refers to an enum value for example
R.tags.values.ALPHA //refers to final int with avlue 231232
R.tags.descriptions.ALPHA //refers to the String with description
谢谢!
我这样做的方式是我有一个XSLT文件,它只是将我的xml数据(在我的情况下是一个协议规范)转换为java源代码。 这个XSLT转换可以很容易地在一个ANT任务中完成,该任务可以包含在eclipse的构建链中。
也许这个特定任务有一个插件。
一些有用的链接:
我根据您的评论添加了另一个答案,也因为我不建议您在Google Android Resource SDK之外执行此操作。 Google基本上使用静态类(单例)的层次结构来获取其资源。 您需要使XSLT生成静态成员变量而不是getter和setter。
我基本上接受了我的旧答案,并将其更改为所有成员变量的静态。 你必须非常小心这样做,因为我看到了很多错误,错误地使用了“静态”修饰符。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/" priority="100">
public class <xsl:value-of select="name(node())" /> {
<xsl:apply-templates select="child::node()" />
}
</xsl:template>
<xsl:template match="/*/*">
public static String <xsl:value-of select="name()" />;
public static String get<xsl:value-of select="name()" /> {
return <xsl:value-of select=" name()" />;
}
public void static set<xsl:value-of select="name()" />(String value) {
<xsl:value-of select="name()" /> = value;
}
</xsl:template>
</xsl:stylesheet>
如果您使用此示例处理XML:
<?xml version="1.0" encoding="UTF-8"?>
<Human>
<EyeColor>brown</EyeColor>
<HairColor>brown</HairColor>
</Human>
你会得到类似的结果:public class Human {
public static String EyeColor;
public static String getEyeColor {
return EyeColor;
}
public static void setEyeColor(String value) {
this.EyeColor = value;
}
public static String HairColor;
public static String getHairColor {
return HairColor;
}
public static void setHairColor(String value) {
this.HairColor = value;
}
}
Eclipse Eclipse Modeling Framework(EMF)适用于您期待的应用程序。 我假设你有一个模型,你想将其转换为代码。 我可以给出的非常具体的提示是JET (Java Emitter模板),您可以在这里参考更多细节。
也是由eclipse引入的更新的框架XP,
围绕抽象语法开发组件的转换是模型转换技术。 1.模型到文本(Java Emitter Templates [JET]和Xpand)2。模型到模型(QVT和ATL)
这里的模型是指XML-XSLT / UML(Rational rose)模型。
从XML到JAVA和副Versa我强烈推荐JAXB。
您可以使用JAXB 2.0或更高版本从Schema生成Java源代码。 或者您可以从Java生成Schema。
您还可以使用Jettison轻松地使JAXB生成/使用JSON。
您还可以让JAXB使用其插件系统以Martin Fowler Fluent Style或一系列不同方式生成POJO。
编辑基于您的评论:让XSLT生成您的JAXB POJO:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/" priority="100">
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="Human")
public class <xsl:value-of select="name(node())" /> {
<xsl:apply-templates select="child::node()" />
}
</xsl:template>
<xsl:template match="/*/*">
private String <xsl:value-of select="name()" />;
public String get<xsl:value-of select="name()" /> {
return <xsl:value-of select=" name()" />;
}
public void set<xsl:value-of select="name()" />(String value) {
this.<xsl:value-of select="name()" /> = value;
}
</xsl:template>
</xsl:stylesheet>
如果您使用此示例处理XML:
<?xml version="1.0" encoding="UTF-8"?>
<Human>
<EyeColor>brown</EyeColor>
<HairColor>brown</HairColor>
</Human>
你会得到类似的东西:
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="Human")
public class Human {
private String EyeColor;
public String getEyeColor {
return EyeColor;
}
public void setEyeColor(String value) {
this.EyeColor = value;
}
private String HairColor;
public String getHairColor {
return HairColor;
}
public void setHairColor(String value) {
this.HairColor = value;
}
}
您可以查看Eclipse建模项目的模型到文本组件 。
是的,您可以使用xml文件来创建它。创建您自己的xml文件模板,然后使用preferences-java-code template-import选择该文件,您可以使用该模板。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.