Maven
Maven简介
何为Maven:Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、依赖管理和项目信息管理。
Maven是优秀的构建工具:1:自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。2:可以跨平台,无论是Windows上,还是Linux或Mac上,都使用相同命令,
Maven官方下载http://maven.apache.org/ ,下载后需要在path中配置环境变量,一般在配置后就可使用,在dos中输入mvn -v,出现版本信息即为成功
MAVEN原理:
MAVEN的目录结构
/项目目录
pom.xml 用于maven的配置文件
/src 源代码目录
/src/main工程源代码目录
/src/main/java 工程java源代码目录
/src/main/resource 工程的资源目录
/src/main/webAPP web资源文件
/src/test 单元测试目录
/src/test/java
/target 输出目录,所有的输出都存放在这个目录下
/target/classes 编译后的class文件
MAVEN仓库:
就是放置所有jar文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖的jar
分类:Maven仓库分为本地仓库和远程仓库,而远程仓库中有分为中央仓库、私服、其他公共库
私服:一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。中央仓库计算网络资源有限所以各地出现了各自的私服,来降低中心服务器的压力开发者就近原则获取最近的私服,来下载jar包。
优点:节省自己的外网带宽、加速Maven构建、部署第三方构件,提高稳定性,增强控制、降低中央仓库的负荷。
中央仓库:jar包下载太过于分散导致开发人员开发周期延长,maven提供了中央库将所有的jar包聚合在一起
本地库:本地项目开发 如果需要下载jar包 必须依赖maven软件 maven软件需要配置私服的地址 配置本地缓存jar包位置.
java项目通过MAVEN下载所需jar包,从中央库(http://repo1.maven.org)下载太费时间,所以从私服中下载(maven.aliyun.com),而私服则从中央库中
抓取jar包,第一次使用时从中抓取,以后使用可以在本地缓存中找到
注意的是,要在maven中修改仓库的地址,告诉存储jar包的位置.默认的仓库是中央仓库,需要改成私服。同时,在本地中的maven中也会存在一个库,存储项目组已经使用过的jar包,当另一个项目用到相同的jar包时,
就可以在本地抓取,不用二次下载
MAVEN使用
Maven常用命令(在dos中)
mvn archetype:generate :创建 Maven项目
mvn compile :编译源代码
mvn test-compile :编译测试代码
mvn test : 运行应用程序中的单元测试
mvn site : 生成项目相关信息的网站
mvn clean :清除目标目录中的生成结果
mvn package : 依据项目生成 jar文件
mvn install :在本地 Repository中安装 jar
mvn deploy:将jar包发布到远程仓库
mvn eclipse:eclipse :生成 Eclipse项目文件
1:将maven加入eclipse或myeclipes
2创建一个maven项目
创建成功后找到pom.xml文件,其中一些标签的内容如下
1:当前项目依赖某个公司某个项目中的某个版本的jar包
<dependency>
<groupId>公司名</groupId>
<artifactId>项目名</artifactId>
<version>版本号</version>
</dependency>
例:
2:依赖范围(<scope>)
Compile:默认,最终会将引入的jar包打包到war或jar中
System:告诉程序所需jar包在系统的某个位置,最终不会将引入的jar包打包到最后的war或jar中
Provided :相当于servlet要发布到Tomcat中,就不需要Tomcat中jar包
以下是博客中的一些解释:
1. compile:默认的scope。任何定义在compile scope下的依赖将会在所有的class paths下可用。maven工程会将其打包到最终的arifact中。如果你构建一个WAR类型的artefact,那么在compile scope下引用的JAR文件将会被集成到WAR文件内。
2.
3. provided:这个scope假定对应的依赖会由运行这个应用的JDK或者容器来提供。最好的例子就是servlet API。任何在provided scope下定义的依赖在构建时的类路径里是可用的,但是不会被打包到最终的artifact中。如果是一个WAR的文件,servlet API在构建时的类路径里是可用的,但是并不会被打包到WAR文件中。
4.
5. runtime:在runtime scope下定义的依赖只会在运行期可用,而在构建期的类路径下不可用。这些依赖将会被打包到最终的artifact中。比如你有一个基于web的应用需要在运行时访问MySQL数据库。你的代码没有任何MySQL数据库驱动的硬依赖。你的代码仅仅是基于JDBC API来编写,在构建期并不需要MySQL数据库驱动。然而,在运行期,就需要相应的驱动来操作MySQL数据库了。因此,这个驱动应该被打包到最终的artifact中。
6.
7. test:只用于测试变异的依赖(比如JUnit),execution必须定义在test scope下。这些依赖不会被打包到最终的artefact中。
8.
9. system:于provided scope很像。唯一的区别在于,在system scope中,你需要告诉Mave如何去找到这个依赖。如果你要引用的依赖在Maven仓库中不存在时,就可以用这个scope。不推荐使用system依赖。
10.
11. import:从其它的pom文件中导入依赖设置。
3:插件:表示在maven构建中执行的jar名称 插件名 -maven-plugin命名,可以通过jar包中plugins.xml中找到所有的配置定义
例:设置Tomcat的端口号于字符集
3:项目的关系继承:
在创建项目时,选中pom类型,就是父类型。
特点:
只要是在《dependencies》中依赖的jar包,一定会出现在子类中,适合项目开发,而在《dependencyManagement》中出现的,在其子类中可以不出现,可以通过《parent》来找到父类,并通过《dependencies》来选择父类中出现的jar包,适合框架开发
例:父类中定义版本号
例:子类中引用父类中的jar包。
运行或打包:打开eclipse中的Run as ,可以看到一些命令,如果没有运行或打包命令,则打开最后一项,找到MavenBuild自己创建命令,
例:run命令,点击Browse Workspace...选择项目,User settings选择maven的配置文件所在路径,点击run即可
Package命令如上。