Always required in a POM:
- groupId
- artifactId
- version
- All POMs inherit from Maven's Super POM.
This is why some properties you specify but not use have effect. For example you can set the compiler version with these properties:
<maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target>
- To set up a POM hierarchy within your project, all POMs that are specified as
<parent>
in other POMs or that have<modules>
(aggregation aka. multi-module projects) must use<packaging>pom</packaging>
.
- Note: A POM project may be inherited from - but does not necessarily have any modules that it aggregates. Conversely, a POM project may aggregate projects that do not inherit from it.
- compile - this is the default scope, used if none is specified. Compile dependencies are available in all classpaths. Furthermore, those dependencies are propagated to dependent projects.
- provided - this is much like compile, but indicates you expect the JDK or a container to provide it at runtime. It is only available on the compilation and test classpath, and is not transitive.
- runtime - this scope indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath.
- test - this scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases. It is not transitive.
- system - this scope is similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository.
- One by one: specify them one by one
- All: use the * wildcard for both the groupId and artifactId