Maven基础
什么是Maven?
如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。
以往开发项目时,程序员往往需要花较多的精力在引用Jar包搭建项目环境上,而这一项工作尤为艰难,少一个Jar包、多一个Jar包往往会报一些让人摸不着头脑的异常。
而Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。
1、Maven坐标(gav):用于去仓库获取jar包给项目构建使用
注:如果groupId配置的目录名字中有"."点, 就代表多层目录
2、配置maven全局配置文件conf/settings.xml
2.1、自定义本地仓库路径:
<localRepository>D:\Develop\.m2\repository</localRepository>
2.2、配置绑定远程仓库,阿里云仓库【在全局配置文件setting.xml,只能配置一个中央仓库的镜像,即mirrorOf为central的镜像只配置一个】
<settings>
...
<mirrors>
<mirror>
<id>aliyun-mirror</id>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
...
</settings>
除了在Maven的配置文件中添加阿里云仓库地址外,还有其他的配置方式:
在项目的POM文件中配置:你可以直接在项目的POM文件中配置阿里云仓库。在POM文件的<repositories>
元素中添加如下配置即可:
<repositories>
<repository>
<id>aliyun</id>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
注意:
当同时在settings.xml和项目的POM文件中都配置了仓库信息时,POM文件中的仓库配置会覆盖settings.xml中的配置,即POM文件中的配置会生效。这是由Maven的配置优先级决定的,Maven会首先加载settings.xml文件,然后再加载项目的POM文件。当存在冲突的配置时,POM文件中的配置会覆盖settings.xml的配置。这个优先级设置的好处在于,每个项目可以独立配置自己需要的仓库,而不受全局的settings.xml文件影响。这样做可以更灵活地管理项目的依赖库。
2.3、配置全局的jdk编译语言级别版本(如果不配这个,默认编译级别是1.5,太低,idea运行的会有警告)
<settings>
...
<profiles>
<profile>
<id>jdk8</id>
<activation>
<jdk>8</jdk>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<maven.compiler.compilerVersion>8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
...
</settings>
activeByDefault
属性是用来指定一个profile是否在默认情况下处于激活状态。当设置了一个profile的activeByDefault
属性为true时,该profile将会自动激活,无需手动指定。如果有多个profile设置了activeByDefault
为true,则只有第一个遇到的profile将会生效。maven.compiler.compilerVersion
属性来指定maven插件的编译器版本。
手动指定激活配置方式一:
<settings>
...
<activeProfiles>
<activeProfile>jdk8</activeProfile>
<activeProfile>anotherAlwaysActiveProfile</activeProfile>
</activeProfiles>
...
</settings>
手动指定激活配置方式二:
可以在项目的POM文件中指定使用的profile。可以在<profiles>
元素中使用<profile>
元素的<id>
来指定使用的profile。例如:
<project>
...
<profiles>
<profile>
<id>jdk8</id>
</profile>
</profiles>
...
</project>
3、IDEA绑定Maven
4、Maven 构建生命周期
5、
<scope>依赖范围关键字</scope>
- compile:在所有范围(编译、测试和运行)都有效。如果没有配置scope,默认为compile,就是所有位置可用
- provided:设置jar包在主体main和测试test的位置编译可以使用,运行时不能使用,如 serlet和jsp ,因为在运行阶段tomcat上已经有了这个jar包。(避免冲突)
- runtime:设置jar包在测试test和运行时可用,在主体main不可用,如mysql驱动包在main主体位置编译时不需要, 在target目录运行位置需要
- test:只在测试阶段有效,如 junit;项目打包时就不会包含这个jar包
测试:配置junit的jar包的使用范围为test, 在main主体位置使用junit代码,发现不能使用
6、Maven处理文件的默认规则
① maven会把 src/main/resources 目录中的文件,拷贝到 target/classes 目录下
② maven只处理 src/main/java目录中的.java文件,把这些文件编译为.class文件,并拷贝到target/classes目录中。不处理其他文件
此时需要在pom.xml中加上以下配置:
<build>
<resources>
<resource>
<!--指定资源所在目录-->
<directory>src/main/java</directory>
<!--指定哪些类型的文件也要被扫描-->
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<!--该标签的作用在于,是否将配置文件中的引用变量替换为真实的值,默认为false,故可以省略-->
<filtering>false</filtering>
</resource>
</resources>
</build>
再次编译后: