`
yuwenlin2008
  • 浏览: 127296 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

项目管理利器-Maven实战

阅读更多

Maven基于项目对象模型(POM),集项目构建,编译,测试,打包,安装一站式服务。是目前主流的项目开发的管理利器,今天来详细学习下。

一、Maven下载与环境搭建

Maven下载:http://maven.apache.org/download

下载压缩包,解压缩到D盘要目录即可

配置环境变量:

M2_HOME:D:\apache-maven-3.1.1\

Path添加:;%M2_HOME%\bin;

检测maven是否安装成功,打开cmd:mvn -v

如果能看到maven版本信息及jdk信息,就表示安装成功了。

 

二、Maven约定的目录骨架结构

src

    -main

            -java

                   -package

    -test

           -java

                  -package

    -resources

 

三、常用的构建命令

mvn -v 查看版本信息

        compile   编译  编译成功后,会生成target目录

        test         测试  测试成功后,也会在target目录生成测试报告

        package 打包 打包成功后,也会在target目录生成jar包

        clean      清理target

        install      安装jar包到本地仓库

以上构建命令需要运行在jdk上,jre上会报找不到tools.jar

 

四、自动创建目录骨架

在没有集成到eclipse中时,可以使用命令创建项目目录:

1.archetype:generate 按照提示一步一步创建即可

2.archetype:generate -DgroupId=组织名(一般为公司网址反写+项目名)

                                   -DartifactId=项目名-模块名

                                   -Dversion=版本号(SNAPSHOT为快照版,release为发布版本)

                                   -Dpackage=代码所在的包名

 

五、坐标和仓库

坐标:每一个maven项目都由坐标来唯一定位,它有三个元素:

groupId

artifaceId

version

通过这三个元素就能准确找到一个maven项目

 

仓库:由maven管理的项目的所有jar包都在仓库中

仓库分为:

本地仓库

远程仓库(也叫中央仓库)

镜像仓库

我们使用的jar包会首先到本地仓库中去找,找不到会到远程仓库中下载到本地仓库。

 

1.本地仓库

一般我们安装完maven后,会在C盘的用户路径下:C:\Users\Yuwl\.m2有这个m2的文件夹,它就是我们的本地仓库,它下面有一个存放所有jar包的文件夹repository,还有一个settings.xml配置文件,它可以配置我们本地仓库的路径:

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

如,我的存放在D盘,因为C盘重装系统就没了

2.远程仓库

也叫中央仓库,它是maven的仓库,如果所用的jar包在本地仓库找不到,则去去远程仓库中下载,到本地仓库中再使用。

在maven的安装目录我的是D:\apache-maven-3.1.1\lib,下一个jar包:maven-model-builder-3.1.1.jar,以解压缩方式打开能看到有一个pom-4.0.0.xml文件,它里面有中央仓库的url:

 

<repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

 http://repo.maven.apache.org/maven2这就是maven的中央仓库

 

snapshots为false表示下载的为非快照版本,快照版一般为开发版本

3.镜像仓库

所谓镜像,提供其实为中央仓库一样的功能,只不过有时中央仓库访问不了,因为毕竟是国外的,而镜像仓库则是由国内很多厂商提供的,我们使用也很方便,具体用法如下:

修改m2下的settings.xml文件:

在mirrors节点下加入如下配置

 

<mirror>
      <id>maven.net.cn</id>
      <mirrorOf>central</mirrorOf>
      <name>central mirror in china</name>
      <url>http://maven.oschina.net/content/groups/public/</url>
    </mirror>

mirrorOf表示要替换的中央仓库,用了这个配置,那么镜像仓库就会代替我们的中央仓库了。

 

 

六、在eclipse中安装maven插件,创建maven项目

一般现在较高版本的eclipse中都集成了maven插件,不需要单独安装了,没有的话,安装也很简单,这里就不多说了。

使用maven创建java项目:

new->maven project->选择maven-artifact-qickstart->输入groupId,artifactId,package

使用maven创建web项目:

new->maven project->选择maven-artifact-webapp->输入groupId,artifactId,package

我们可以看到maven为我们生成的项目目录结构开始讲的:

src

    -main

            -java

                   -package

    -test

           -java

                  -package

    -resources

webapp项目如果没有生成这样的目录,可自行手动创建

还能看到项目根目录下的pom.xml,这就是maven用来构建项目的配置文件

 

七、pom.xml解析

 

<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.yuwl.maven</groupId>
  <artifactId>maven-demo01</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>maven-demo01</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>3.8.1</version>
      <scope>test</scope>
    </dependency>  </dependencies>
</project>

 <project></project>项目开始结束标签

 

<modelVersion>maven的版本,固定值为4.0.0

<groupId>组织名:一般为公司网址反写+项目名

<artifaceId>模块名:项目名+模块名

<verison>版本:0.0.1-SNAPSHOT为快照版

<packing>打包方式,有jar,war,pom等,默认为jar

<name><url>作用不大

<properties>为配置信息

如下junit的version3.8.1可以配置为:

 

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <junit.verison>3.8.1</junit.version>
  </properties>

使用就可以写成这样:

 

 

<version>${junit.verison}</version>

这样做,所有jar包的版本号可以统一管理,改起来也方便

 

 

<dependencies>为项目依赖,即引用的外部jar包

 

八、Maven的生命周期和插件

生命周期一般包含:清理,编译,测试,打包,安装

即clean compile test package install

我们使用时可以clean到任何一个阶段,如

clean compile 包含test

clean package 包含test,compile

clean install 包含test,compile,package

Maven插件:

在pom.xml中由<buid><plugins>标签管理

 

<build>
  	<plugins>
  		<plugin>
  			<groupId>org.apache.maven.plugins</groupId>
        	<artifactId>maven-source-plugin</artifactId>
        	<version>2.4</version>
        	<executions>
        		<execution>
        			<phase>package</phase><!-- 运行的阶段 -->
        			<goals>
        				<goal>jar-no-fork</goal><!-- 目标 -->
        			</goals>
        		</execution>
        	</executions>
  		</plugin>
  	</plugins>
  </build>

如上是一个生成源码打包的插件,Maven提供了很多丰富的插件,他的很多功能其实都是由插件来实现的。

 

maven自身的插件:http://maven.apache.org/plugins/index.html

还有很多第三方的插件,如jetty,tomcat等

 

九、依赖传递

即 B依赖A C依赖B,那么C依赖A

如果不想C依赖A,就依赖B,也可以做到,如下:

 

<dependency>
    	<groupId>com.yuwl.maven</groupId>
  		<artifactId>maven-demo02</artifactId>
  		<version>0.0.1-SNAPSHOT</version>
  		<exclusions>
  			<exclusion>
  				<groupId>com.yuwl.maven</groupId>
  				<artifactId>maven-demo01</artifactId><!-- 排除传递过来的maven-demo01 -->
  			</exclusion>
  		</exclusions>
    </dependency>

本pom为demo03,依赖demo02,demo02依赖demo01

 

添加<exclusions>即可排除demo01的依赖

 

十、依赖冲突

两个原则:

1.短路优先

A->B->C->X.jar

A->D->X.jar(优先使用)

2.先声明,先使用,按先后顺序来

 

十一、聚合和继承

1.聚合使用<modules>一次性编译,测试,打包,安装

 

<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.yuwl.maven</groupId>
  <artifactId>maven-aggreation</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>maven-aggreation</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  
  <!-- 聚合统一编译,测试,打包,安装 -->
  <modules>
  	<module>../maven-demo01</module>
  	<module>../maven-demo02</module>
  	<module>../maven-demo03</module>
  </modules>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

注意使用聚合时,当前pom的packing必须为pom。

 

 

2.继承,类似java的继承,有父子关系

先建一个parent的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.yuwl.maven</groupId>
  <artifactId>maven-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>maven-parent</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <junit.version>3.8.1</junit.version>
  </properties>
  
  <!-- 本项目中不会起作用 -->
  <dependencyManagement>
  	<dependencies>
	    <dependency>
	      <groupId>junit</groupId>
	      <artifactId>junit</artifactId>
	      <version>${junit.version}</version>
	      <scope>test</scope>
	    </dependency>
  </dependencies>
  </dependencyManagement>

</project>

在这个maven-parent中定义了junit依赖,但本项目不会用到这个依赖,在继承的子项目中会用到

 

<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>

  <artifactId>maven-demo01</artifactId>
  <packaging>jar</packaging>

  <name>maven-demo01</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  
  <parent>
  	<groupId>com.yuwl.maven</groupId>
        <artifactId>maven-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
  </parent>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
  </dependencies>
  
</project>

 使用<parent>maven-demo01继承自maven-parent,可以继承到junit依赖,因此共同的jar包,我们可以放到parent pom中进行管理。

 

十二、Maven创建web项目,并通过插件发布到jeety,tomcat中

新建maven web项目maven-webdemo,pom.xml如下:

<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.yuwl.maven</groupId>
  <artifactId>maven-webdemo</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>maven-webdemo Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
    <dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId><!-- 解决index.jsp报错 -->
		<version>3.0.1</version>
		<scope>provided</scope><!-- 只在编译与测试时运行 -->
	</dependency>
    
  </dependencies>
  <build>
    <finalName>maven-webdemo</finalName>
    <plugins>
    	<plugin>
    		<!-- <groupId>org.mortbay.jetty</groupId>
    		<artifactId>jetty-maven-plugin</artifactId>
    		<version>8.1.16.v20140903</version> -->
    		<groupId>org.apache.tomcat.maven</groupId>
    		<artifactId>tomcat7-maven-plugin</artifactId>
    		<version>2.2</version>
    		<executions>
    			<execution>
    				<!-- 在打包成功后使用jetty:run来运行服务 -->
    				<phase>package</phase>
    				<goals>
    					<goal>run</goal>
    				</goals>
    			</execution>
    		</executions>
    	</plugin>
    </plugins>
  </build>
</project>

 使用jetty:run来运行,或绑定到package命令上来运行都可以。tomcat插件也可以运行。

 

总结

这里仅学习Maven最基本的用法,虽然很基础,但很重要,给日常开发项目带来很多便利,后续再进一步补充。

 

 

 

 

 

 

 

 

2
1
分享到:
评论

相关推荐

    Maven实战.rar

    Maven,一个强大的Java项目管理和综合工具,是开发人员不可或缺的利器。它简化了构建过程,管理依赖关系,并通过标准化的生命周期帮助团队高效协作。本资源“Maven实战.rar”旨在深入探讨Maven在实际开发中的应用,...

    korekto-maven-grader:适用于Maven101练习的Korekto平地机

    在Java开发领域,Maven作为项目管理和构建自动化工具,是开发者不可或缺的利器。korekto-maven-grader正是为帮助开发者更好地理解和实践Maven101基础知识而设计的一款工具,它专为Maven初学者提供了全面的评分与反馈...

    Maven实战

    ### Maven实战:项目管理和自动化构建的利器 #### Maven:解放手工构建的革命 Maven,作为Java社区中不可或缺的一部分,以其强大的项目管理和自动化构建能力,彻底改变了开发者们的工作方式。传统上,手工构建项目...

    maven讲解实战

    通过阅读《Maven实战-Linux公社www.Linuxidc.com整理.pdf》这份文档,可以深入理解Maven在实际项目中的应用和最佳实践。 总的来说,Maven是Java开发中的一把利器,它通过标准化的构建流程和强大的依赖管理功能,...

    JAVA权限管理Maven项目

    5. **Maven**:Maven是Java项目管理的利器,它通过POM(Project Object Model)文件管理项目依赖,自动化构建流程,包括编译、测试、打包、部署等。在开发过程中,Maven帮助开发者统一配置,减少因环境差异导致的...

    maven3实战

    Maven 3 是一个强大的Java项目管理和集成工具,它能够帮助开发人员管理项目的构建、报告和文档,通过使用一种标准化的项目对象模型(Project Object Model,POM)来定义项目依赖关系。在“Maven 3 实战”这个主题中...

    maven.zip

    【Maven:构建Java项目的利器】 Maven是一个强大的项目管理和构建工具...通过阅读《Maven中文指南》和《Maven实战》这两本书,开发者可以深入理解Maven的工作原理,并熟练运用到实际项目中,提升开发效率和代码质量。

    Maven权威指南,学习参考手册

    #### 引言:Maven——自动化构建与项目管理的利器 《Maven权威指南》是一部详尽解读Apache Maven的书籍,由Tim O'Brien、John Casey、Brian Fox、Bruce Snyder、Jason Van Zyl和Juven Xu等多位来自Sonatype Inc.的...

    maven教程,项目教程+源代码,全教程

    ** Maven教程全攻略:项目构建与管理利器 ** Maven是一个强大的Java项目管理和构建工具,它简化了构建过程,统一了构建方式,并通过依赖管理帮助开发者解决类库版本冲突问题。本教程旨在全面讲解Maven的使用,包括...

    maven讲义

    Maven,作为Java项目管理和构建的工具,是开发人员不可或缺的利器。它通过使用一个项目对象模型(Project Object Model,POM)来管理项目的配置信息,自动处理项目的构建、依赖管理和报告生成。Maven的出现极大地...

    Maven视频资料及如何学习心得体会

    Maven,一个由Apache软件基金会开发的项目管理工具,主要功能在于项目构建、依赖管理和项目信息管理。它通过XML格式的配置文件(pom.xml)来定义项目属性和依赖关系,使得开发者能够轻松地构建、测试和部署Java项目...

    maven学习资料

    Maven,作为Java项目管理和构建工具,是开发人员不可或缺的利器。它通过自动化构建过程,简化了项目的构建、依赖管理和文档生成。本资料包中的"Maven实战.pdf"提供了深入的Maven学习指南,帮助开发者更好地理解和...

    maven2 公司培训ppt

    总结,Maven2是Java开发中的利器,通过规范化的项目管理和自动化构建,极大地提高了开发效率。深入理解和熟练使用Maven2的各项功能,对于提升团队协作和项目管理质量至关重要。通过提供的PPT资料,学习者可以逐步...

    [SSH+Maven+Bootstrap视频教程]_第 十三 讲.zip

    接下来,Maven是Java项目管理的利器,它通过POM(Project Object Model)文件统一项目的构建过程,管理依赖关系。Maven可以自动化构建、测试和部署过程,使得团队协作更加高效。在这一部分,你将了解Maven的生命周期...

    Spring_3.x企业应用开发实战 目录

    - **构建Spring项目**:使用 Maven 或 Gradle 进行构建管理。 - **1.9 Spring的子项目** - **Spring WebFlow**:用于构建复杂的 Web 应用流程。 - **Spring Web Services**:简化 SOAP 和 RESTful Web 服务的...

    maven_training

    Maven,作为Java项目管理和构建工具,是Java开发人员不可或缺的利器。它通过使用一种标准化的项目对象模型(Project Object Model,POM),简化了项目的构建、依赖管理和报告过程。本“maven_training”教程旨在帮助...

    X-SpringBoot是一个轻量级的Java快速开发平台,能快速开发项目并交付【接私活利器】.zip

    1. **起步依赖(Starter)**:预配置的Maven或Gradle模块,帮助开发者快速引入所需功能,如数据访问(JDBC、MyBatis)、Web、Actuator(监控和管理工具)等。 2. **内嵌Servlet容器**:内置Tomcat或Jetty,使得应用...

    轻量级java ee企业应用实战(第三版)电子书part4

    5. **Maven项目管理**:Maven是Java项目管理的利器,通过统一的构建过程和依赖管理,使得项目的构建和维护更加简单。书中可能涵盖了Maven的项目结构,POM配置,以及如何利用Maven进行依赖管理和构建。 6. **测试与...

    JFinalDemo.zip

    **Maven** 是一个项目管理工具,它帮助开发者管理和构建Java项目。Maven通过定义项目对象模型(POM),自动化构建过程,包括编译、测试、打包、部署等。在JFinalDemo中,Maven管理项目的依赖关系,确保所有需要的库...

    MyBatis Plus全套学习资料(带源码和笔记)

    1. 引入依赖:在项目中引入MyBatis Plus的Maven或Gradle依赖。 2. 配置实体类:为每个数据库表创建对应的实体类,并添加对应的注解。 3. 配置Mapper:创建Mapper接口,继承BaseMapper接口,无需编写任何XML配置文件...

Global site tag (gtag.js) - Google Analytics