Maven

25 篇文章 0 订阅
18 篇文章 0 订阅

一.Maven四大特性
1.Maven给java引入了一个新的依赖管理系统jar包管理,jar升级时修改相应配置文件即可。
2. 以groupId,artifactId,version组成的Coordination (坐标)唯一标识一个依赖,任何基于Maven构建的项目自身也必须定义这三项属性,生成的包可以是jar包,也可以是war包或者jar包。

<dependency>
       <groupId>com.javax.servlet</groupId>
       <artifactId>javax.servlet-api</artifactId>
       <version>3.1.0</version>
</dependency>

3.坐标的理解: Maven坐标为各种组件引入了秩序,任何一个组件都必须明确定义自己的坐标。
4.groupId: (jar包所在的仓库路径),定义当前Maven项目隶属的实际项目-公司名称。通常一个项目会划分为多个模块,如spring ,spring-mvc,spring-core。
5.artifactId: 该元素定义实际项目中一个Maven模块-项目名
6.version: 该元素定义Maven项目当前所处的版本。

二.多模块构建:
1. 项目复查时 dao(mapper) ,service, controller 层分离,从而将一个项目分解为多个模块。
2. 在Maven中需要定义一个parent POM 作为一组module的聚合POM,在POM中可以使用标签来定义一组子模块。 parent POM 不会有什么实际构建产出。而parent POM中的build配置以及依赖配置都会继承给子module。
3.一致的项目结构: Maven设计之初的理念:Conversion over configuration (约定大于配置)。从而制定了一套项目目录结构作为标准的java项目结构,解决不同ide 带来文件目录不一致问题。
4.一致的构建模型和插件机制:

<plugin>
      <groupId>org.mortbay.jetty</groupId>
       <artifactId>maven-jetty-plugin</artifactId>
       <version>6.1.25</version>
       <configuration>
            <scanIntervalSeconds>10</scanIntervalSeconds>
             <contextPath>test</contextPath>
       </configuration>
</plugin>

三.配置Maven环境变量
1.解压后把Maven的根目录配置到系统环境变量中MAVEN_HOME, 将bin目录配置到path变量中。(maven解压后存放的 目录不要包含中文和空格)
2.检查maven是否配置成功,打开dos窗口,执行mvn -v

四.认识Maven目录结构:
${basedir} : 存放 pom.xml和所有的子目录
${basedir}/src/main/java : 项目的java源代码
${basedir}/src/main/resources :项目的资源,比如说property,mapper等
${basedir}/src/test/java: 项目的测试类,如 JUnit代码
${basedir}/src/test/resources: 测试使用的资源

2.Maven 的 POM.xml 基本配置
<?xml version="1.0" encoding="UTF-8"?>
<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.Vodka</groupId>
    <artifactId>HelloVodka-main</artifactId>
    <version>1.0-SNAPSHOT</version>
<!--    java JDK 版本配置-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>14</source>
                    <target>14</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
<!--项目需要的依赖配置-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
        </dependency>
        	<!--jstl依赖-->
    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-spec</artifactId>
      <version>1.2.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-impl</artifactId>
      <version>1.2.1</version>
    </dependency>

    </dependencies>

</project>

3.可以修改Maven默认仓库的位置,(maven所有的本地jar包都会放在私有仓库里面),其默认位置是当前用户目录下.m2文件夹中。通过修改下面的路径可以修改本地仓库的位置:
-打开Maven目录 -> conf -> settings.xml
添加仓库位置配置:
F:xxxx/repository

-更换阿里镜像,加快依赖下载
<mirror>
     <id> nexus-aliyun</id>
     <mirrorOf>central </mirrorOf>
     <name>Nexus aliyun</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

4.Maven命令
-作为开发利器,了解Maven命令十分有必要,命令格式:
mvn [plugin-name]:[goal-name] (指定某某插件的目标功能)
-常用命令:
mvn -version 显示版本信息
mvn clean 清理项目生产的临时文件,一般是模块下的target目录
mvn compile 编译源代码,一般编译模块下的src/main/java目录
mvn package 项目打包工具,会在模块下的target目录生产jar或war等文件
mvn test 测试命令,或执行src/test/java/下junit的测试用例
mvn install 将打包的jar/war文件复制到本地仓库中,供其他模块使用
mvn deploy 将打包的文件发布到远程参考,提供其他人员进行下载依赖
mvn eclipse:eclipse 将项目转换成eclipse项目
mvn site 生产项目相关信息的网站
mvn dependency: tree 打印出项目的整个依赖树
mvn archetype:generate 创建Maven的普通java项目
mvn tomcat7:run 在tomcat容器中运行工web应用
mvn jetty:run 调用Jetty插件的Run目标在Jetty Servlet 容器中启动web应用

!!!运行maven命令时,首先需要定位到maven项目的目录,也就是项目pom.xml文件所在的目录,否则,必须通过参数来指定项目的目录

5.命令参数:
-D传入属性参数
例如: mvn package -Dmaven.test.skip=true
以-D开头,将maven.test.skip的值设为 true, 该指令打包的时候跳过单元测试。同理,
mvn deploy-Dmaven.test.skip=true , 就是代表部署项目并跳过单元测试。

-P使用过指定的Profile配置:一个项目开发需要多个环境,一般为开发(dev),测试(qa),预发(pre),正式(prod)4个环境。

-profiles 定义了各个环境的变量id, filters 定义了变量配置文件的地址,其中地址中的环境变量就是上面profile中定义的值,resources中是定义哪些目录下的文件会被配置文件中定义的变量替换。

五,Maven环境下构建多模块项目
使用maven 提供的多模块构建的特性完成maven环境下多个模块的项目管理与构建:
以四个模块为例搭建项目:
1. 基模块: maven_parent (POM)
2. 数据库的访问层,例如jdbc操作:maven_dao (jar)
3.项目的业务逻辑层: maven_service (jar)
4.控制层,用于接收请求,响应数据(webapp): maven_controller (war)
(比如: service层调用 dao层的方法, controller层调用service层的方法)

-一个模块要使用另一个模块的方法,就需要在当前模块的pom.xml文件中加入被调用模块的依赖(service层添加Dao层依赖,controller层添加service层依赖,controller层添加service依赖, Dao层添加mysql依赖等等。。。。):
        如service.pom.xml:
   <dependency>
<!--            加入Dao层的依赖-->
            <groupId>com.Vodka</groupId>
            <artifactId>DataAccessObject</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        
<!--加入Servlet依赖-->
     <dependency>
             <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

六,Maven的打包操作:
1.Maven可以通过pom.xml配置的方式来实现打包时的环境选择,相比其他打包工具,简化了很多步骤
2.添加Profile文件配置:

<!--  打包环境配置 开发环境  测试环境  正式环境-->
   <profiles>
       <profile>
            <id>dev</id>
            <properties>
               <env>dev</env>
            </properties>
<!--         未指定环境时,默认打包dev环境-->
          <activation>
               <activeByDefault>true</activeByDefault>
          </activation>
       </profile>
       <profile>
            <id>test</id>
            <properties>
              <env>test</env>
            </properties>
       </profile>
     <profile>
       <id>product</id>
       <properties>
         <env>product</env>
       </properties>
     </profile>
   </profiles>


<!--    设置资源文件配置-->
       <resources>
          <resource>
            <directory>
               src/main/resources/${env}
            </directory>
          </resource>

            <resource>
              <directory>
               src/main/java
              </directory>
              <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
                <include>**/*.tld</include>
              </includes>
              <filtering>false</filtering>
            </resource>
       </resources>

3.打包 : 打开Run/Debug Configurations ,添加要打包的项目目录 ,以及打包命令行:
-clean compile package -Pdev -Dmaven.test.skip=ture (清除缓存,编译,并打包,跳过测试 ,打包成开发版)
-clean compile package -Ptest -Dmaven.test.skip=ture (清除缓存,编译,并打包,跳过测试 ,打包成测试版)
-clean compile package -Pproduct -Dmaven.test.skip=ture (清除缓存,编译,并打包,跳过测试 ,打包成正式版)
-package (简单的打包)

4.依赖的基本配置:
-根元素下projiect下的 dependencies 可以包含多个dependence元素,以声明多个依赖,每个依赖都可以包含以下元素:
1.groupId,artifactId,version: 依赖的基本坐标,Maven根据这仨坐标才能找到相应的依赖。
2.Type: 依赖的类型,大部分情况下不需要声明,默认值为jar
3.Scope: 依赖范围(compile,test,provided,runtime,system(范围与provided一致,慎选,因为不经过Maven仓库解析,可能构建不可移植),Optional,Exclusions)
(provided: 已提供依赖范围,使用此依赖范围的依赖,只对于测试classpath有效,运行时无效。典型例子就是Servlet-api ,编译和测试项目时需要该依赖,但运行该项目时,由于容器已经提供,就不需要Maven重复地引入一遍.
(Optional: 标记依赖是否可选 , Exclusions: 用来排除传递性依赖)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值