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

最佳答案

事实证明,使用 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>

这是 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()
    }
}

关于java - 从 java 类生成 javascript 作为 maven 构建步骤,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9522145/

10-12 17:38
查看更多