maven项目的结构为什么是这样的
本文目的
接上一篇 maven中强大的scope标签详解。
从我第一次接触maven
项目时,就很好奇为什么maven
项目的结构src/main/java
、src/main/resources
、target
、pom.xml
,如下:
src
----main
--------java // 开发的java代码全都放在这里
--------resources //xml文件、配置文件等
target // maven项目编译打包的目标目录
pom.xml // maven项目的依赖配置
虽然知道肯定是有个配置来指明了这些目录,但是一直不知道在哪里。最近才明白这个道理。
正文
其实这个结构是maven
的一个文件里定义的。
我们在用maven
的时候,都会指定maven
的目录。比如下边这个:
maven
的lib
包里有很多的依赖jar,会在项目使用当前maven
的时候,引用进来。
对应的/lib/maven-model-builder-3.3.3.jar
包中,有个pom-4.0.0.xm
文件,其中有这么一段。如下:
<build>
<!--1.编译的目录在项目的target文件夹中-->
<directory>${project.basedir}/target</directory>
<!--2.源码编译后存储到target/classes文件夹中-->
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<!--3.输出项目的名称-->
<finalName>${project.artifactId}-${project.version}</finalName>
<!--4.测试类源码编译后存储到/target/test-classes-->
<testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
<!--5.源码的目录/src/main/java-->
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<scriptSourceDirectory>${project.basedir}/src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
<resources>
<resource>
<!--6.项目的配置文件目录/src/main/resources-->
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
<pluginManagement>
<!-- NOTE: These plugins will be removed from future versions of the super POM -->
<!-- They are kept for the moment as they are very unlikely to conflict with lifecycle mappings (MNG-4453) -->
<!-- maven的这个超级pom默认引用的插件,我们所有的项目都能够继承这些,但是通过上边的提示,
可以大概理解,这些插件将来会从超级pom里移除,因为看起来不够友好,有的项目开发中也会
依赖,导致冲突-->
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.3.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
从上图可以看到,maven
项目的结构,即从maven
的这个配置中继承而来。
下一篇文章,学习了关于maven引用依赖的时候,如果存在多次依赖的话,maven是如何做的依赖调解,maven的依赖调解机制。