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>
 
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号