Thursday, July 24, 2014

How to ban a given class...

This week I came across an odd situation.  I need to make sure nobody was using 'javax.ws.rs.Path' class.

So how can I ban a give class from my project?

It looked like a job for maven enforcer plugin!  Nop, that was no good.  Enforcer has no rule for this. May be extra enforcer rules?  No rule there for that too.

After searching a little bit more I found a plugin to do that!

Restrict-maven-plugin allowed me to do so.


<plugin>
  <groupId>com.yamanyar</groupId>
  <artifactId>restrict-maven-plugin</artifactId>
  <version>0.6</version>
  <executions>
    <execution>
      <phase>process-classes</phase>
      <goals>
        <goal>restrict</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <continueOnError>false</continueOnError>
    <restrictions>
      <restriction>com.contaazul.* to javax.ws.rs.Path</restriction>
    </restrictions>
  </configuration>
</plugin>

Easy no?

Now if someone add this by mistake maven will let us know:
[error] Restricted access from:(com.contaazul.MyClass.class) com.contaazul.MyClass to: javax.ws.rs.Path due to rule [1-1]
[error] Build is broken due to 1 restriction policies!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 45.133 s (Wall Clock)
[INFO] Finished at: 2014-07-24T10:20:44-03:00
[INFO] Final Memory: 60M/1247M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.yamanyar:restrict-maven-plugin:0.4:restrict (default) on project contaazul-app-business: There are 1 access exceptions! -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e 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/MojoExecutionException

Way better then catching a bug latter, no?