Maven(菜鸟随笔)
(这一切的一切都是个菜b复习后写的总结,有点散,有点乱然而我却视而不见!!!)
Apache公司的开源项目,是一种项目构建工具
这里不单独安装Maven程序,在Eclipse、IDEA中自带。
后面遇到问题再补充
一、Maven…()
1.概述
Maven主要功能:依赖管理和项目构建
传统项目中通常将jar包放入项目下的lib文件夹中,再添加依赖。
Maven中通过配置pom文件进行依赖管理(设置坐标查找对应jar包),jar包存储在仓库中而不
Maven工程之间,可以相互继承..类似于面向对象的继承,可以继承父工程的依赖关系。
是放在项目中。
Maven 可以实现项目的编译 测试 打包 部署一些列操作,通过maven命令来完成。
优点:
可以减少繁琐的jar包拷贝
而且很容易管理jar包的各个版本。
jar包不存储与各个项目,(项目占用空间变小),而且jar包可以被多个项目共用。
2.Maven仓库
1)本地仓库
顾名思义,存储在本地的jar包仓库。
默认位置 : 系统盘\用户\用户名\.m2。
寻找依赖,首先到本地仓库中寻找。
一些常用包扔本地仓库里其实就够我用了,毕竟纯学习。
2)中央仓库
互联网上的仓库(默认在Apache Maven团队维护、在美国服务器上的仓库,没翻墙用户下载死慢),存放几乎所有开源项目的jar包。国内可使用阿里云中央仓库
本地仓库寻找不到jar包,可到中央仓库去寻找下载。
3)私服仓库
和本地仓库处于一个局域网下
本地仓库寻找不到的jar包→到私服仓库寻找
私服仓库也没有→私服去中央仓库或者其他仓库去下载
最后给本地Maven下载请求提供服务。
可以看做本地仓库和外部网络仓库的中间库。
例子:
(想用一样东西,家(本地仓库)里没有,
就近商店(私服仓库)购买,
商店无货到大型批发市场(中央仓库)采购,
商店给顾客提供服务
当然顾客不嫌烦的话可以直接去批发市场去买,
不过相对与国内网络而言,相当于翻过九重山,跨过十条河,才能去买回来一瓶矿泉水。。。
个人来讲:用不到私服服务器,还不如直接翻墙或者使用阿里云中央仓库。
)
4)相关设置
Eclipse 首选项→Maven->用户设置
这里的配置文件不存在,新建一个配置文件,网上搜默认文件内容拷贝进去,或者直接使用下载解压后的maven中settings.xml。
在配置文件中找到mirror 配置
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
应用确定就ok了。
IDEA上的修改也几乎一样就不再说了。
2.Maven项目
1)项目类型
项目类型
pom:用在父级工程或聚合工程中。用来做jar包的版本控制,可以看到本地安装后里面是没有任何jar包或war包的。
jar:将会被打包成jar包。
war:将会被打包成war包。
*显而易见:相关配置文件需要放在打包成war包的工程中,jar包工程中的配置文件打包以后是无法访问到的*
2)项目目录结构
src(src/main、src/test) 项目源码目录不用说。
pom文件:Maven核心配置文件(最重要)
(其他类型 target 输出目录。.settings 相关设置目录 这两个目录不是maven项目结构目录)
其实没啥说的耗。
3)具体创建maven工程项目
学习主要是翻书,和看视频学习,下面具体如何创建工程直接贴黑马taotao商城案例!!!,就不重复劳动了,在此感谢黑马程序员视频库的分享资源,感谢黑马程序员,感谢传智播客,感谢CSDN 话我撩这了,反正你们也看不到
感谢的话说完可以心安理得的盗图了
1 聚合工程的创建(taotao-parent)
这里可以看到Group Id 和 Artiface Id 统称为坐标,Grouop Id这里可以分两段com:盈利性的商业组织,taotao:可以是公司名,你的个人名或者其他什么所属信息,Artiface Id :taotao-parent 表示项目名。由这两个ID可以定位到这个项目(安装到本地仓库后) ,Version 版本,Packaging表名这是一个聚合工程。
2 创建成功后可以看到Eclipse中有了一个taotao-parent项目。
3 右键单击项目名→运行方式→Maven install 将项目安装到本地仓库
本地仓库下 com/taotao 目录(Group Id对应)中多出taotao-parrent(Artifact Id 对应)
到这里一个简单的maven聚合工程就创建完成了,至于Packing pom/war 也没什么不同,Parent Project设置父工程 这里是没有的,Parerent是所有工程的父工程,如果需要指定父工程添加对应id 和version 就行了。
3.Pom文件
直接上示例文件进行分析,选择聚合parrent工程,common工程(公共),Service层(服务层,打成jar包)、web层(打成jar包)
3.1 parrent
实在内容有点多,就只保留一个样式作示例
<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.taotao</groupId>
<artifactId>taotao-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 集中定义依赖版本号 -->
<properties>
<junit.version>4.12</junit.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
知识点:
properties 中定义变量(参数)
下面
junit.version 看做变量名,
4.12看作变量的值,
引用的时候用${变量名} 例如后面的版本号中使用参数 ${junit.version}
<properties>
<junit.version>4.12</junit.version>
</properties>
dependencyManagement:这个标签下的依赖并不会实际添加依赖引入jar包,用来统一设置依赖版本。例如x下面对依赖的单元测试的jar包进行了版本设置。
具体用处。
dependencies(非dependencyManagement下的)下的dependency 中定义依赖相关信息,如果没有定义依赖信息那么将会到dependencyManagement下查找相关 “坐标” 的定义版本。如果有那么继承他,如果没有那么提示错误信息(让定义版本号)。
实际功能:在所有项目的父工程中定义所有依赖的jar包的版本号,让继承了他的所有工程都能省略版本号定义工作。
<dependencyManagement>
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
pluginManagement 和 dependencyManagement类似也用于继承,只不过pluginManagement 是集中定义了插件的版本号。
build 主要用于编译设置
这里不多说,只介绍出现的
build 分为两种 1.全局配置对整个项目起作用(这里使用) 2.对profile配置( profile 标签下)。
finalName:build目标文件的名称(这里定义为工程名)。
plugins : 添加指定的插件。
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
...
</plugin>
</plugins>
<pluginManagement>
</pluginManagement>
</build>
profile:profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。比如说,我们可以通过profile定义在jdk1.5以上使用一套配置信息,在jdk1.5以下使用另外一套配置信息。原文链接
plugins 中 添加plugin(插件)
定义 插件坐标 插件版本
configuration:相关配置信息
encoding:使用的编码
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
3.2 common
公共访问项目,定义了所有项目都能使用到的jar包依赖。父工程是taotao-parent。parent标签中定义
<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>
<parent>
<groupId>com.taotao</groupId>
<artifactId>taotao-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.taotao</groupId>
<artifactId>taotao-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- jar包的依赖 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
...
...
</dependencies>
</project>
3.3 Service
也没有啥,跟前两个比,多了一个自己创建项目的依赖,也是依赖生成后的jar包。
<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>
<parent>
<groupId>com.taotao</groupId>
<artifactId>taotao-manager</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>taotao-manager-service</artifactId>
<dependencies>
<dependency>
<groupId>com.taotao</groupId>
<artifactId>taotao-manager-mapper</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
</dependencies>
</project>
3.4 web
暂时也没觉得啥特殊的过
4.Maven 命令
一些安装,清理,运行命令等都可以通过编译软件Eclipse IDEA 中快捷运行
Eclipse中:选中项目右键run as即可显示。
Idea中更是有Maven命令菜单
这里就不一一总结了。
5.自己遇到的一些问题
1.把整个工作空间拷贝以后,在另一台电脑上用Eclipse打开以后一直提示缺少.project 文件,找了半天没找到解决方法,重新添加项目和模块再把原来工作空间中导入失败的项目拷贝替换就ok了。。。笨方法,但是实在没找到解决方法。
2.配置xml文件时,正确的xml文件总是会报错。。。找了好久发现是,用了taotao商城项目给定的设置好环境的工作空间里面的xsd约束文件的键值映射的 目标文件位置是写的绝对路径而自己电脑中并没有相应的目录。
3.有次用到Websocket导入相应的jar包,将依赖写在common工程中,总是出现错误(记得好像是向页面返回json字符串时报错。)放在web项目下就可以了,应该是包之间相互冲突。