Maven学习笔记

mvn -v 查看maven版本
    compile 编译项目代码
    test 测试代码
    package 项目打包成jar
    clean 删除target (测试报告和编译的字节码文件)
    install 安装jar包到本地仓库中

在maven01 执行mvn install命令后
在maven02的pom.xml添加以下代码 就会去找仓库中是否有此jar包,如果有会加入到项目的classpath中,没有会去网上maven中央仓库去查找,并将其放入本地仓库中。
    <dependency>
        <groupId>com.hx.maven01</groupId>
	<artifactId>maven01</artifactId>
	<version>0.0.1SNAPSHOT</version>
    </dependency>
maven提供的archetype插件,用于创建符合maven规定的目录骨架。
目录规定:src-main-java-主代码 /src-test-java-测试代码
mvn archetype:generate 运行命令后提示输入版本,groupId,artifactId,version,package
mvn archetype:generate -DgroupId:组织名,公司域名反写+项目名 -DartifactId:项目名-模块名 -Dversion:版本 -Dpackage:包名。一次性创建。


坐标

构件
仓库
本地仓库
远程仓库:maven-model-builder-3.3.3.jar\org\apache\maven\model,超级pom.xml文件,
全球中央仓库地址:https://repo.maven.apache.org/maven2
镜像仓库
/conf/setting文件:
<mirrors>  
   <mirror>  
     <id>alimaven</id>  
     <name>aliyun maven</name>  
     <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
     <mirrorOf>central</mirrorOf>          
   </mirror>  
 </mirrors> 
一旦配置了镜像仓库,那么先前的所有配置都会转到镜像仓库中,

修改本地仓库的位置:
<localRepository>D:/Maven/repository</localRepository>
在eclipse中安装maven插件以及创建maven项目:
①在eclipse4.0及MyEclipse中就不需要安装maven插件,在window--preference中可以查看是否有maven插件,没有的话就需要安装Maven插件,直接复制Maven插件到eclipse安装目录中的dropins中,然后修改eclipse.ini,在这个文件里的512m后面添加-vm,换行,再添加jdk/bin/javaw.exe保存。
②eclipse是默认运行在jre之上的而maven需要jdk的支持,需要tools.jar在jdk/lib目录中,所以修改eclipse的JRE,java---Installed JREs--ADD--Next--把本地JDK的目录放到JRE home中,并设置Dmaven.multiModuleProjectDirectory=$M2_HOME--最后勾选JDK
③更改maven本地的配置Installactions---ADD---把本地的maven目录放进去
④修改setting的路径

会出现的问题:
1、如果版本不匹配 则mvn -v查看maven的jdk版本,然后在eclipse中配置当前使用的jdk
2、run as-->Maven build...-->在goals中compile(可以在此处使用其他的命令,如:package)---》run
若报-Dmaven.multiModuleProjectDirectory错误,则在选项-->java--》installed JRES 中设置jdk的参数,
添加上“-Dmaven.multiModuleProjectDirectory=$MAVEN_HOME


完整的项目构建过程包括

清理、编译、测试、打包、集成测试、验证、部署

maven生命周期

clean:清理项目
- pre-clean :执行清理前的工作
- clean:清理上一次构建生成的所有文件
- post-clean:执行清理后的文件
default:构建项目
- compile test package install
site:生成项目站点
- pre-site 在生成项目站点之前要完成的工作
- site 生成项目的站点文档
- post-site在生成项目站点后要完成的工作
- site-deploy发布生成的站点到服务器上

http://maven.apache.org/plugins/index.html
例如:source插件,打包
<build>
    <plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-source-plugin</artifactId>
	<version>2.4</version>
	<executions>
		<execution>
			<phase>package</phase> <!--绑定到的目标阶段-->
			<goals>
				<goal>jar-no-fork</goal> <!--目标方式,无分支-->
			</goals>
		</execution>
	</executions>
	<configuration>
		<outputDirectory>/absolute/path/to/the/output/directory</outputDirectory> <!--输出路径-->
		<finalName>filename-of-generated-jar-file</finalName>
		<attach>false</attach>
	</configuration>
    </plugin>
</build>

pom.xml常用元素

modelVersion  指定了当前pom版本
groupId    反写的公司网址+项目名
artifactId  项目名+模块名
version     版本号  第一个0表示大版本号,第二个0表示分支版本号,第三个0表示小版本号 0.0.1
snapshot快照 alpha内部测试 beta公测 Release稳定 GA正式发布
packaging   打包方式 默认是jar --war zip pom

name       项目的描述名
url       项目的地址
description  项目描述
developers   开发人员信息
licenses    许可证信息
organization 组织信息
 
dependencies 依赖类
    dependency 依赖项
groupId artifactId version type
        scope    依赖范围
        optional  设置依赖是否可选
        exclusions  排除依赖传递列表 
   exclusion

dependencyManagement   依赖管理  不会被运行
    dependencies

build   
  plugins  插件列表(指出坐标)

parent    对父模块的继承
modules   定义多个模块  一起进行编译

maven依赖范围

1.compile:默认范围,编译测试运行都有效
2.provided:在编译和测试时有效
3.runtime:在测试和运行时有效
4.test:只在测试时有效
5.system:在编译和测试时有效,与本机系统关联,可移植性差
6.import:导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置

maven依赖传递

传递依赖:简单讲就是间接依赖关系,比如:B依赖A,C依赖B,那么C也就依赖A了,C和A的依赖关系就是传递依赖。
Maven对于依赖的管理是这样的,当在POM.XML文件中发现配置了,某个依赖,就先去自己本地的依赖仓库中去找对应的依赖,如果没找到,就去Maven的中央依赖仓库中去找,如果还是没找到,就会生气报错。
对于项目而言,比如上面的例子A/B/C我们需要在B的POM.XML依赖关系中配置上A的坐标,并且需要对A进行编译、打包、安装到本地仓库等工作,B才能实现对A的依赖。C依赖与B,并且B依赖与A,C的依赖库里会自动的将A项目的jar包也导进来的。如果我们不想这样,那么就需要用到排除依赖这个标签了<exclusion></exclusion>——此标签就是排除对传递依赖的依赖关系的一种方式。

在settings.xml文件中可以设置maven默认jre版本——使用<profile></profile>标签
<profile>
   <id>jdk-1.7</id>
   <activation>  
      <activeByDefault>true</activeByDefault>
      <jdk>1.7</jdk>  
   </activation>

   <properties>  
      <maven.compiler.source>1.7</maven.compiler.source> 
      <maven.compiler.target>1.7</maven.compiler.target> 
      <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>  
   </properties> 
</profile>

maven依赖冲突

依赖冲突
 不同版本的构件
1.短路优先 C依赖B,B依赖A,A和B都包含同一个不同版本的Jar,则取B的依赖版本
2.先声明先优先 C依赖A和B,A和B都包含同一个不同版本的Jar,谁先声明取谁的依赖版本 如果路径长度相同,则谁先声明,先解析谁
  

maven聚合和继承

聚合:如果项目D依赖项目C,项目C依赖项目B,项目B依赖项目A,我们需要一个个安装这项项目,在Maven中有一种方式可以将多个项目一次性安装,这就是聚合的概念。简单讲就是,需要人工多次操作的,只要MAVEN能理解,一次性告诉他,他就能帮我们做这件单调烦人的事情了。——使用<modules></modules>这个标签
<modules>
   <module>../hx-a</module>
   <module>../hx-b</module>
   <module>../hx-c</module>
</modules>
继承:多次使用到的依赖,比如:单元测试,没有必要在所有的项目中都引用一下,此时就可以采用继承的方式来实现,先来一个父级的POM.XML然后再继承此POM.XML
1. packaging 改为pom。
2. dependencyManagement 中并不提取依赖,只进行统一管理。
3. property中定义了junit版本号,之后可以引用。
4. 父类parent中的main和test没有意义,可以删除。
父类pom:
<packaging>pom</packaging>
<properties>
    <junit.version>3.8.1</junit.version>
</properties>
<dependencyManagement>
 <dependencies>
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>${junit.version}</version>
   </dependency>
 </dependencies>
</dependencyManagement>
子类pom:
<parent>
 <groupId>com.hx</groupId>
 <artifactId>hx-parent</artifactId>
 <version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
   </dependency>
</dependencies>

使用maven构建web项目

1:打开Eclipse
2:创建Maven项目,选择archetype-webapp模板
3:解决Servlet没有生命依赖的问题,在pom.xml中添加servlet的依赖,可以去中央仓库选择servlet版本
例如:
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.0-b01</version>
</dependency>
4:手工完善Maven约定好的目录结构
可以在navigator窗口中手动新建
../src/main/java
../src/test/java
5:Project Explorer中更新项目
6:创建项目的输出目录
build path中设置输出路径output folder,确保每个module都输出在../tartet/classes目录中
7:将Maven项目转换为Web项目
右击-属性-project facets-勾选动态模板(Dynamic Web Module)
8:修改部署时配置去掉多余的配置项例如:测试代码
右击-属性-Deployment Assembly-删除多余的配置项(测试代码)
9:使用package命令打包项目—使用jetty这个插件(在Maven的中央插件库中寻找)作为Web容器,在中央仓库查找jetty的plugin坐标配置到pom.xml中
pom.xml例子:
<build>
  <finalName>webbproject-demo</finalName>
  <plugins>
    <plugin>
      <groupId>org.mortbay.jetty</groupId> 	    |   <groupId>org.apache.tomcat.maven</groupId> 
      <artifactId>jetty-maven-plugin</artifactId>   |   <artifactId>tomcat7-maven-plugin</artifactId>
      <version>2.1.1</version>			    |   <version>2.2</version>
      <executions>
        <execution>
	  <!-- 在打包成功后使用jetty:run来运行jetty服务 -->
	  <phase>package</phase>
	  <goals>
	    <goal>run</goal>
	  </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值