0

我正在使用 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>
4

1 回答 1

0

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

这些是步骤:

  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其中包括 Annotation 处理器和另一个依赖项freemarker-2.3.18.jar。Javac 会自动调用正确的 APT 来处理文件夹中的注解src/java

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

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

于 2015-05-15T10:30:30.410 回答