Register Groovy class as Component/Service in CQ
Being a CQ5 developer, I have to register components and services almost everyday. Knowing how powerful Groovy is, I wanted to replace all Java code with Groovy. First step towards it was being able to compile Groovy. I got it to work with the help of this blog.
Although I was facing following problem even after this:
– I was not able to register component as a service or component. Infact none of the SCR annotations seemed to work with Groovy. I had following maven-scr plugin configration.
[html]
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-scr-plugin</artifactId>
<executions>
<execution>
<id>generate-scr-descriptor</id>
<goals>
<goal>scr</goal>
</goals>
</execution>
</executions>
</plugin>
[/html]
Tried a lot of things for this and this is how I got it work(thanks to suggestions from a group):
[html]
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-scr-plugin</artifactId>
<configuration>
<scanClasses>true</scanClasses>
</configuration>
<executions>
<execution>
<id>generate-scr-descriptor</id>
<goals>
<goal>scr</goal>
</goals>
</execution>
</executions>
</plugin>
[/html]
By default maven-scr plugin compiles only Java Classes. To make it aware of Groovy classes also, a configuration “scanClasses” has to be set to true.
Updated:
There are 2 more configuration changes that are needed:
1) I had to change version of maven-scr-plugin from 1.7.4 to 1.17.0
[java]
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-scr-plugin</artifactId>
<version>1.17.0</version>
</plugin>
[/java]
2) Change version of felix scr annotation to 1.9.8
[java]
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr.annotations</artifactId>
<version>1.9.8</version>
<scope>provided</scope>
</dependency>
[/java]
Adding this code worked like a charm.
Hope this helps CQ5 developers who love Groovy(like me. :))…
Vivek Sachdeva
CQ5 developer