Hi,

I've recently been trying out the Macker tool (http://innig.net/macker)
to enforce architectural rules in a project of mine. I did some
searching in this mailing list as well as Google if there was a way to
run Macker with Maven 2, but only found questions from others asking how
this should be done. The existing maven-macker-plugin is for Maven 1,
though I have seen a message that there apparently is a Maven 2 plugin
in development.

Anyway, I have been fiddling around a bit and found a way to run Macker
in Maven 2 until a proper plugin is available, which I thought I'd share
 here for anyone interested. As I still consider myself as a Maven 2
newbie, I would appreciate any feedback on this solution, if it seems
reasonable at all. This is the first time I use the antrun plugin, and I
have no experience using Ant before at all.

The description below is for a simple single project following the
directory structure expected as default by Maven 2. It should however be
simple to adapt it. This is going to be a bit lengthy, so bring a sandwich.



1. In your POM:

<build>
   ...
      <plugins>
         <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <groupId>org.apache.maven.plugins</groupId>
            <version>1.1</version>
            <configuration>
               <tasks>
                  <ant antfile="${basedir}/build.xml"
                       inheritRefs="true">
                     <target name="macker"/>
                  </ant>
               </tasks>
            </configuration>
            <dependencies>
               <dependency>
                  <groupId>ant</groupId>
                  <artifactId>ant-antlr</artifactId>
                  <version>1.6.5</version>
               </dependency>
               <dependency>
                  <groupId>antlr</groupId>
                  <artifactId>antlrall</artifactId>
                  <version>2.7.4</version>
               </dependency>
               <dependency>
                  <artifactId>macker</artifactId>
                  <groupId>innig</groupId>
                  <version>0.4.2</version>
               </dependency>
               <dependency>
                  <artifactId>innig-util</artifactId>
                  <groupId>innig</groupId>
                  <version>0.4.2</version>
               </dependency>
               <dependency>
                  <artifactId>jakarta-regexp</artifactId>
                  <groupId>jakarta-regexp</groupId>
                  <version>1.4</version>
               </dependency>
               <dependency>
                  <artifactId>bcel</artifactId>
                  <groupId>bcel</groupId>
                  <version>5.1</version>
               </dependency>
               <dependency>
                  <artifactId>jdom</artifactId>
                  <groupId>jdom</groupId>
                  <version>1.0</version>
               </dependency>
               <dependency>
                  <artifactId>commons-lang</artifactId>
                  <groupId>commons-lang</groupId>
                  <version>1.0.1</version>
               </dependency>
            </dependencies>
         </plugin>
         ...
      </plugins>
   ...
</build>




2. The build.xml file in ${basedir}. The location for this is configured
in the POM plugin configuration above (antfile="${basedir}/build.xml").

<?xml version="1.0"?>

<project name="project-title" default="macker">
   <description>
      Ant task to run the Macker tool.
   </description>

   <target name="macker">
      <taskdef name="macker"
               classname="net.innig.macker.ant.MackerAntTask"
               classpathref="maven.plugin.classpath"/>
      <macker>
         <!--
            This classpath tells Macker where to look for its own
            libraries, and the libraries used by the primary classes.
         -->
         <classpath refid="maven.plugin.classpath" />


         <!--
             Rules come from this file:
         -->
         <rules dir="src/test/macker" includes="macker.xml" />


         <!--
             Macker will apply those rules to these primary classes:
         -->
         <classes dir="target/classes">
            <include name="**/*.class" />
         </classes>
      </macker>
   </target>
</project>



3. The macker rules are placed in ${basedir}/src/test/macker/macker.xml.
This location is specified in build.xml above at
 <rules dir="src/test/macker" includes="macker.xml" />

<?xml version="1.0"?>
<!DOCTYPE macker PUBLIC
          "-//innig//DTD Macker 0.4//EN"
          "http://innig.net/macker/dtd/macker-0.4.dtd";>

<macker>
   <ruleset name="Architectural rules for StoryType">
        <!--
           Define some rules here.
           See http://innig.net/macker/guide/index.html
        -->
   </ruleset>
</macker>



Using 'mvn antrun:run' will run Macker on your compiled classes in
${basedir}/target/classes/

I hope I haven't forgot anything, and that this may be of interest for
others as well :)

Rune



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to