May 13, 2020
Estimated Post Reading Time ~

Maven-Scr-Plugin Error in AEM

In this blog, I will explain an error occurred when we build an AEM project using
mvn clean install -P <Profile Name>, maven command.

The error description is as shown below
[ERROR] Failed to execute goal org.apache.felix:maven-scr-plugin:1.7.4:scr (generate-scr-descriptor) on project blog-bundle: SCR Descriptor parsing had failures (see log) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <goals> -rf :blog-bundle

Cause of this error
Most of the time this error occur because of the use of these two annotations –
@SlingServlet & @Component in the same class.

For Example, If your coding syntax is –
@SlingServlet(path=”/bin/blog” extension=”html”)
@Component
Class TestServlet extends SlingSafeMethodsServlet { /* ———————– */ }

In this case, you will get that error because @SlingServlet has a property “generateComponent” by default its value is “true” so ideally, you don’t provide the @Component annotation.

How to Resolve this issue
There are two ways to resolve this issue
1). Remove @Component annotation while creating Sling Servlet.
2). The issue with the first solution is
2.1). We are not able to activate this Sling Servlet immediately, It is totally dependent on Felix implementation when it will activate this Sling Servlet. i.e. it may or may not be the inactive state after deploying the package.
2.2). We are not able to use immediate, enabled metatype & other properties provided by @Component

preferred way to use these annotations is
@SlingServlet(path=”/bin/blog” extension=”html”, generateComponent=false)
@Component
Class TestServlet extends SlingSafeMethodsServlet { /* ———————– */ }


By aem4beginner

No comments:

Post a Comment

If you have any doubts or questions, please let us know.