Apache Maven
Table of Contents
|
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