maven提倡约定优于配置,使用约定可以大量减少配置。
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>coom.juvenxu.mvnbook</groupId>
<artifactId>my-project</artifactId>
<version>1.0</version>
</project>
<modelVersion>4.0.0</modelVersion>
<groupId>coom.juvenxu.mvnbook</groupId>
<artifactId>my-project</artifactId>
<version>1.0</version>
</project>
如上一个简单的POM就可以做到清除构建目录,创建目录,编译代码,复制依赖至目标目录,最后打包。为了获得这样简洁的配置,用户是需要付出一定的代价的,那就是遵循maven的约定。maven会假设用户的项目是这样的:
- 源码目录为src/main/java
- 编译输出目录为target/classes/
- 打包方式为jar
- 包输出目录为target/
maven允许你自己定义源码目录,如下:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.juvenxu.mvnbook<groupId>
<artifactId>my-project</artifactId>
<version>1.0</version>
<build>
<sourceDirectory>src/java</sourceDirectory>
</build>
</project>
这样往往意味着牺牲通用性增加无谓的复杂度。