Maven是Apache的一款跨平台的项目管理工具。主要服务于基于Java平台的项目。
ant
Maven 的作用:
构建 编译、单元测试、生成文档、打包部署
依赖管理 管理jar包
项目信息管理 项目描述、版本控制系统地之、许可证、缺陷管理系统地址
核心思想:约定优于配置:按照Maven的约定,无序手动配置
2 Maven仓库
中央仓库:http://mvnrepository.com/
3 Maven坐标
groupId:项目名
一般格式:组织类型.组织名.项目名
如:org.apache.struts
artifactId:项目的模块名
如:struts-core
version:版本
约定格式:主版本.次版本.增量版本-里程碑版本
如1.3.4-beta-2
packaging:打包格式。如:jar、war
4 Maven的下载与安装
下载地址:
http://maven.apache.org/download.html
前提: 必须安装了JDK
安装: 不需要安装。解压到指定目录,如:E:\apache-maven-3.3.9
配置环境变量:
M2_HOME E:\apache-maven-3.3.9
PATH %M2_HOME%\bin
查看配置是否正确 : mvn -version
安装eclipse(MyEclipse)的maven插件:
新版本的IDE工具不需要安装插件(自带Maven插件),只需要配置IDE使用本地maven。
5 配置本地仓库
配置Maven使用的本地仓库。当使用Maven首次使用某些jar等资源时,会把相应的jar包下载到配置的本地仓库中。当使用的jar包等资源在本地仓库中存在时,则不需要重新下载,取本地仓库中的资源即可。
配置方式:
E:\apache-maven-3.3.9\conf\settings.xml
5 创建Maven项目
6 Maven项目的目录结构
6.1 POM文件
|
<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.zrgk.mvn.helloword</groupId> <artifactId>mvn_helloworld</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging>
<name>mvn_helloworld</name> <url>http://maven.apache.org</url>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project> |
项目依赖什么jar包,就在pom文件中添加对应的<dependency>配置。
具体配置方式,到maven中央仓库网站查看即可。
配置后的jar包将会被下载到指定的本地仓库中。
6.2 java类编写
|
package com.zrgk.mvn.helloword.mvn_helloworld;
public class HelloWorld {
public String sayHello(){
return "hello world"; }
} |
6.3 测试类编写(使用Junit)
|
import org.junit.Test; public class HelloWorldTest { @Test public void testSayHello(){ HelloWorld hw = new HelloWorld(); String result = hw.sayHello(); System.out.println(result); } } |
6.4 运行程序
1 可以使用原来的Junit方式运行。
2 使用Maven方式运行。(在项目的pom.xml上右键)
6.4.1 编译
初次编译时的报错,需要向JDK中配置编译参数。
6.4.2 运行
选择使用Maven方式运行的好处是: 可以一次性运行所有测试程序。
6.4.3 安装
把程序安装到本地仓库(或远程仓库)
安装后,可以在其他项目中是用。
在其他项目的pom.xml文件中引用。
7 web项目
7.1 web项目骨架选择
7.2 web项目目录结构
在web项目中,比没有提供存放java源代码的目录。需要时,需要手动创建。
7.3 POM文件
|
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zrgk.ssm</groupId> <artifactId>mvn-ssm</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>mvn-ssm Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.0.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.0.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>3.0.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>3.0.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.0.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.0.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>3.0.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.0.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>3.0.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>3.0.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>3.0.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>3.0.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>3.0.7.RELEASE</version> </dependency>
<!-- aspectj --> <dependency> <groupId>aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.5.4</version> </dependency> <!-- 这个jar包直接下载没有成功,使用手动加载的方式加载的这个jar包 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.12</version> </dependency> <!-- mybatis3.3.0 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <!-- pagehelper --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.2.1</version> </dependency> <!-- mybatis和spring整合 1.2.2 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!-- jstl 1.2 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.28</version> </dependency> <!-- dbcp --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency>
<!-- javaEE 5 --> <dependency> <groupId>javaee</groupId> <artifactId>javaee-api</artifactId> <version>5</version> </dependency>
<!-- <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2</version> </dependency> --> <!-- <dependency> <groupId>asm</groupId> <artifactId>asm</artifactId> <version>2.2.3</version> </dependency> -->
<dependency> <groupId>cglib</groupId> <artifactId>cglib-nodep</artifactId> <version>2.1_3</version> </dependency>
</dependencies> <build> <finalName>mvn-ssm</finalName> </build> </project>
|
7.4 jar包不能下载问题
一、问题描述
Maven下载“oracle14-10.2.0.1.0.jar”、“aspectjweaver-1.6.12.jar”、“com.springsource.net.sf.cglib-2.2.0.jar”失败。
二、解决
查询oracle的版本,找到相应的驱动jar包
SELECT * FROM v$version;
因为oracle驱动需要官方授权,因此maven官方库没有oracle jdbc驱动包,无法在pom.xml文件直接配置进行下载。可以通过将驱动包安装到本地maven库解决此问题。具体步骤是:
1.到 http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html 下载你所需要的oraclejar包。
2.在c盘新建oracle文件夹,将下载好的oracle14.jar放到oracle文件夹中。
3.在cmd中运行一下:
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.3.0 -Dpackaging=jar -Dfile=C:/oracle/ojdbc14.jar
4.在pom.xml中添加以下代码:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.3.0</version>
</dependency>
下载“aspectjweaver-1.6.12.jar”
解决方案同上。下载此包的地址:http://maven.outofmemory.cn/org.aspectj/aspectjweaver/1.6.12/
注:在mvn install命令只需修改-DgroupId、-DartifactId、-Dversion、-Dfile即可。
下载“com.springsource.net.sf.cglib-2.2.0.jar”
在maven默认的官方库(http://repo.maven.apache.org/maven2 )没有找到此jar,但是在http://repository.sonatype.org/content/groups/public/ 这个库中有这个jar,因此在eclipse中添加这个库即可,如下:
<repositories>
<repository>
<id>Sonatype</id>
<name>Sonatype Repository</name>
<url>http://repository.sonatype.org/content/groups/public/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
这样,Maven在从默认仓库中找不到此jar后就会从上面的网址中进行下载。
7.5 发布运行
项目部署到服务器中后的结构,和以前创建的web项目部署后的结构是完全相同的。访问方式也相同。
8 继承
当一个项目比较大,模块比较多时,可以把项目拆分成多个项目,再使用maven对这些拆分出来的项目进行统一管理。这样做的好处是,方便维护,也方便分布式部署。
这里以上面的SSM项目为例子,把DAO,Service、Controller、页面信息(包括配置文件) 分别拆成独立的项目。
这里注意,web项目要引用Controller,Controller要引用Service、Service要引用DAO。
所有要依次安装DAO、Service、Controller到本地库,再依次引用。
而在做这些工作时,大家会发现,每个项目都需要配置自己pom.xml文件中的信息。有很多重复工作。我们可以使用继承来解决这个问题。
创建项目 ssm_parent(被继承的项目)
被继承的项目,在创建时不需要使用骨架。
被继承的项目,不需要被打包,这里选择pom即可。
在这个项目的pom文件中配置导入jar包。
其他项目中,使用pom.xml文件来继承这个项目
|
<parent> <groupId>com.zrgk.ssm</groupId> <artifactId>ssm-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../ssm-parent/pom.xml</relativePath> </parent>
<artifactId>ssm-service</artifactId> <packaging>jar</packaging> <!—groupId和 version不再需要—>
|
9 聚合
为什么需要聚合?按照上面的继承方式构建的项目,比如到DAO项目中的代码发生编码时,
需要重新安装项目到本地库。而由于DAO发生了变化,service和controller也需要重新安装。
这样操作比较繁琐,我们可以创建一个聚合的项目来统一管理这些项目的统一编译、测试、打包等操作。
|
<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>
<modules> <module>../ssm_parent/pom.xml</module> <module>../ssm_dao/pom.xml</module> <module>../ssm_service/pom.xml</module> <module>../ssm_controller/pom.xml</module> </modules> <groupId>com.zrgk.ssm</groupId> <artifactId>ssm_manager</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <build/> </project> |