繁体   English   中英

在Eclipse中生成java代码?

[英]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)模型。

看看XDoclet 它是一个可扩展的Java开源代码生成引擎。

编辑:正如bozho指出的那样,XDoclet主要被注释取代: 注释与XDoclet

是否有任何Java库使用注释来生成代码?

从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM