作为maven构建步骤从java类生成javascript

作为maven构建步骤从java类生成javascript,java,javascript,maven,compiler-construction,build-process,Java,Javascript,Maven,Compiler Construction,Build Process,我有一个java枚举,用于我的web应用程序。我还有很多引用枚举值的javascript代码。如果我可以从enum生成一个javascript文件作为maven构建过程的一部分,那将是非常理想的。有人知道解决这个问题的项目吗,或者知道解决这个问题的优雅方法吗? 谢谢 我也遇到了同样的问题,最后创建了一个自定义标记,允许我在jsp中迭代枚举 public static Enum<?>[] getValues(String klass) { try { Metho

我有一个java枚举,用于我的web应用程序。我还有很多引用枚举值的javascript代码。如果我可以从enum生成一个javascript文件作为maven构建过程的一部分,那将是非常理想的。有人知道解决这个问题的项目吗,或者知道解决这个问题的优雅方法吗?
谢谢

我也遇到了同样的问题,最后创建了一个自定义标记,允许我在jsp中迭代枚举

public static Enum<?>[] getValues(String klass) {
    try {
        Method m = Class.forName(klass).getMethod("values", (Class<?>[]) null);
        Object obj = m.invoke(null, (Object[]) null);
        return (Enum<?>[]) obj;
    } catch (Exception ex) {
        return null;
    }
}
公共静态枚举[]获取值(字符串klass){
试一试{
方法m=Class.forName(klass.getMethod(“值”,(Class[])null);
Object obj=m.invoke(null,(Object[])null;
返回(枚举[])对象;
}捕获(例外情况除外){
返回null;
}
}
然后在我的jsp中,我只是这样做

var MyEnum = [
<c:forEach var="type" items="${foocustomtags:enumiter('com.foo.MyEnum')}">
  '${type.value}': '${type.text}',
</c:forEach>
];
var MyEnum=[
“${type.value}”:“${type.text}”,
];

事实证明,使用groovy maven插件作为“准备包”阶段是一种很好的方法。 代码如下: 在pom.xml中添加以下条目:

<plugin>
                <groupId>org.codehaus.groovy.maven</groupId>
                <artifactId>gmaven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>script-prepare-package1</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <source>${basedir}/src/main/groovy/GenerateJavaScriptEnum.groovy</source>
                        </configuration>
                    </execution>

                </executions>
            </plugin>

org.codehaus.groovy.maven
gmaven插件
script-prepare-package1
准备包装
执行
${basedir}/src/main/groovy/GenerateJavaScriptEnum.groovy
groovy脚本GenerateJavaScriptEnum.groovy如下所示:

    def fields = []


com.foo.bar.YourEnum.values().each() { f->
    fields << "${f.name()} : \"${f.getId()}\""
}

if (fields) {
    log.info("Generating Javascript for com.foo.bar.YourEnum")

    [
            new File("${project.build.directory}/${project.build.finalName}/js"),
            new File("${project.basedir}/src/main/webapp/js")
    ].each() { baseOutputDir->
        if (!baseOutputDir.exists()) {
            baseOutputDir.mkdirs()
            log.info("Created output dir ${baseOutputDir}")
        }

        def outfile = new File(baseOutputDir, "YourEnum.js")

        log.info("Generating ${outfile}")

        def writer = outfile.newWriter("UTF-8")
        writer << "// FILE IS GENERATED FROM com.foo.bar.YourEnum.java.\n"
        writer << "// DO NOT EDIT IT.  CHANGES WILL BE OVERWRITTEN BY THE BUILD.\n"
        writer << "YourEnum = {\n"
        writer << fields.join(",\n")
        writer << "\n}"
        writer.close()
    }
}
def字段=[]
com.foo.bar.YourEnum.values().each(){f->
领域
如果(!baseOutputDir.exists()){
baseOutputDir.mkdirs()
info(“创建的输出目录${baseOutputDir}”)
}
def outfile=新文件(baseOutputDir,“YourEnum.js”)
log.info(“生成${outfile}”)
def writer=outfile.newWriter(“UTF-8”)

writer This非常有用,所以我对它进行了升级,但我仍然希望生成一些代码,以便能够从javascript代码中删除所有神奇的字符串。谢谢!