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>