This is an old revision of the document!
Anybody who wanted to to start with Apache Maven probably at least skimmed through the official guide and I wasn't an exception. While reading, I started to think, what the hell… it was supposed to be simple. Instead of it, I had to enter this crazy command into shell just to create a basic empty project:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false
Oh God, whyyyy!? So let's fiddle with it…
What really happens when you run aforementioned command is that it creates directory structure, pom.xml (Maven project file, so called Project Object Model) and a Hello world app (and its test):
fiisch@mothership:~> cd /tmp/ fiisch@mothership:/tmp> mkdir mvn-test fiisch@mothership:/tmp> cd mvn-test/ fiisch@mothership:/tmp/mvn-test> mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app \ > -DarchetypeArtifactId=maven-archetype-quickstart \ > -DinteractiveMode=false [INFO] Scanning for projects... ... [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.808 s [INFO] Finished at: 2016-08-12T11:21:32+02:00 [INFO] Final Memory: 14M/343M fiisch@mothership:/tmp/mvn-test> find . ./my-app ./my-app/src ./my-app/src/main ./my-app/src/main/java ./my-app/src/main/java/com ./my-app/src/main/java/com/mycompany ./my-app/src/main/java/com/mycompany/app ./my-app/src/main/java/com/mycompany/app/App.java ./my-app/src/test ./my-app/src/test/java ./my-app/src/test/java/com ./my-app/src/test/java/com/mycompany ./my-app/src/test/java/com/mycompany/app ./my-app/src/test/java/com/mycompany/app/AppTest.java ./my-app/pom.xml
Also there is a generated pom.xml file which you have to edit if you take it seriously. Now let me explain the project-generation command:
Now we will try to create empty project by hand. First, create directory for your project and then a structure the archetype originally created for you:
fiisch@mothership:/tmp> mkdir mvn-test-hand
fiisch@mothership:/tmp> cd mvn-test-hand/
fiisch@mothership:/tmp/mvn-test-hand>
# now we are starting to create project
# create equivalent of -DartifactId=my-app
fiisch@mothership:/tmp/mvn-test-hand> mkdir my-app
# create directory structure for -DgroupId=com.mycompany.app
fiisch@mothership:/tmp/mvn-test-hand> cd my-app/
fiisch@mothership:/tmp/mvn-test-hand/my-app> mkdir -pv src/{main,test}/java/com/mycompany/app
mkdir: created directory ‘src’
mkdir: created directory ‘src/main’
mkdir: created directory ‘src/main/java’
mkdir: created directory ‘src/main/java/com’
mkdir: created directory ‘src/main/java/com/mycompany’
mkdir: created directory ‘src/main/java/com/mycompany/app’
mkdir: created directory ‘src/test’
mkdir: created directory ‘src/test/java’
mkdir: created directory ‘src/test/java/com’
mkdir: created directory ‘src/test/java/com/mycompany’
mkdir: created directory ‘src/test/java/com/mycompany/app’
# create minimal pom.xml in the my-app folder
fiisch@mothership:/tmp/mvn-test-hand/my-app> cat pom.xml
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
# now try to compile empty project
fiisch@mothership:/tmp/mvn-test-hand/my-app> mvn compile
[INFO] Scanning for projects...
...
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.395 s
[INFO] Finished at: 2016-08-12T12:05:05+02:00
[INFO] Final Memory: 9M/481M
And that's it. We managed to setup empty project without using the archetype.