其他分享
首页 > 其他分享> > (转)Maven使用总结

(转)Maven使用总结

作者:互联网

Maven使用总结

依赖范围

依赖传递

<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>cn.tedu</groupId>
    <artifactId>HelloFriend</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    
    <dependencies>
        <!-- 添加Hello这个项目的依赖快照 -->
        <dependency>
            <groupId>cn.tedu</groupId>
            <artifactId>Hello</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
    
</project>
<dependencies>
        <!-- Junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>compile</scope>
        </dependency>
  </dependencies>

注意

依赖排除

    <!-- Junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>compile</scope>
        </dependency>
        <!-- 添加dubbo依赖的jar,会自动添加spring 2.5版本的依赖 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
        </dependency>
  1. 我们可以在项目HelloFriend排除这个spring的依赖,那么我们就可以不需要改变Hello项目中的依赖了,如下:
    • 这个才是正确的排除依赖的方式
        <!-- SpringMVC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.13.RELEASE</version>
        </dependency>
        
        <!-- 添加Hello这个项目的依赖快照 -->
        <dependency>
            <groupId>cn.tedu</groupId>
            <artifactId>Hello</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <!--排除项目中的spring2.5的依赖,这个不会影响Hello项目中的版本-->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
            </exclusions>
        </dependency>       

依赖原则

依赖路径最短优先原则

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.14</version>
        </dependency>   
    <!-- 添加Hello这个项目的依赖快照 -->
        <dependency>
            <groupId>cn.tedu</groupId>
            <artifactId>Hello</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        
        <!--添加1.2.17版本的log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>cn.tedu</groupId>
            <artifactId>HelloFriend</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

pom文件中申明顺序优先

<!-- 先申明HelloFriend,那么就要使用log4j.1.2.17版本 -->
        <dependency>    
            <groupId>cn.tedu</groupId>
            <artifactId>HelloFriend</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        
        <dependency>
            <groupId>cn.tedu</groupId>
            <artifactId>Hello</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

覆写优先

生命周期

生命周期调用的特点

clean生命周期

default生命周期

生命周期阶段描述
validate 检查工程配置是否正确,完成构建过程的所有必要信息是否能够获取到。
initialize 初始化构建状态,例如设置属性。
generate-sources 生成编译阶段需要包含的任何源码文件。
process-sources 处理源代码,例如,过滤任何值(filter any value)。
generate-resources 生成工程包中需要包含的资源文件。
process-resources 拷贝和处理资源文件到目的目录中,为打包阶段做准备。
compile 编译工程源码。
process-classes 处理编译生成的文件,例如 Java Class 字节码的加强和优化。
generate-test-sources 生成编译阶段需要包含的任何测试源代码。
process-test-sources 处理测试源代码,例如,过滤任何值(filter any values)。
test-compile 编译测试源代码到测试目的目录。
process-test-classes 处理测试代码文件编译后生成的文件。
test 使用适当的单元测试框架(例如JUnit)运行测试。
prepare-package 在真正打包之前,为准备打包执行任何必要的操作。
package 获取编译后的代码,并按照可发布的格式进行打包,例如 JAR、WAR 或者 EAR 文件。
pre-integration-test 在集成测试执行之前,执行所需的操作。例如,设置所需的环境变量。
integration-test 处理和部署必须的工程包到集成测试能够运行的环境中。
post-integration-test 在集成测试被执行后执行必要的操作。例如,清理环境。
verify 运行检查操作来验证工程包是有效的,并满足质量要求。
install 安装工程包到本地仓库中,该仓库可以作为本地其他工程的依赖。
deploy 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程。

Site生命周期

Maven统一管理依赖的版本号

    <!-- SpringMVC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.13.RELEASE</version>
        </dependency>

        <!-- Spring-JDBC,要和spring-webmvc的版本一致 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.13.RELEASE</version>
        </dependency>   
<!-- 使用properties管理版本号 -->
    <properties>
        <!-- 这里的标签体可以任意指定,后续只要使用${}引用标签体即可使用其中定义的内容 -->
        <spring-version>4.3.13.RELEASE</spring-version>
    </properties>
    
    <dependencies>
        <!-- SpringMVC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <!-- version使用${} -->
            <version>${spring-version}</version>
        </dependency>

        <!-- Spring-JDBC,要和spring-webmvc的版本一致 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring-version}</version>
        </dependency>
        
    </dependencies>

继承

步骤

<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>cn.tedu</groupId>
  <artifactId>Hello-Parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
    
  <!-- 使用properties控制版本号 -->
  <properties>
    <junit-version>4.12</junit-version>
  </properties>
  
  <!-- 使用dependencyManagement管理版本 -->
  <dependencyManagement>
    
    <dependencies>
        <!-- Junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit-version}</version>
            <scope>test</scope>
        </dependency>
        
    </dependencies>
  </dependencyManagement>
  
</project>
    <parent>
        <groupId>cn.tedu</groupId>
        <artifactId>Hello-Parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <!-- 使用relativePath指定父工程的相对位置 -->
        <relativePath>../Hello-Parent</relativePath>
    </parent>
        <!-- Junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <!--此时不需要指定version了,因为父工程中已经指定了-->
        </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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- 这里的groupId和父工程中的重复了,因此可以删除 
    <groupId>cn.tedu</groupId>-->
    <artifactId>Hello</artifactId>
    <!-- 这里的version版本也和父工程的重复了,因此可以删除
    <version>0.0.1-SNAPSHOT</version> -->
    
    <parent>
        <groupId>cn.tedu</groupId>
        <artifactId>Hello-Parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <!-- 使用relativePath指定父工程的相对位置 -->
        <relativePath>../Hello-Parent</relativePath>
    </parent>
    
    <dependencies>
        <!-- Junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <!--不需要指定version-->
        </dependency>
    </dependencies>
</project>

聚合

步骤

  1. 创建一个maven工程,打包方式为pom,当然也是可以直接使用父工程
  2. 在pom.xml配置文件中配置module
  3. 详细的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>cn.tedu</groupId>
  <artifactId>Hello-Manager</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  
  <!-- 继承父工程 -->
  <parent>
        <groupId>cn.tedu</groupId>
        <artifactId>Hello-Parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <!-- 使用relativePath指定父工程的相对位置 -->
        <relativePath>../Hello-Parent</relativePath>
    </parent>
  
  <!-- 使用聚合的方式 -->
  <modules>
    <module>../Hello-Parent</module>
    <module>../Hello</module>
    <module>../HelloFriend</module>
    <module>../MakeFriend</module>
  </modules>
  
</project>

原文:https://www.jianshu.com/p/b7d08690d242

标签:总结,依赖,0.0,junit,Maven,使用,HelloFriend,tedu,Hello
来源: https://www.cnblogs.com/-X-peng/p/15306363.html