| Info | ||
|---|---|---|
| ||
The original content is taken from the Maven Users Mailing list Subject: Running Macker with Maven 2 |
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:
| Code Block | ||
|---|---|---|
| ||
<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").
| Code Block | ||
|---|---|---|
| ||
<?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" />
| Code Block | ||
|---|---|---|
| ||
<?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
