Start Maven Example
Table of Contents
1 Simple POM
Maven projects are defined with an XML file named pom.xml. This file gives the project’s name, version, and dependencies that it has on external libraries. Here is an example.
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.springframework</groupId> <artifactId>gs-maven</artifactId> <packaging>jar</packaging> <version>0.1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>hello.HelloWorld</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
<modelVerion>
POM model version<groupId>
Domain name of the group or organization.<artifactId>
Name to the project’s library artifact (name of JAR file)<version>
Version of the project<packaging>
How it should be packaged (in JAR or WAR file)
2 Basic command
mvn compile mvn package mvn install
The first command compiles the project, and the .classfiles shold be
in the target/classes directory.
The second command compile the code, run tests and finish by
packaging the code up in a JAR file in the target directory.
Tht third command does the same thing as the second command, then
copy the JAR file into the local dependency repository, under the
directories with name of groupId, artifactId and version. So on my
machine, its location is
~/.m2/repository/org/springframework/gs-maven/0.1.0/gs-maven-0.1.0.jar
.
Add dependencies of project into the pom.xml file, in the
<project>
element.
<dependencies> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.2</version> </dependency> </dependencies>
This description will tell the maven to get the joda-time package
as external library. You can specify a <scope>
element to specify
if the dependencies are required for compiling the code but will be
provided during runtime by provided
; or decalre the dependencies
are only necessary for compiling and running tests.
When I compile the command, maven downloads the joda-time pakcage from https://repo.maven.apache.org/maven2/joda-time/. Does the maven use its domain when the group id does not contain the domain by default?
You can also create a project from scratch
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
mvn scala:console
can launch the scala console with the pom
configurations (you have to specify maven-scala-plugin).
3 Directory layout
project src main java [scala] resources environment.properties environment.test.properties environment.prod.properties config application.yml application-dev.yml application-[profile].yml [other] test java [scala] target classes the classes with the same structure as src/main the directories in src/main/resources test-classes the classes with the same structure as src/mainproject xxx.jar target