Maven笔记

来源:互联网 发布:通用电气矩阵 编辑:程序博客网 时间:2024/05/23 05:09

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,先声明优先

0 0
原创粉丝点击