本文不作为小白科普 , 只是为了应对面试或者工作中需要解决的问题.
面试的时候从来没有碰到过问maven的,大部分项目构建时才会集中解决依赖问题 , 后期在产品迭代时引入新的依赖才会偶尔处理jar包冲突。
依赖管理
maven对于依赖的管理非常符合java的面向对象思想 , 体现了对资源的复用性.正常java项目中每个项目本地磁盘中都需要放置一份该项目需要的jar包 , 而maven通过pom文件对坐标的声明 , 将项目工程所依赖的jar包统一规范管理 .
jar包统一放在仓库中,仓库分为本地仓库,远程仓库(中央仓库,私服)项目构建时,优先去本地找,本地没有会去私服找,再没有会去中央仓库找,假如在私服找到了,会先往你的本地存一份,提高下次构建的效率,类似缓存的思想.
<dependency>
<groupId>junit</groupId> 公司名/组织名
<artifactId>junit</artifactId> 项目名称
<version>4.12</version> 版本号
</dependency>
一键构建
maven使用自带的tomcat插件对项目进行清理,编译,测试,打包,部署(很多工具中,都存在不同容器插件,插件和插件之前也会存在冲突,比如编译时使用maven中的tomcat还是本地的tomcat还是idea中的tomcat)
使用maven构建的项目,根据不同的骨架,会自动创建好目录,这些目录格式遵循了maven对一个项目的规范要求 , 比如一个java目录下maven默认是不会让你创建jsp文件的
src/main/java 核心代码
src/main/resource 静态资源
src/main/webapp 页面资源
通过pom文件 , 可以对插件进行控制 , 例如jdk ,tomcat 在执行命令的时候将用指定的jdk进行编译
生命周期
maven的生命周期为
compile 编译 ; 将src/main/java下的代码进行编译,生成target/classes文件夹
test 测试 ;将src/test下的junit测试用例代码进行编译,生成target/test-classes文件夹
package 打包 ; 按照pom文件中规定的打包方式
install 安装 ; 将打好的包放到本地仓库一份
deploy 部署
每个命令都代表一个阶段 ,对于以上命令 , 在执行部署命令时 , 会将compile , test , package , install命令按顺序全部执行一次 , 执行打包时,会将 compile ,test执行一次
jar包冲突
例如编译时 , 需要使用servlet的包 , 保证编译时代码不报红 , 为此就需要将servlet-jsp引入pom文件 , 但此时运行项目时 , 因为tomcat作为web容器已经有一套servlet的包 , 所以导致项目中会出现两套servlet的包 , 一套是项目的pom文件中指定的 , 另一套是tomcat中的 , 此时需要指定pom中的作用域为 仅在编译时期生效 , 为的是编写代码时期 , 代码不报红
<dependency>
<groupId>junit</groupId> 公司名/组织名
<artifactId>junit</artifactId> 项目名称
<version>4.12</version> 版本号
<scope>compile</scope> 作用域 (仅在编译时期生效)
</dependency>
对插件的配置
<build>
<!‐‐maven插件‐‐>
<plugins>
<!‐‐tomcat插件‐‐>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven0plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8888</port>(针对这个项目,tomcat启动将占用8888,如果不配置,默认为8080)
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven‐compiler‐plugin</artifactId>
<version>3.2</version> <configuration>
<source>1.8</source>(将使用jdk1.8来进行编译)
<target>1.8</target>
<encoding>utf‐8</encoding>
</configuration>
</plugins>
</build>