Apache Maven

Create Eclipse Maven Project

mvn archetype:generate -DgroupId=com.redmind.mpms -DartifactId=projAlpha -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
mvn eclipse:eclipse

Maven Compiler Plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.0</version>
    <configuration>
        <target>1.6</target>
        <source>1.6</source>
    </configuration>
</plugin>
mvn compile

Maven Exec Plugin

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <mainClass>launch.Main</mainClass>
    </configuration>
</plugin>
mvn exec:java

Maven Jetty Plugin

<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>8.1.2.v20120308</version>
    <configuration>
        <scanTargetPatterns>
            <scanTargetPattern>
                <directory>sa.tmp</directory>
                <excludes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </excludes>
            </scanTargetPattern>
        </scanTargetPatterns>
        <scanIntervalSeconds>1</scanIntervalSeconds>
        <stopKey>stop</stopKey>
        <stopPort>9999</stopPort>
    </configuration>
</plugin>
mvn jetty:run
mvn jetty:stop

Embedded Tomcat 7 Maven Plugin

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.0</version>
    <executions>
        <execution>
            <id>tomcat-run</id>
            <goals>
                <goal>exec-war-only</goal>
            </goals>
            <phase>package</phase>
            <configuration>
                <path>/MahOutSongTagger</path>
                <enableNaming>false</enableNaming>
                <finalName>MahOutSongTagger.jar</finalName>
                <charset>utf-8</charset>
            </configuration>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>${tomcat7Version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-util</artifactId>
            <version>${tomcat7Version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-coyote</artifactId>
            <version>${tomcat7Version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-api</artifactId>
            <version>${tomcat7Version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jdbc</artifactId>
            <version>${tomcat7Version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-dbcp</artifactId>
            <version>${tomcat7Version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-servlet-api</artifactId>
            <version>${tomcat7Version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jsp-api</artifactId>
            <version>${tomcat7Version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jasper</artifactId>
            <version>${tomcat7Version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jasper-el</artifactId>
            <version>${tomcat7Version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-el-api</artifactId>
            <version>${tomcat7Version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-catalina</artifactId>
            <version>${tomcat7Version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-tribes</artifactId>
            <version>${tomcat7Version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-catalina-ha</artifactId>
            <version>${tomcat7Version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-annotations-api</artifactId>
            <version>${tomcat7Version}</version>
        </dependency>
    </dependencies>
</plugin>
mvn package

In runSongTagger.sh -

#!/bin/sh
 
# run SongTagger
java -jar MahOutSongTagger.jar -httpPort=6969 &
 
# run app in default browser
python -mwebbrowser -t http://localhost:6969/MahOutSongTagger
sh runSongTagger.sh

Java Class Diagram Generator Maven Plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <doclet>org.umlgraph.doclet.UmlGraphDoc</doclet>
        <docletArtifact>
            <groupId>org.umlgraph</groupId>
            <artifactId>doclet</artifactId>
            <version>5.1</version>
        </docletArtifact>
        <additionalparam>-horizontal -attributes -enumconstants
            -enumerations -operations -types -visibility -inferrel -inferdep
            -hide java.* -inferrel -collpackages java.util.*</additionalparam>
        <show>public</show>
    </configuration>
</plugin>
mvn javadoc:javadoc
Graphviz have to be installed!

Unit Test Maven Plugin

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.14</version>
    <configuration>
        <skipTests>true</skipTests>
    </configuration>
</plugin>

Assemble with all dependencies Maven Plugin

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

Maven OutOfMemoryError

Edit .bashrc, add -

export MAVEN_OPTS="-Xmx1024m -XX:MaxPermSize=256m"
Java Heap Space: -Xmx
PermGen Space: -XX:MaxPermSize

Add resource files in jar

'mvn package' creates jar but without resource file, if following code added in pom, jar will create with resource file.

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>      
    </resources>
</build>

Maven 3 - parallel build

mvn -T 2C clean install # 2 thread per cpu core

Code quality with Sonar

  • Download Sonar
  • Unzip sonarqube-4.3.zip
  • Run ./bin/linux-x86-64/sonar.sh

Add following in pom.xml

<profiles>
    <!-- better to have keep this sonar profile in your maven settings.xml -->
    <profile>
        <id>sonar</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <sonar.host.url>http://localhost:9000</sonar.host.url>
            <sonar.jdbc.url>jdbc:h2:tcp://localhost:9092/sonar</sonar.jdbc.url>
            <sonar.jdbc.driver>org.h2.Driver</sonar.jdbc.driver>
            <sonar.jdbc.username>sonar</sonar.jdbc.username>
            <sonar.jdbc.password>sonar</sonar.jdbc.password>
        </properties>
    </profile>
</profiles>
$ mvn -Dmaven.test.skip=true clean install -Psonar sonar:sonar
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License