Gradle Groovy Java cross compile

Mostanság Gradle kedvenc build tool-om. Sajnos még nem álltam rá teljesen, hiszen a teljes projectet le kell kezelnem vele és még nem volt rá kapacitásom, hogy minden lépést bekonfiguráljak (kicsit parázok a korrekt EAR file készítésétől, mert azzal maven alatt is szokott gond lenni). De oldalági projekteknél már csak ez jöhet szóba.

De van egy gond, ha keverem a nyelveket. Mondjuk Groovy és Java.

A Groovy-t könnyű bevezetni, mikor rámutatsz, hogy pár dolog végtelenűl leegyszerüsödik, hogy pl GroovyBean-eket használunk.

1 @Canonical 
2 class Customer {
3     String first, last
4     int age
5     Date since
6     Collection favItems = ['Food']
7     def object 
8 }

A fenti példa egy teljes értékű Java beant hoz létre mindenféle getterrel, setterrel, toStringgel, hashCoddal, equalsval és hasznos konstruktorokkal.

Majd ezt használni akarod Java-ban. És nem fog menni!

A Gradle Groovy pluginja a Java buildtől függ. Maygarán előbb a Java-t fogja buildeni és csak aztán a Groovy forrásokat. És persze a Java bebukik, mert még nem fordult le a GroovyBean, amit használna. (Hasonló probléma Scala esetben is)

Szerencsére van megoldás:

 1sourceSets {
 2  main {
 3      groovy {
 4          srcDirs = ['src/main/groovy', 'src/main/java'] 
 5      }
 6      java {
 7          srcDirs = []  
 8      }
 9  }
10  test {
11    groovy {
12        srcDirs = ['src/test/groovy', 'src/test/java'] 
13    }
14    java {
15        srcDirs = []  
16    }
17 }
18}
May 15, 2014
comments powered by Disqus

Links

Cool

RSS