有人知道在eclipse中自动生成Java源代码的方法,例如xml或json文件吗?
我正在考虑做的一个很好的例子是Google Android sdk所做的事情:他们有一个从resources自动生成的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类中,说R我会有类似的东西:
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
谢谢!
答案 0 :(得分:4)
我这样做是因为我有一个XSLT文件,它只是将我的xml数据(在我的情况下是一个协议规范)转换为java源代码。这个XSLT转换可以很容易地在一个ANT任务中完成,该任务可以包含在eclipse的构建链中。
也许这个特定任务有一个插件。
一些有用的链接:
答案 1 :(得分:3)
我根据您的评论添加了另一个答案,也因为我不建议您在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 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;
}
}
答案 2 :(得分:2)
Eclipse Eclipse Modeling Framework(EMF)适用于您期待的应用程序。 我假设你有一个模型,你想将其转换为代码。我可以给出的非常具体的提示是JET(Java Emitter模板),您可以在这里查看更多详细信息。
也是由eclipse引入的新框架XP,
围绕抽象语法开发组件进行转换是模型转换技术 - nologies。 1.模型到文本(Java Emitter Templates [JET]和Xpand) 2.模型到模型(QVT和ATL)
这里的模型是指XML-XSLT / UML(Rational rose)模型。
答案 3 :(得分:1)
看看XDoclet。它是一个可扩展的Java开源代码生成引擎。
编辑:正如bozho指出的那样,XDoclet大部分都被注释取代:Annotations vs. XDoclet答案 4 :(得分:1)
从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;
}
}
答案 5 :(得分:1)
您可以查看Eclipse建模项目的model to text components。
答案 6 :(得分:0)
是的,您可以使用xml文件来创建它。创建您自己的xml文件模板,然后使用preferences-java-code template-import选择该文件,您可以使用该模板。