2015-05-14 54 views
0

我正在使用grails 2.4.4。 我的一些類已註釋,並且APT(註釋處理工具)必須在編譯期間處理這些註釋以生成一些源。Grails:添加編譯任務

我能夠通過運行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> 

回答

0

我發現我自己如何Grails的內給它。 基本上我創建了一個可以用grails命令調用的腳本。這個腳本不過是一個gant腳本,你可以用它來干擾螞蟻。另外,我必須將庫添加到grails中的libs文件夾中,以便將它們放在類路徑中。

這些步驟如下:

  1. 創建一個新的Grails腳本

    grails create-script generateSources這將創建一個名爲GenerateSources.groovy腳本到您的Grails腳本目錄

  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將運行編譯任務和新的任務

公開賽: 我d喜歡在調用grails編譯時自動連接這個任務。我仍在努力。