maven面试题

maven常用操作

修改config目录下的settings.xml配置本地厂库,配置私服

mvn compile:编译源代码

mvn test:运行测试,清理--编译--运行测试方法,main方法或带有@Test方法

mvn clean:清除编译在target目录产生的文件

mvn package:打包

mvn install:编译,测试,打包,放到本地厂库

mvn deploy:上传包到私服/远程仓库(需要配置账号密码)

为了防止利用前面编译过的class文件可以

mvn clean install

mvn clean test

mvn clean package

 

mvn test命令执行哪些包下的测试方法

默认只会执行Maven项目中src/test/java目录下的测试类
默认只有类的命名规范满足以下规范才会执行:

1. 以Test结尾的类,如MyTest.java。
2. 以TestCase结尾的类,如MyTestCase.java。
3. 以Test开头的类,如TestMyClass.java。
4. 以TestCase开头的类,如TestCaseMyClass.java。
指定执行的类:mvn test -Dtest=XgssTest
指定执行的方法,可以用逗号分隔指定多个类或方法:mvn test -Dtest=XgssTest1#test1,XgssTest2#test2
使用通配符:
  mvn test -Dtest=TestClass1#test*
  mvn test -Dtest=XgssClass*

怎么跳过测试用例

如 mvn package -Dskip Tests,这样将不执行测试用例,但会编译测试用例类生成class文件在target/test-classes目录下

或者 mvn package -Dmaven.test.skip=true ,这样不执行测试用例也不编译测试用例类

maven的profile配置

profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。

 

比如:

jdk1.7以上使用一套配置信息,在jdk1.7以下使用另外一套配置信息;

windows下是一套信息,linux下又是另外一套信息。

 

定义的位置

针对于特定项目的profile配置我们可以定义在该项目的pom.xml中。

针对于特定用户的profile配置,我们可以在用户的settings.xml文件中定义profile。该文件在用户家目录下的“.m2”目录下。

全局的profile配置。全局的profile是定义在Maven安装目录下的“conf/settings.xml”文件中的。

 

Pom文件相关

parent标签说明

Parent标签用于指定依赖的父pom,父pom中可以定义子项目中共同依赖的包及插件,而不用再子项目中再进行定义;父pom中还可以声明包及插件的版本,字项目中如果需要可以声明依赖而不用指定版本,使用父pom做到统一管理

dependencies标签说明

dependencies标签指定该项目中依赖的包,如果在父pom中定义,子项目中都会依赖这里定义的依赖

dependencyManagement标签说明

该标签进行声明依赖,进行依赖版本的统一管理,只有在父项目中才需要改标签,子项目中可以指定依赖不指定版本使用父项目中改标签下指定的版本,如果子项目中指定了版本会覆盖父项目中的版本

properties标签说明

用于定义pom中使用的变量,如果子项目中的变量名称和父pom中定义的一样会覆盖父pom中的变量值,使用自己定义的变量值

 

scope标签说明

<scope>标签是用于定义依赖的范围(scope)的。它决定了依赖的生命周期、可见性以及是否会被打包进最终的构建结果中。<scope>标签可以有以下几个值:

  1. compile(默认值):
    • 编译范围。如果没有明确指定依赖范围,那么默认就是compile范围。
    • 依赖在项目的classpath中可用,对于编译、测试和运行都是必须的。
    • 它会被包含在最终的WAR包或JAR包中(对于web应用是WAR包,对于库是JAR包)。
  2. provided
    • 提供范围。这个范围的依赖在编译和测试时可用,但在运行时将由JDK、容器或用户手动提供。
    • 例如,对于运行在Servlet容器中的Java Web应用,Servlet API和JSP API的依赖通常被设置为provided,因为这些API在Servlet容器中已经提供。
    • 这种范围的依赖不会被包含在最终的构建结果中。
  3. runtime
    • 运行时范围。依赖在编译时不可用,但在测试和运行时可用。
    • 例如,JDBC驱动的依赖通常设置为runtime,因为编译时不需要它,但在运行时需要。
    • 这种范围的依赖会被包含在最终的构建结果中。
  4. test
    • 测试范围。依赖只在测试编译和运行阶段可用,对于正常的编译和运行不可用。
    • 例如,JUnit这样的测试框架的依赖通常设置为test。
    • 这种范围的依赖不会被包含在最终的构建结果中。
  5. system
    • 系统范围。这类似于provided,但你必须提供系统路径。
    • 由于它依赖于系统路径,因此它不可移植,不推荐使用。
    • 这种范围的依赖不会被包含在最终的构建结果中。
  6. import(仅在<dependencyManagement>中使用):
    • 导入范围。它只在<dependencyManagement>元素中使用,用于从另一个POM中导入依赖管理信息。
    • 它不会添加实际的依赖到项目的classpath中,也不会包含在最终的构建结果中。

 

maven依赖的jar包冲突解决

通过把exclusions标签把其中一个的包给排除

 

其他总结

本地/远程/中央仓库

本地仓库:就是我们本地磁盘仓库的位置

首次安装maven后的本地仓库是存于系统盘下的{userHome}/.m2/repository文件夹中,由自己维护

远程仓库(或私服):如果依赖的jar包本地仓库没有,会从远程仓库下载到本地仓库,由公司创建的一个仓库,由公司维护;

中央仓库:远程仓库没有的回去中央厂库寻找下载到本地厂库,由Maven团队维护

posted @ 2023-02-02 09:17  星光闪闪  阅读(63)  评论(0)    收藏  举报