maven学习笔记

maven的学习:
优势:
1.可以添加依赖,避免了自己下载导入jar包 注意:maven 添加了核心jar包 其依赖包也将被添加。
2.热编译 热部署  意思就是,在你web项目已经运行的时候,修改代码的能直接被web服务器所接受,
就不需要你 重启服务器了,或者重新部署代码了。
3.你可以直接通过maven 打包war或者jar项目。

4.可以实现项目的拆分和聚合。


格式:
公司名称+项目名称+版本+范围(可加可不加)

<groupId></groupId>
<artifactId></artifactId>
<version></version>
<scope></scope>

一,maven的命令
mvn xx
1.clean清理  (将根目录的target目录清理掉 内容为.class文件)
2.compile 编译  将.java文件编译为.class文件
3.test 测试  将src/test/java 目录下的所有单元测试类都进行编译并执行  注:类名必须为xxTest结尾
4.package  打包  web项目打包成war包  java项目打包为jar包  目录为target目录
5.install 安装  解决多个项目共用一个jar包   将jar包存入本地仓库
二,maven的生命周期
三套生命周期  每套生命周期相互独立 互不影响。执行后面的命令前面的命令都执行
1.cleanLifeCycle:清理生命周期
clean
2.deafaultLifeCecle:默认生命周期
compile test package install deploy
3.siteLifeCycle:站点生命周期
site


三,依赖 

<dependencies>  
       <dependency>  
                <groupId>org.springframework</groupId>  
                <artifactId>spring-core</artifactId> 
                <version>3.2.7</version> 
       </dependency>  
</dependencies>

其中,<groupId> </groupId>和<artifactId></artifactId>被称为“坐标”,是为了保证maven仓库的唯一性而定义的。<groupId> </groupId>一般由两部分组成,域(com,cn,org)加公司名。<artifactId></artifactId>项目名,version为版本号。

Dependency Scope 

在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值: 

* compile,缺省值,适用于所有阶段,会随着项目一起发布。 
* provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。 
* runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。 
* test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。 
* system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

依赖范围控制哪些依赖在哪些classpath 中可用,哪些依赖包含在一个应用中。让我们详细看一下每一种范围:

compile (编译范围)

compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath 中可用,同时它们也会被打包。

provided (已提供范围)

provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用。例如, 如果你开发了一个web 应用,你可能在编译 classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;这个Servlet API JAR 由你的应用服务器或者servlet 容器提供。已提供范围的依赖在编译classpath (不是运行时)可用。它们不是传递性的,也不会被打包。

runtime (运行时范围)

runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC
驱动实现。

test (测试范围)

test范围依赖 在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。

system (系统范围)

system范围依赖与provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven 也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个 systemPath 元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的 Maven 仓库中引用依赖)。

依赖继承和依赖传递
1.继承:在Maven中,子项目是可以继承父项目中的依赖的,比如说我们有一个父项目maven-parent,该父项目拥有一个子项目A,如果在父项目中依赖了junit,
那么在子项目A中即便是没有引入junit,在子项目中仍然能够使用junit,因为子项目天然继承了父项目中的junit依赖。
2.传递:?在Maven中,依赖是可以传递的,就是说假设存在三个项目,分别是项目A,项目B以及项目C,假设C依赖于B,B依赖于A,那么我们可以根据Maven项目依赖的特征不难推出项目C也依赖于A。
3.4依赖排除
依赖由于可以传递,假设有三个项目,分别是项目A,项目B依赖于项目A,项目C依赖于项目B,则在项目B的依赖中会有项目A,为了只依赖
项目B,不依赖项目A,就需要排除依赖。例如

<dependency>
    <groupId>B</groupId>
    <artifactId>**</artifactId>
    <version>**</version>
    <exclusions>
        <exclusion>
            <groupId>A</groupId>
            <artifactId>**</artifactId>
        </exclusion>
    </exclusions>
</dependency>

 


四,项目拆分和聚合
父工程:也是一个pom工程,项目需要的依赖信息(控制maven依赖的版本信息),在父工程上定义,子模块来继承父工程。将各个子模块聚合在一起。

子工程:moudel工程,和字面意思差不多,就是父工程的模块。

下面演示一下。

创建父工程

new maven工程。选择Create a simple project

 打包的类型选择为pom类型。finash。

此时maven父工程就创建好了。

打开pom.xml,添加依赖的版本控制。

properties 可以写入版本号,在dependencyManagement中取出。

dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器。

jar的版本判断的两种途径

1:如果dependencies里的dependency自己没有声明version元素,那么maven就

会倒dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果

没有就会报错,告诉你必须为dependency声明一个version

2:如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准。

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.maven</groupId>
  <artifactId>testMaven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <properties>
  	<junil.version>4.12</junil.version>
  </properties>
  <dependencyManagement>
  	<dependencies>
  		<dependency>
  			<groupId>junit</groupId>
  			<artifactId>junit</artifactId>
  			<version>${junit.version}</version>
  			<scope>test</scope>
  		</dependency>
  	</dependencies>
  </dependencyManagement>
</project>

这里并不会真正的引入jar包,只是父工程对总共工程起到统一依赖版本的作用。 

创建子工程

右键父工程

选择Maven Moudule项目 next

 

选择creat a simple pro next 

 

可以看到父工程和项目名都是父工程。finash

 

可以看到testMaven-dao成为了父工程的一个模块。 

再看父工程的pom文件

 

再新建一个testMaven-web, testMaven-service.

 

这就实现了项目的聚合。 

运行方式:Maven方式:

配置tomcat插件

在父工程pom文件加入

<build>
  	<plugins>
  		<plugin>
  			<groupId>org.apache.tomcat.maven</groupId>
			<artifactId>tomcat7-maven-plugin</artifactId>
			<version>2.2</version>
			<configuration>
				<port>8080</port>
				<path>/</path>
			</configuration>
		</plugin>
  	</plugins>
</build>


方式1:运行父工程(tomcat:run)。父工程会自动将各个子模块聚合到一起。将web打war包发布到tomcat 
方式2:直接运行web工程(tomcat:run)

方式3:使用本地tomcat将web工程add到tomcat启动。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值