Maven面试工作常用知识-------------基础(自用 , 非小白科普)

    技术2023-10-26  103

    本文不作为小白科普 , 只是为了应对面试或者工作中需要解决的问题. 面试的时候从来没有碰到过问maven的,大部分项目构建时才会集中解决依赖问题 , 后期在产品迭代时引入新的依赖才会偶尔处理jar包冲突。

    内容目录

    依赖管理一键构建生命周期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>
    Processed: 0.016, SQL: 9