MAVEN的搭建及使用

一、maven概念

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具和构建工具。基于java,使用必须有jdk

作用:项目的打包,部署,管理项目的jar包

Maven的优势

  1. 约定优于配置 不用配置,固定死

  2. 简单

  3. 测试支持

  4. 构建简单

  5. CI集成 jenkis

  6. 插件丰富

二、maven环境搭建

1.maven的下载配置

 

设置环境变量 

 

测试安装及环境变量设置

 2.本地及中央仓库迁移

需要了解的知识:

仓库repository
本地仓库: 程序员的个人电脑上<localRepository>D:/.m2/repository</localRepository>
远程仓库:
    私服  局域网服务器仓库(自己公司的服务器nexus)
    中央仓库  放各种版本各种可能会用到的jar文件(需要的配置文件需要在中央仓库下载)
                    maven中央仓库
                    apache中央仓库
                    阿里云的中央仓库

使用前需要修改settings.xml的3个位置 :
          1.本地仓库的位置(c盘----其他盘符)  程序员windows家庭版(影音娱乐使用)----》windows10 专业版
          2.中央仓库的位置(默认---》阿里云的)
          3.jdk的使用版本 (默认1.5--》1.8)

本地仓库默认的地址:

settings.xml

(1)修改本地仓库的位置

<localRepository>D:/.m2/repository</localRepository>

(2)修改中央仓库的位置(这里使用的是阿里云的中央仓库,要知道,使用默认的仓库下载文件会非常慢)

<mirror> 
    <id>alimaven</id> 
    <name>aliyun maven</name> 
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
    <mirrorOf>central</mirrorOf> 
</mirror>

(3)maven默认使用编译器: maven3使用jdk1.5, maven2 jdk1.3这些版本都太低了。我们可以修改

一种方式修改每个工程pom文件,这样每次新建maven工程都要设定

另外一种方式直接修改settings.xml

<profile>
    <id>jdk-1.8</id>
    <activation><jdk>1.8</jdk></activation>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>
</profile>

三、使用eclipse中的maven

1.eclipse使用maven环境配置

这里查看我们配置后修改的本地仓库的位置

2.使用eclipse创建maven项目helloworld

maven坐标:使用jar包,依赖该jar包需要通过坐标GAV

G: group 组织、公司名 org.lanqiao com.mysql org.apache

A: artifact 模块名,项目名字 ssm spring-aop spring-beans

V:version:版本号 0.0.1-SNAPSHOT快照版

注:

3.使用eclipse创建maven web项目

解决eclipse创建Maven项目后无法生成src/main/java资源文件夹的方法

在项目上右键选择properties,然后点击java build path,在Librarys下,编辑JRE System Library,选择workspace default jre。

tomcat7插件

<build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <!--控制tomcat端口号 --> <configuration> <port>8080</port> <!-- 发布到tomcat后的名称 --> <!--/ 相当于把项目发布成ROOT --> <path>/</path> <uriEncoding>UTF-8</uriEncoding> </configuration> </plugin> </plugins> </build>

4.使用eclipse创建空骨架的工程

使用mvn package命令可以打包成指定的jar(一般应用程序) 或者war(web应用程序)

六、maven常用命令、生命周期

mvn clean 清除项目目录中的生成结果 清理周期

默认生命周期

mvn compile 编译源代码

mvn test-compile 编译测试源代码

mvn test 运行应用程序中的单元测试

mvn package 根据项目生成的jar,war

mvn install 在本地Repository中安装jar

mvn deploy 发布项目

mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类

依赖
(1)依赖的三要素,坐标(查找jar文件)
      G: groupId  组织、公司名域名倒叙 +项目 org.lanqiao  com.mysql  org.apache.tomcat
      A: artifactId  模块名/项目名字  ssm   spring-aop  spring-beans
      V:version:版本号  0.0.1-SNAPSHOT快照版               

     通过依赖的GAV查找jar ---在本地仓库(远程仓库)查找

(2)统一的版本管理

<properties>
    <spring-version>5.3.0</spring-version>
    <junit-version>4.2</junit-version>
</properties>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit-version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring-version}</version>
    </dependency>
</dependencies>

 (3)依赖的范围
  <scope>test</scope>
   compile默认
   test
   runtime
   provided
     
                          编译时   测试时   运行时
   
   compile            V           V           V
   test                  X            V           X
   runtime           X            V           V
   provided          V           V           X

(4)依赖的传递
   pom.xml中导入一个依赖A.jar    ---B.jar  ---c.jar  ---d.jar
              maven会自动的把A.jar依赖的B.jar导入进来

  (5)依赖冲突的问题
      A.jar   ---   B.jar ---- C.jar
      H.jar  ----  C.jar
     maven如何解决?2种原则
     a.最短路径原则
      A.jar   ---   B.jar ---- C.jar  路径长,所以不会导入
                         |
      H.jar  ----  C.jar   路径最短,所以会导入该C.jar
     b.顺序原则
      A.jar   ----  C.jar //A先定义,就加载该C.jar
      B.jar   ----   C.jar
     2个路径长度一样,按照依赖在pom.xml中的定义顺序来加载,谁先定义就加载谁的

      手动去除依赖
    

  <dependency>
    <groupId>a</groupId>
    <artifactId>a</artifactId>
    <version>1.0</version>
                //排除c依赖,原a.jar需要c.jar,通过这个设置,不会自动导入c.jar
    <exclusions>
        <exclusion>
            <groupId>c</groupId>
            <artifactId>c</artifactId>
        </exclusion>
    </exclusions>
    </dependency>

    日志框架
    很多框架都会有日志框架,可能会照成冲突,可能会把自己一些依赖的日志框架排除

<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>org.lanqiao</groupId>
	<artifactId>mvn_web1</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<properties>
		<spring-version>4.3.12.RELEASE</spring-version>
	</properties>
	<dependencies>
	     <!-- 文件上传 -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.4</version>
		</dependency>
		<!--单元测试 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- log4j日志包 -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		<!-- jsp和servlet的依赖包 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>javax.servlet.jsp-api</artifactId>
			<version>2.3.3</version>
			<scope>provided</scope>
		</dependency>
		<!-- jstl -->
		<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.48</version>
		</dependency>

		<!-- 谷歌工具包guava -->
		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>18.0</version>
		</dependency>
		
		<!-- spring context包依赖core,beans,expression,aop,common-logging包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring-version}</version>
		</dependency>

		<!-- spring webmvc包依赖web包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<!-- spring jdbc包依赖tx包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<!-- aop织入包(声明式事务aop使用) -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.9.4</version>
		</dependency>

		<!-- mybatis依赖包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.2</version>
		</dependency>

		<!-- mybatis整合spring包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.3</version>
		</dependency>
		<!-- druid数据源包 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.20</version>
		</dependency>


	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>2.2</version>
				<!--控制tomcat端口号 -->
				<configuration>
					<port>8080</port>
					<!-- 发布到tomcat后的名称 -->
					<!--/ 相当于把项目发布成ROOT -->
					<path>/</path>
					<uriEncoding>UTF-8</uriEncoding>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值