Maven

Maven入门

安装步骤

1.解压Maven的压缩文件
2.配置环境变量 MAVEN_HOME (将第一步解压的文件所在的路径设置进去)
3.在Path变量中配置 %MAVEN_HOME%\bin
以上就完成了安装,具体成功与否可以在DOS命令行中使用 mvn -n 测试

MAVEN的仓库

1.本地仓库:在setting.xml中配置,默认在${user.home}/.m2/repository中
2.远程仓库(私服):公司内部局域网的仓库
3.中央仓库:网络上的仓库
本地->私服->中央

注:修改本地仓库默认地方,可以在setting.xml中复制/path/to/local/repo并修改中间的路径即可

MAVEN项目的目录结构

src/main/java 核心代码部分
src/main/resources 配置文件部分
src/test/java 测试代码部分
src/test/resources 测试配置文件
src/main/webapp 前端页面资源

MAVEN常用命令

MAVEN的默认生命周期
mvn conplie 将核心代码部分编译到target文件下的classes中
mvn test 将所有(核心+测试)代码编译到target文件
mvn package 将项目编译并打成war包到target文件
mvn install 将项目编译并打成war包到target文件,然后安装到本地仓库
mvn deploy 发布

mvn clean 清除target文件

tomcat:run 启动tomcat

pom.xml的信息

项目自身信息

项目运行所依赖的jar包信息(Dependency)

公司组织的名称
项目名
版本号

项目运行环境信息,比如:jdk,tomcat信息


IDEA集成Maven

步骤

setting –> 搜索Maven –> 修改默认的配置为自己本机的maven路径即可

创建项目

1.java项目
 选择Maven,可以选择骨架 quickjava,也可以直接不选骨架

2.javaweb项目
 选择Maven,可以选择骨架 webapp

出现的问题

问题一:

首先,我想用maven启动tomcat运行我的一个项目,却出现了ClassCastException
**原因**:在pom.xml中导包和在tomcat自带的lib文件中的包产生了冲突

**解决方案**:使用 <scope>provided<scope>标签,使其在打包的时候不打包进去。

问题二:tomcat的版本问题

org.apache.jasper.JasperException: Unable to compile class for JSP 
这个问题的原因是因为我是用的事jdk1.8,
而maven默认使用的是tomcat6,6是不支持1.8版本的

**解决方法**:
在<bulid></bulid>里边添加
<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.2</version>
</plugin>
此时使用tomcat7:run命令就可以了

scope详解

scope的分类

1.compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去

2.test:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit

3.runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段

4.provided:打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作

5.system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径

scope的依赖传递

A依赖B,B依赖C。当前项目为A,只当B在A项目中的scope,那么c在A中的scope是如何得知呢?
当C是test或者provided时,C直接被丢弃,A不依赖C;(排除传递依赖)
否则A依赖C,C的scope继承与B的scope