Hi Rune,

Sounds nice - I didn't know macker :) It should also be pretty easy to
wrap to ant task in a mojo - thus making pom reading requiring much
less sandwiches.

Thanks for sharing !
g

On 14/02/07, Rune Flobakk <[EMAIL PROTECTED]> wrote:
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]



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

Reply via email to