maven功能介绍

1.maven的作用:将项目规范化,分为“代码区域”,“配置区域”,“测试配置区域”,“测试区域”,将响应的代码编写到对应的区域即可,之后在pom.xml文件中配置项目相关的配置。

依赖配置:依赖由groupId(组名:一般为公司/组织域名标识),artifactId(唯一id项目名单次之间用下划线隔开),version(版本)构成。任何maven项目都是这种结构,所以本项目本身也是这种结构,依赖引用第三方的项目时也用这种结构引用,然后maven会主动先去本地仓库找找不到会去中央仓库找,仓库的配置在下载的maven中conf文件夹下的setting.xml中配置。

2.基本配置完成后,直接打开命令行定位到项目根目录下(target目录平级的地方)此时就可以执行命令了:

1.打包:mvn clean package  表示打包项目,执行成功后会在target目录下生成项目的jar文件。

 

 

 

 

 

 

2.执行测试命令 mvn clean test

 

 3:先清理后编译: mvn clean compile 此命令执行后会将target文件夹下所有东西先删除,然后在编译主代码

 

 

 

 

4.安装命令:mvn clean install 先清理后安装,此命令执行后会将jar包直接安装到本地的maven仓库中

 

 

 

 

 我们已经体验了Maven最主要的命令:mvn clean compile、mvn clean test、mvn clean package、mvn clean install。执行test之前是会先执行compile的,执行package之前是会先执行test的,而类似地,install之前会执行package。可以在任何一个Maven项目中执行这些命令,而且我们已经清楚它们是用来做什么的。

6.查看当前已解析依赖  mvn dependency:list

 

 7.将当前已解析依赖作为顶层依赖,依赖的上层依赖作为叶子节点展现出来 mvn dependency:tree

 

 

 

8. mvn dependency:analyze   查看当前项目编译,测试状态下使用的为显式声明但使用的依赖于已显式声明但没用到的依赖:

 

该结果中重要的是两个部分。首先是Used undeclared dependencies,意指项目中使用到的,但是没有显式声明的依赖,这里是spring-context。这种依赖意味着潜在的风险,当前项目直接在使用它们,例如有很多相关的Java import声明,而这种依赖是通过直接依赖传递进来的,当升级直接依赖的时候,相关传递性依赖的版本也可能发生变化,这种变化不易察觉,但是有可能导致当前项目出错。例如由于接口的改变,当前项目中的相关代码无法编译。这种隐藏的、潜在的威胁一旦出现,就往往需要耗费大量的时间来查明真相。因此,显式声明任何项目中直接用到的依赖。

结果中还有一个重要的部分是Unused declared dependencies,意指项目中未使用的,但显式声明的依赖,这里有spring-core和spring-beans。需要注意的是,对于这样一类依赖,我们不应该简单地直接删除其声明,而是应该仔细分析。由于dependency:analyze只会分析编译主代码和测试代码需要用到的依赖,一些执行测试和运行时需要的依赖它就发现不了。很显然,该例中的spring-core和spring-beans是运行Spring Framework项目必要的类库,因此不应该删除依赖声明。当然,有时候确实能通过该信息找到一些没用的依赖,但一定要小心测试。

 

 

5.用命令创建一个maven项目:maven-archetype-quickstart 此命令运行后首次会下载很多jar包,接着会让你选择一个模板共1~8中直接不用管回车,然后会让你依次输入:groupId,确认回车,在接着输入:artifactId....直到输入完成就会在当前目录下生成一个maven项目。

 

 

 

 

 

 maven依赖范围的传递性

1.可选依赖:可选的依赖不会被传递如:<optional>true</optional>表示此依赖可选。只在当前项目有效,因此当前项目的下级依赖需要此依赖时可单独引用。

2.排除依赖:排除某个传递依赖:<exclusions></exclusions>

 

<dependency>
            <groupId>com.mr.li</groupId>
            <artifactId>text_a</artifactId>
            <version>1.0.1</version>
            <exclusions>
                <exclusion>
                    <groupId>排除text_a中依赖的某个groupId</groupId>
                    <artifactId>排除text_a中依赖的某个artifactId</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

 

 

 

3:统一定义版本号:在<properties></properties>标签中定义版本号,在使用的地方直接使用"${}"引用即可。

 

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8
        </project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <junit.version>4.7</junit.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        
    </dependencies>

 

 

 

4.依赖传递优先级:当a -> b -> c1.0 , a -> c2.0 时,解决问题的2种方式:第一种右maven自动选择,第二种将使用排除依赖<exclusions></exclusions>将c1.0给排除了,然后在当前依赖引入c2.0.

maven依赖优先级:1.选择最短步骤的依赖版本,若两个依赖步骤一样多的选择在pom文件中声明在前的依赖。这也是为什么有时候将pom中引入坐标的前后顺序换了就会出问题的原因。

 5.maven生命周期:

-1.clean生命周期

  clean生命周期的目的是清理项目,它包含三个阶段:

  1)pre-clean执行一些清理前需要完成的工作。

  2)clean清理上一次构建生成的文件。

  3)post-clean执行一些清理后需要完成的工作。

-2.default生命周期:

  

 

 

 

 

 

 http://maven.apache.org/guides/introduc-tion/introduction-to-the-lifecycle.html。

3.site生命周期

 

 

 

 

 

 

 

maven中有很多的插件,各个插件可以完成各自的工作,插件配置如下:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>    此插件的groupId
                <artifactId>maven-antrun-plugin</artifactId>    此插件的artifactId 
                <version>1.3</version>
                <executions>
                    <execution>
                        <id>ant-validate</id> 插件的执行id
                        <phase>validate</phase> 插件的执行阶段(validate阶段存在于defult生命周期阶段)
                        <goals>
                            <goal>run</goal> 执行目标
                        </goals>
                        <configuration> 特定的配置
                            <tasks>
                                <echo>I'm bound to validate phase.</echo> 在命令行中输出此句话
                            </tasks>
                        </configuration>
                    </execution>
                    <execution>
                        <id>ant-verify</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <echo>I'm bound to verify phase.</echo>
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

上面演示了如何在pom中引入插件,而当我们用到插件时需要去寻找一般在apache官网:http://maven.apache.org/plugins/index.html,单击某个插件的链接便可以得到进一步的信息。所有官方插件能在这里下载:http://repo1.maven.org/maven2/org/apache/maven/plugins/。

除了Apache上的官方插件之外,托管于Codehaus上的Mojo项目也提供了大量了Maven插件,详细的列表可以访问:http://mojo.codehaus.org/plugins.html。需要注意的是,这些插件的文档和可靠性相对较差,在使用时,如果遇到问题,往往只能自己去看源代码。所有Codehaus的Maven插件能在这里下载:http://repository.codehaus.org/org/codehaus/mojo/。

 

 在描述插件的时候,还可以省去版本信息,让Maven自动获取最新版本来进行表述。例如:

$mvn help:describe-Dplugin=org.apache.maven.plugins:maven-compiler-plugin

 

进一步简化,可以使用插件目标前缀替换坐标。例如:

$mvn help:describe-Dplugin=compiler

 

如果想仅仅描述某个插件目标的信息,可以加上goal参数:

$mvn help:describe-Dplugin=compiler-Dgoal=compile

 

如果想让maven-help-plugin输出更详细的信息,可以加上detail参数:

$mvn help:describe-Dplugin=compiler-Ddetail

 

如果在命令行运行mvn-h来显示mvn命令帮助。

 

posted @ 2022-02-10 21:03  ~~mr.li~~  阅读(559)  评论(0编辑  收藏  举报