本帖最后由 小石姐姐 于 2018-7-31 10:56 编辑
【石家庄校区】Maven知识 Maven概述
概述
Maven是apache下的开源项目,项目管理工具,管理java项目.
1. 项目对象模型(Project Object Model)
POM对象模型,每个maven工程中都有一个pom.xml文件,定义工程所依赖的jar包、本工程的坐标、打包运行方式
2. 依赖管理系统(基础核心)
maven通过坐标对项目工程所依赖的jar包统一规范管理.
3. maven定义一套项目生命周期
清理、初始化、编译、测试、报告 、打包、部署、站点生成
4. 一组标准集合
强调:maven工程有自己标准的工程目录结构、定义坐标有标准.
5. maven管理项目生命周期过程都是基于插件完成的
Maven仓库
1. 中央仓库
远程仓库,maven团队统一维护仓库中的jar包
地址: http://repo1.maven.org/maven2/
2. 本地仓库
相当于缓存,工程第一次会从远程仓库去下载jar包,然后存在本地仓库
下次使用先从本地仓库查找,没有的话在去远程仓库下载
3. 私服
在公司内部架设一台私服,其它公司架设一台仓库,对外公开
Maven环境搭建
maven的官网下载: http://maven.apache.org/download.cgi
本地仓库配置:
1. 创建一个本地仓库的文件夹,用来存储jar包
2. 在maven的安装目录中conf/settings.xml文件中配置:
<localRepository>本地仓库路径</localRepository> //配置了本地仓库
eclipse配置Maven:
先配置Installations:
1. 选择选择菜单windows找到Preferences中的Maven,选择Maven中的Installations,点击add弹出安装目录
2. 点击Directory选择本地的Maven目录,点击finish
3. 勾选自己添加的maven点击apply,然后点击ok就可以了
在配置User Settings:
1. 选择选择菜单windows找到Preferences中的Maven,选择Maven中的User Settings
2. 点击UserSettings(open file)下面文本框后的Browse找到本地maven下的settings.xml文件
3. 点击Reindex在点击Apply按钮最后点击ok就可以了
重建本地仓库索引:
1. 选择菜单 window --> show View,找到Maven选择下面的Maven Repositories
2. 右键Local Repositories下的Local Repository(xx),选择Rebuild Index重新创建索引
Maven入门
创建工程
1. 选择菜单 File ->new -> Other搜索Maven找到它下面的Maven Project点击next
2. 选中第一个复选框Create a simple project(skip archerype selection)跳过骨架,点击next
3. 定义工程坐标(maven对所有工程管理基于坐标进行管理)
Group Id: 的写法是域名反写加上项目名称
Artifact Id: 模块名称 (相当于项目名)
Version: 是版本号; snapshot(快照版,没有正式发行),release(正式发行版本)
Packaging: 要打成什么样的包
4. 输入后点击Finish就可以了
工程目录结构说明:
/src/main/java 主体程序 java源文件(不要放配置文件)
/src/main/resources 主体程序所需要的配置文件(不要放java文件)
/src/test/java 单元测试程序 java源文件
/src/test/resources 单元测试程序所用的配置文件
/target 编译输出目录
pom.xml Maven进行工作的主要配置文件。
设置编译版本
Maven工程默认是JDK1.5,可以修改
把下列代码配置信息粘贴到pom.xml中:
[Java] 纯文本查看 复制代码 <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
注意: 配置完后项目会报错,点击点击工程右键 Maven -> Update Project,弹出窗口后OK,操作后,编译版本改为 1.7
添加依赖
右键点击工程 Maven -- > Add Dependency
项目生命周期(了解)
Maven有三套相互独立的生命周期,分别是:clean、default、site。clean
主要是清理项目、default是Maven最核心的的构建项目、site是生成项目站点。
每一个大的生命周期又分为很多个阶段。后面的阶段依赖于前面的阶段,这点有点像Ant的构建依赖。
生命周期本身相互独立,用户可以仅仅调用生命周期的某一个阶段,也就是说用户调用了default周期的任何阶段,并不会触发clean周期以及site周期的任何事情.
(1)clean周期:
pre-clean:准备清理
clean:真正的清理工作
post-clean:执行清理后的一些后续工作
(2)default周期:
validate:验证
initialize:初始化配置
generate-sources:生成源代码编译目录
process-sources:处理项目主资源文件,复制资源文件到outputclasspath
generate-resources:生成资源目录
process-resources:处理资源文件
complie:编译源代码
process-classes:处理编译后文件
generate-test-sources:生成测试目录
process-test-sources:处理项目测试资源文件,复制测试资源文件到outputclasspath
generate-test-resources:生成测试资源文件
process-test-resources:处理测试资源文件
test-compile:编译测试代码
process-test-classes:处理测试代码
test:单元测试运行测试代码
prepare-package:打包前的准备
package:将编译好的代码打包成为jar或者war或者ear等等
pre-integration-test:准备整体测试
integration-test:整体测试
post-integration-test:为整体测试收尾
verify:验证
install:安装到本地Maven库
deploy:将最终包部署到远程Maven仓库
(3)site周期:
pre-site:准备生成站点
site:生成站点及文档
post-site:站点收尾
site-deploy:将生成的站点发布到服务器上
常见命令
maven通过命令对工程进行清理、编译、测试、打包、部署
执行: 点击工程右键 ,Run As (或Debug As ) -- > Maven Build... 在Goals后的文本框输入命名,点击Run就可以执行相应的命令
常见命令如下:
compile:编译
clean:清理,将target下的class文件清理
test: 执行单元测试类,执行src/test/java下的类
package :将java工程打成jar、war。
install:安装命令,将程序的jar发布到本地仓库(发布到仓库,目录按照本工程定义的坐标生成目录)
tomcat7:run 部署运行tomcat
扩展:
这些命令是对maven原生命令的封装,我们可以在命令行通过下列代码进行编译打包等操作:
mvn 命令名称 运行不调试
mvnDebug 命令名称 调试运行
注意要配置环境变量:
添加MAVEN_HOME 配置的是本地maven的路径
在path中配置 %MAVEN_HOME%\bin
测试Maven环境 ,在控制台输入mvn -v,有信息输出就代表配置成功
创建ssh2工程(重点)
创建war工程
1. 选择菜单 File ->new -> Other搜索Maven找到它下面的Maven Project点击next
2. 选择跳过骨架,点击next
3. 定义工程坐标; 注意打包方式选择war
4. 需要手动添加web.xml
在src /main/webapp 目录下手动创建WEB-INF目录,在这个目录下创建web.xml文件
5. 添加插件(将下列配置拷贝到pom.xml中)
[Java] 纯文本查看 复制代码 <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<!-- 指定端口 -->
<port>8080</port>
<!-- 请求路径 -->
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
6.在pom.xml中添加servlet-api
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
注意:必须指定scope为provided , 这是设置依赖范围
7. 创建页面
添加SSH依赖
添加一些ssh框架需要的一些jar包,需要什么添加什么
ssh工程搭建
1. 建立包结构
2. 添加需要的配置文件
3. 编写映射文件的时候需要在src/main/resources文件下创建跟实体类一样的包结构
定义变量
通过下列标签:
<properties>
<自定义的标签>变量的值</自定义的标签> //可以定义多个
</properties>
可以通过: ${自定义的标签名} //这样的方式获取
聚合与继承
聚合
就是把多个模块或项目聚合到一起,建立一个专门负责聚合工作的Maven 工程。
1.聚合模块本身也做为一个Maven项目,它必须有自己的POM
2.它的打包方式必须为: pom
3.引入了新的元素:modules---module
4.版本:聚合模块的版本和被聚合模块版本一致
5.相对目录:每个module的值都是一个当前POM的相对目录
6.目录名称:为了方便的快速定位内容,模块所处的目录应当与其artifactId一致(Maven约定而不是硬性要求),总之,模块所处的目录必须和<module>模块所处的目录</module>相一致。
7.习惯约定:为了方便构建,通常将聚合模块放在项目目录层的最顶层,其它聚合模块作为子目录存在。这样当我们打开项目的时候,第一个看到的就是聚合模块的POM
8.聚合模块减少的内容:聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/Java、src/test/java等目录,因为它只是用来帮助其它模块构建的工具,本身并没有实质的内容。
9.聚合模块和子模块的目录:他们可以是父子类,也可以是平行结构,当然如果使用平行结构,那么聚合模块的POM也需要做出相应的更改。
继承
让一个子模块继承一个父工程
1.说到继承肯定是一个父子结构,那么我们在父工程中来创建一个parent project
2.<packaging>: 作为父模块的POM,其打包类型也必须为POM
3.结构:父模块只是为了帮助我们消除重复,所以它也不需要src/main/java、src/test/java等目录
4.新的元素:<parent> , 它是被用在子模块中的
5.<parent>元素的属性:<relativePath>: 表示父模块POM的相对路径,在构建的时候,Maven会先根据relativePath检查父POM,如果找不到,再从本地仓库查找
6.relativePath的默认值: ../pom.xml
7.子模块省略groupId和version: 使用了继承的子模块中可以不声明groupId和version, 子模块将隐式的继承父模块的这两个元素
聚合与继承的区别
聚合和继承通常是结合使用的,但是其作用是不同的。
聚合是将多个模块的工程汇聚到一起,而继承则是指明某个模块工程要继承另一个模块功能
构建多模块Maven工程
拆分规则:
1. 按业务模块拆分
2. 按层拆分
创建父工程和子模块:(按层)
父工程的项目名: 项目名_parent
子模块的模块名: 项目名_自定义的模块名
注意: 父工程的打包方式是pom,子模块的打包方式web层的是war,其他的是jar
建立模块依赖关系:
跟添加jar包的操作一样,只不过现在是依赖的另一个模块.
maven有依赖传递
注意: web.xml和struts2和spring的配置文件是放在web层下的
spring配置文件的拆分:
名字: applicationContext_自定义名
注意:
拆分的配置文件放在对应的模块中
需要在web_xml文件中配置applicationContext的读取路径
classpath*:applicationContext*.xml
applicationContext*.xml找寻的是所有已applicationContext开头的配置文件
classpath 和 classpath* 区别:
classpath:只会到你指定的class路径中查找找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.
打包: 选择父工程执行打包命令(package),jar工程的配置文件是被直接打到jar包中的
依赖管理
依赖范围
概述: 用来控制依赖与3种classpath(编译,测试,运行)的关系
依赖范围:
1. compile是编译,测试,运行都会存在(默认就是这个值)
2. provided是在编译和测试有效;比如: servlet-api就是一个典型的例子
3. runtime是在测试,运行有效;比如: jdbc驱动包
4. test是在测试有效;比如: junit
设置依赖范围:
在要进行依赖设置的具体依赖中添加 <scope>依赖范围</scope>
依赖传递
A依赖B,B是A的直接依赖,B依赖C,C是A的传递依
依赖调节原则(了解)
情景再现:
项目A依赖于项目B,项目B依赖于项目C(v1), 项目A依赖于项目D,项目D依赖于项目E,项目E依赖于C(v2),
1、A--->B---->C(v1) ,
2、A------>D---->E----->C(v2)
项目A隐形依赖了两个版本的C,那到底采用哪个版本呢?
分析:
依赖调解第一原则:路径优先,很明显,第一种路径深度是3,第二种路径深度是4,所以,maven会采用C(v1)
依赖调解第二原则:声明优先,假设路径深度相等,那么声明在前的会被引用。
版本锁定
通过这个标签配置: <dependencyManagement> //基本不怎么用
排除依赖(重要)
概述: 就是jar包版本冲突,需要排除低版本的jar包
排除依赖的方法:
在要排除的依赖中添加一个配置
<exclusions>
<exclusion>
<groupId>要排除的依赖的groupId</groupId>
<artifactId>要排除的依赖的artifactId</artifactId>
</exclusion>
</exclusions>
单元测试
需要在工程中添加junit依赖,在src/test/java 下创建测试类进行测试
注意: 打包操作是要求在所有的测试案例都通过的基础上才可进行的.
私服
镜像配置
配置私服,当本地仓库找不到,会去私服找,找不到再去中央仓库找
[Java] 纯文本查看 复制代码 在maven配置文件settings.xml,可以配置多个镜像,如:
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>[url]http://maven.aliyun.com/nexus/content/groups/public/</url>[/url]
<mirrorOf>central</mirrorOf>
</mirror>...
</mirrors>
发布自己的工程jar到私服
在pom.xml中: //配置上传到私服的地址
<distributionManagement>
<repository>
<id>releases</id>
<url>releases仓库地址</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>snapshots仓库地址</url>
</snapshotRepository>
</distributionManagement>
在maven的settings.xml中: //配置访问私服需要的密码
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
注意:settings.xml 配置 <id>和 pom.xml<id> 对应
然后执行命令 deploy,success即可
发布第三方工程jar到私服
很多jar包由于版权等问题,中央仓库中没有,如Oracle驱动
将这些jar包存放到私服:
1.私服选择左侧菜单的Repositories, 在Repositories窗口中选择3rd party
2.在3rd party窗口中选择Artifact Upload
3.在Artifact Upload选项卡中填写坐标,并上传jar包,success即可
私服nexus软件
安装:nexus.bat所在目录 执行cmd命令:nexus install
卸载:nexus uninstall
端口:8081/nexus
svn 版本控制工具
eclipse设置
设置排除文件的类型:
window-preferences-Team-IgnoredResource-AddPattern
添加target,则该目录被排除,不被上传到svn
单模块Maven工程代码签入SVN
1.右键工程 - Team - Share Project
2.右键工程 - Team - 提交
单模块Maven工程代码签出
在SVN Repositories下:右击刷新- 选中项目右击 检出为...
多模块工程签入SVN
1.父工程右击 Team - Share Project ,弹出窗口后的操作同单模块
2.父工程右击 Team - 提交
多模块工程签出
在SVN Repositories下:检出父工程,再依次检出子工程
|
|