maven-5/10

maven

安装路径:

http://maven.apache.org/downloa/d.cgi

文件内容:

bin:含有mvn运行的脚本
boot:含有plexus-classworlds类加载器框架
lib:含有Maven运行时所需要的java类库
conf:含有settings.xml配置文件
settings.xml 中默认的用户库: ${user.home}/.m2/repository[通过maven下载的jar包都会存储到此仓库中]

配置环境变量

maven环境变量配置,配置方式跟jdk有些类似。

新建环境变量MAVEN_HOME(值为maven的根目录)、然后在PATH环境变量里加入%MAVEN_HOME%\bin;即可。

输入mvn –v进行查看

仓库配置

本地仓库:就是Maven在本机存储构件的地方。maven的本地仓库,在安装maven后并不会创建,它是在第一次执行maven命令的时候才被创建。maven本地仓库的默认位置:在用户的目录下都只有一个.m2/repository/的仓库目录;可以修改

D:/repository/maven

*仓库:包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。开源的Java项目依赖的构件都可以在这里下载到。
*仓库的地址:https://repo1.maven.org/maven2/

私服:是一种特殊的远程仓库,它是架设在局域网内的仓库

maven-5/10

阿里云镜像配置

<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
  </mirrors>

生命周期

maven-5/10

clean 清理

validate

install 打包

site 站点

clean: 主要目的是清理项目(第一生命周期)
pre-clean: 执行一些清理前需要完成的工作
clean: 清理上一次构建生成的文件
post-clean: 执行一些清理后需要完成的工作
default:定义了真正构建时所需要执行的所有步骤,它是生命周期中最核心的部分
validate
initialize
generate-sources
process-sources: 处理项目主资源文件。一般来说,是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中
generate-resources
process-resources
compile: 编译项目的主源码。一般来说,是编译src/main/java目录下的Java文件至项目输出的主classpath目录中target
process-classes
generate-test-sources
process-test-sources: 处理项目测试资源文件。一般来说,是对src/test/resources目录的内容进行变量替换等工作后,复制到项目输出的测试classpath目录中
generate-test-resources
process-test-resources
test-compile: 编译项目的测试代码,一般来说,是编译src/test/java目录下的Java文件至项目输出的测试classpath目录中
process-test-classes
@Test
test: 使用单元测试框架运行测试,测试代码不会打包或部署
prepare-package
package: 接受编译好的代码,打包成可发布的格式,如JAR
pre-integration-test
integration-test
post-integration-test
verify
install: 将包安装到Maven本地仓库,供本地其他Maven项目使用
deploy: 将最终的包复制到远程仓库(私服),供其他开发人员和Maven项目使用
site生命周期: 建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成站点
pre-site: 执行一些在生成项目站点之前需要完成的工作
site: 生成项目站点文档
post-site: 执行一些在生成项目站点之后需要完成的工作
site-deploy: 将生成的项目站点发布到服务器上

pom 详解

<!--固定的-->
<modelVersion>4.0.0</modelVersion>
<!--描述当前项目的组织-->
<groupId>cn.cdqf</groupId>
<!--描述当前项目的唯一id-->
<artifactId>maven_01</artifactId>
<version>1.0-SNAPSHOT</version>
<!--定义打包的方式
jar:默认方式
war: web项目最终打成war包 放在服务器上运行
pom:其它项目的父亲
-->
<packaging>war</packaging>
<!--spring jar包有50个 组织+id+版本
    定义常量
-->
<properties>
    <junit.version>4.12</junit.version>
</properties>
<!--项目所有依赖都写在这里面
       每一个<dependency>就表示一个依赖
    groupId+artifactId+version :精确在仓库中定位一个jar
-->
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <!--依赖范围-->
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
        <!--排除当前jar依赖的某个jar包 一般在jar包冲突的时候使用-->
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

scope介绍

例如:测试时有效依赖

        <!-- 单元测试 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
scope定义了依赖的范围,默认是compile。

compile:编译依赖范围,使用此依赖范围对于编译、测试、运行三种classpath都有效,即在编译、测试和运行时都要使用该依赖jar包;

test:测试依赖范围,只对测试有效,表明只在测试的时候需要,在编译和运行时将无法使用该类依赖,如 junit;

provided:已提供依赖范围。编译和测试有效,运行无效。如servlet-api,在项目运行时,

tomcat等容器已经提供,无需Maven重复引入;

runtime:运行时依赖范围。测试和运行有效,编译无效。如 jdbc 驱动实现,编译时只需接口,测试或运行时才需要具体的 jdbc 驱动实现;

system:系统依赖范围,使用system范围的依赖时必须通过systemPath元素显示地指定依赖文件的路径,不依赖Maven仓库解析,所以可能会造成建构的不可移植,谨慎使用

jar包冲突

SDK (优秀的开源项目),依赖于某些依赖。

使用SDK时,依赖问题

maven-5/10

引入条件:

maven-5/10

maven聚合(重点难点)

创建父模块-packaging标签中pom

<!--定义打包的方式
jar:默认方式
war: web项目最终打成war包 放在服务器上运行
pom:其它项目的父亲
-->
<packaging>war</packaging>

maven-5/10

子工程 utils:

maven-5/10

当子工程dao 中需要引用时:

maven-5/10

面试

Maven常用命令Maven常用命令

  • 编译源代码: mvn compile
  • 编译测试代码:mvn test-compile
  • 清除产生的项目:mvn clean
  • 运行测试:mvn test
  • 打包:mvn package
  • 在本地Repository中安装jar:mvn install
  • 上传项目到远程仓库:mvn deploy(更多是私服,需要用户名密码等认证)
  • 产生site:mvn site 站点,对整个项目的描述,需要加入如下插件
<build>
    <plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.7.1</version>
        <dependencies>
            <dependency>
                <groupId>org.apache.maven.doxia</groupId>
                <artifactId>doxia-site-renderer</artifactId>
                <version>1.8</version>
            </dependency>
        </dependencies>
    </plugin>
    </plugins>
</build>

maven-5/10

游览器打开,详细项目描述-英语
maven-5/10

上一篇:【对线面试官】面试官:小伙子,谈谈单例模式


下一篇:hadoop的一些环境变量配置及namenode无法启动问题解决