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、Maven的依赖范围

jar的使用有三种不同的位置:编译位置(main),测试位置(test),运行时位置(target)

<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>

再次编译后:

posted @ 2021-11-26 22:42  danielzzz  阅读(44)  评论(0编辑  收藏  举报