Maven笔记

Maven笔记

  • Maven笔记
    • 安装maven
    • maven的目录结构
    • maven脚本命令
    • 名词解释
    • pom文件解析
    • 依赖冲突

安装maven

  • 去官网下载。
  • 解压即可。
    目录结构:
    bin:maven的可执行脚本。
    boot:maven的类加载器框架,maven使用它来加载自己的类库。
    conf:配置文件目录,重要的setting.xml
    lib:maven运行时所用的类库
  • 配置环境变量
    (若果是多人使用的电脑,应在用户变量中配置)
    配置m2_home
    配置path:%m2_home%\bin

maven的目录结构

-src
-main
-test
-resource

-pom.xml

maven脚本命令

mvn compile : 编译 产生的class文件放在生成target文件夹下
mvn test : 执行测试用例
mvn package:打包 在target目录下会看到生产的jar包
mvn clean : 删掉以前生产的target
mvn install : 安装生产的jar到本地仓库。这样其他依赖该jar的项目就可以获取到该jar了。

maven编译的流程是:开始编译–>发现需要依赖–>去项目的pom文件中找依赖的坐标–>先去本地仓库中–>本地仓库如果没有,联网去中央仓库找。

名词解释

  • 构件:maven中用到的依赖包,项目的称呼
  • 坐标:构件的定位表示。groupId+artifactId+version
  • 仓库:顾名思义。分为本地仓库和远程仓库。
    远程仓库的地址是在这里写的:D:\apache-maven-3.3.3\lib\maven-model-builder-3.3.3.jar\org\apache\maven\model\pom-4.0.0.xml中
<repositories>
     <repository> 
     <id>central</id>
      <name>Central Repository</name>       
       <url>https://repo.maven.apache.org/maven2</url>
           <layout>default</layout> 
      <snapshots>
       <enabled>false</enabled> 
      </snapshots> 
      </repository>
       </repositories>
  • 镜像仓库:有时默认的远程中央仓库会很慢,一般我们会用国内的镜像仓库,配置方法是:conf/setting.xml
    <mirrors>
     <mirror>
      <id>maven.net.cn</id>
      <mirrorOf>central</mirrorOf>
      <name>cnResponsitory</name>
      <url>http://maven.net.cn/content/groups/public</url>
    </mirror>

  </mirrors>

地址貌似已经失效

<morrorOf>

中也可以使用通配符

  • 更改本地仓库位置
    默认放在.m2/respository
    修改方法:setting.xml中:
<localRepository>/path/to/loca/repo</localRepository>

改为自己的位置

pom文件解析

<project>
  <!--maven版本的4.0.0是固定的-->
  <modelVersion>4.0.0</modelVersion>
  <!--maven2.0必须是这样写,现在是maven2唯一支持的版本-->
  <!-- 基础设置 -->
  <!-- 坐标 -->
  <groupId>项目名</groupId>
  <artifactId>模块名</artifactId>
  <version>版本号,一般由三个数字组成,大版本号.分支版本号.小版本号+snapshot快照/relaease/GA发布版等</version>
  <packaging>打包方式,默认jar,还有war,zip等</packaging>

  <!-- 非必须的项目描述信息 -->
  <name>项目描述名</name>
  <url>项目地址</url>
  <description>项目描述</description>
  <inceptionYear>...</inceptionYear>
  <licenses>...</licenses>
  <organization>...</organization>
  <developers>...</developers>
  <contributors>...</contributors>

  <!-- 用来对父pom的继承-->
  <parent>...</parent>

  <!-- 依赖列表 -->
  <dependencies>
    <dependency>
        <!-- 依赖的坐标 -->
        <groupId>
        <artifactId>
        <version>

        <type>
        <!-- 依赖应用的范围 -->
        <!-- maven提供了三种classpath,编译,测试和运行。对应的scope提供了6种值compile,provided,runtime,test,system,import。-->
        <scope>test</scope>
        <!-- 设置依赖是否可选,默认false -->
        <optional>true/false</optional>
        <!-- 排除依赖传递列表-->
        <!-- 依赖排除的意思是,A依赖B,B由依赖C。那么A就会把C加到自己的依赖列表中,但是其实A根本用不到C,那么就可以用这个排除-->
        <exclusions>
            <exclusion>
                放要排除的坐标
            </exclusion>
        </exclusions>


    </dependency>
  </dependencies>

  <!-- 依赖管理,并不会真正执行,一般放在父pom中,供子pom继承,子pom中用<parent>继承-->
  <dependencyManagement>...</dependencyManagement>

  <!-- 聚合项目,不用自己一个个编译了-->
  <modules>...</modules>
  <properties>...</properties>

  <!--构建设置 -->
  <!-- 放插件列表 -->
  <build>
    <!-- 例子去maven官网拿的Apache > Maven > Plugins > Apache Maven Source Plugin > Configuring Source Plugin-->
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <outputDirectory>/absolute/path/to/the/output/directory</outputDirectory>
          <finalName>filename-of-generated-jar-file</finalName>
          <attach>false</attach>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <reporting>...</reporting>


  <!-- 环境设置-->
  <issueManagement>...</issueManagement>
  <ciManagement>...</ciManagement>
  <mailingLists>...</mailingLists> 
  <scm>...</scm>
  <prerequisites>...</prerequisites>
  <repositories>...</repositories>
  <pluginRepositories>...</pluginRepositories>
  <distributionManagement>...</distributionManagement>
  <profiles>...</profiles>
</project>
scope值的说明:
compile : 默认,对编译,测试,运行都有效。
provided: 编译+测试。如用在servlet的api上。因为发布时用的web容器已经提供了这些api。
runtimr : 测试 + 运行。 如jdbc
test : 测试
system : 编译 + 测试 ,会管理系统,不可移植
import : 只会用在<\dependencyManagement>中。表示这是引入的依赖。

依赖冲突

maven通过两个原则来解决依赖冲突
1,短路优先
2,先声明优先

你可能感兴趣的:(Maven笔记)