maven 基础

maven安装链接

maven基础命令:

编译命令:mvn compile

测试命令:mvn test

清空命令:mvn clean

打包命令:mvn package

打包命令:mvn install

package是把jar打到本项目的target下,而install时把target下的jar安装到本地仓库

使用maven创建骨架:

命令:mvn archetype:xxxx

maven的依赖范围<scope>xxxxx</scope>(默认compile):

1、test:只在测试的时候有效,编译和打包都不依赖。

2、compile:在编译范围有效,在编译和打包时都会将依赖打入。

3、provided:编译测试有效,打包时不会打入,如servlet-api.jar,tomcat已经存在,再打入就会jar包冲突

4、runtime:再运行时依赖,编译时不依赖。

依赖的传递:

test范围不会进行传递

1、间接依赖,被依赖的不同项目中的内容处于同一级。则依赖先出现的内容。

假设,某两个项目分别依赖不同版本的同一个项目,而第三个项目又依赖于前两个项目。

如:A-->xx-1.0,B-->xx-1.1,C-->A,B

此时C所依赖的时xx-1.0还是xx-1.1?

此时需要看C先依赖A还是B,即C的pom文件中如果A的依赖在B的前面,则使用A的xx-1.0,A在B后则使用B的xx-1.1

2、依赖级别不同的时候,使用深度最低的那个。

如A-->oo-oo-->xx-1.0,B-->xx-1.1,C-->A,B

此时在C中的pom中无论A和B的依赖顺序如何,C都依赖于B中的xx-1.1,因为A的深度最小。

如A-->xx-1.0,B-->xx-1.1,C-->A,B,同时C的pom中还存在xx-1.2

此时由于C中的xx-1.2的深度最低,所以使用C中的xx-1.2

3、依赖的排除,当出现jar包冲突时使用:

<dependency>
    <groupId>ooo</groupId>
    <artifactId>ppp</artifactId>
    <version>ppp</version>
    <exclusions>
        <!-- 如下就将名字为xxx的jar包排除了,不需要写版本 -->
        <exclusion>
            <groupId>xxx</groupId>
            <artifactId>xxx</artifactId>
        </exclusion>
    </exclusions>
</dependency>

聚合和继承:

聚合:

  当项目存在很多模块的时候,当我们需要对项目模块全部打包的时候,有多少个模块就得打多少次包。于是我们可以采用聚合的方式,新建一个普通的maven项目,将打包集中到一个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>zttc.itat.user</groupId>
    <artifactId>user-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <!-- 导入了三个模块,把这三个模块聚合在一起了 -->
    <modules>
        <!-- 聚合是模块的位置 -->
        <module>../user-core</module>
        <module>../user-log</module>
        <module>../user-service</module>
    </modules>
</project>

继承:

  项目中多个模块都都是用到的东西我们可以将其集中起来,方便我们管理。于是将相同的东西抽象为一个父类,采用继承的方式。

parent中的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>zttc.itat.user</groupId>
    <artifactId>user-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
<dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.1.10.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.24</version> <scope>runtime</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>dbunit</groupId> <artifactId>dbunit</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>org.easymock</groupId> <artifactId>easymock</artifactId> <version>3.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mortbay.jetty</groupId> <artifactId>servlet-api</artifactId> <version>2.5.20110712</version> <scope>provided</scope> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>user-core</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>user-service</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>user-log</artifactId> <version>${project.version}</version> <exclusions> <!-- 可以排除依赖 --> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </dependencyManagement> </project>

其中一个子模块的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>
  <parent>
      <groupId>zttc.itat.user</groupId>
      <artifactId>user-parent</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <relativePath>../user-parent/pom.xml</relativePath>
  </parent>
  
  <artifactId>user-core</artifactId>
  <packaging>jar</packaging>

  <name>user-core</name>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
    </dependency>
    <dependency>
        <groupId>dbunit</groupId>
        <artifactId>dbunit</artifactId>
    </dependency>              
  </dependencies>
</project>

 最终为了方便,我们就将聚合和继承合并:

<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>zttc.itat.user</groupId>
    <artifactId>user-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <url>http://maven.apache.org</url>

    <!-- 导入了三个模块,把这三个模块聚合在一起了 -->
    <modules>
        <!-- 聚合是模块的位置 -->
        <module>../user-core</module>
        <module>../user-log</module>
        <module>../user-service</module>
    </modules>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.10</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>4.1.10.Final</version>
            </dependency>
                        ...........
        </dependencies>
   </dependencyManagement>
</project>

 

原文地址:https://www.cnblogs.com/wangmingshun/p/5683008.html