I started using Maven at work recently. Being a newbie, I find myself googling constantly (even though the answer is always on StackOverflow) about basic things. For reference, these are my most needed actions so far:
How to create a new maven project
Originally found here:
mvn archetype:generate \
-DgroupId=com.mycompany.app \
-DartifactId=my-app \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false
Now that’s one long command line…
How to define the Java version of the project
You’ll need the maven-compiler-plugin. For example, to target Java 1.8, edit the pom.xml
like this:
<project> <!-- root of pom.xml, details deleted for simiplicity -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
Update 2018-06-20: there’s a much easier way but I have forgotten to update this post. Just use these properties:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
How to specify the main class of your jar file
You’ll need the maven-jar-plugin. Example:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.mycompany.app.Program</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
How to copy your dependencies to the output folder
Your jar file ends up being generated to the target folder (don’t forget to add it to the .gitignore
!) but the dependencies aren’t copied by default. To do that, you’ll need the maven-dependency-plugin. Example:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<includeScope>compile</includeScope>
</configuration>
</execution>
</executions>
</plugin>
How to copy extra resource files to the output folder
This is when you have a few configuration property files in the conf folder and you want to copy them to the same folder where your jar file is going to live. These resource files will not be packaged in your jar file, they will live as standalone files. You’ll need the maven-resources-plugin. Example:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<resources>
<resource>
<directory>conf</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>