【问题标题】:Grails: add a build task for compilationGrails:为编译添加构建任务
【发布时间】:2015-05-14 11:16:31
【问题描述】:

我正在使用 grails 2.4.4。 我的一些类是带注释的,APT(注释处理工具)必须在编译期间处理这些注释以生成一些源代码。

我能够通过运行 grails generate-pom 创建一个 maven pom.xml 并从那里添加特定插件并配置它们来完成所有工作。

是否有可能使用内置的 grails 编译器配置BuildConfig.groovy 来达到相同的目标而无需通过 maven pom.xml 绕道?

更具体地说,我正在使用 AWS SWF 创建一个工作流。 SWF 使用应该生成一些客户端类的注释。因此在 pom.xml 我添加了这个。当我运行 mvn compile 时它完美运行:

<build>
...
    <plugin>
                <groupId>com.mysema.maven</groupId>
                <artifactId>apt-maven-plugin</artifactId>
                <version>1.1.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>src/generated</outputDirectory>
                            <processor>com.amazonaws.eclipse.simpleworkflow.asynchrony.annotationprocessor.AsynchronyDeciderAnnotationProcessor</processor>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>com.amazonaws</groupId>
                        <artifactId>aws-java-sdk-flow-build-tools</artifactId>
                        <version>1.9.34</version>
                    </dependency>
                    <dependency>
                        <groupId>org.freemarker</groupId>
                        <artifactId>freemarker</artifactId>
                        <version>2.3.21</version>
                    </dependency>
                    <dependency>
                        <groupId>org.apache.commons</groupId>
                        <artifactId>commons-lang3</artifactId>
                        <version>3.3.2</version>
                    </dependency>
                </dependencies>
            </plugin>
...
</build>

【问题讨论】:

    标签: grails build code-generation amazon-swf


    【解决方案1】:

    我发现了自己如何在 grails 中实现它。 基本上,我创建了一个可以使用 grails 命令调用的脚本。这个脚本只不过是一个gant 脚本,你可以用它来干扰ant。另外,我必须将库添加到 grails 中的 libs 文件夹中才能将它们放在类路径中。

    这些是步骤:

    1. 创建一个新的 grails 脚本

      grails create-script generateSources 这将在您的 grails 脚本目录中创建一个名为 GenerateSources.groovy 的脚本

    2. 编辑GenerateSources.groovy 文件

      includeTargets << grailsScript("_GrailsCompile") target(generateSources: "Generates sources for SWF workflow") { ant.delete(dir:"src/generated/java") ant.delete(dir:"target/generated-classes") depends(compile) ant.mkdir(dir:"src/generated/java") ant.mkdir(dir:"target/generated-classes") ant.javac(destdir:"target/generated-classes", classpathref:"grails.compile.classpath", source:"1.7", target:"1.7"){ compilerarg(value:"-proc:only") compilerarg(value:"-s") compilerarg(value:"src/generated/java") src(path:"src/java") } } setDefaultTarget(generateSources)

    这包括来自 GrailsCompile 脚本的引用和任务,删除一些文件夹(以防您重新运行此脚本),从本机 grails gant 调用编译任务,创建必要的目标文件夹

    1. 将必要的 jar 复制到 grails lib 文件夹。在我的情况下,我必须复制aws-java-sdk-flow-build-tools-1.9.34.jar,其中包括注释处理器和另一个依赖项freemarker-2.3.18.jar。 Javac 会自动调用正确的 APT 以处理文件夹 src/java 中的注解

    2. 运行脚本 grails generateSources 将运行编译任务和你的新任务

    打开: 我想在调用 grails compile 时自动连接这个任务。我还在努力解决这个问题。

    【讨论】:

      猜你喜欢
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 2016-07-20
      相关资源
      最近更新 更多