首页 > 技术文章 > Maven使用入门

glensblog 2019-01-18 17:07 原文

Maven使用POM文件管理项目资源,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.example</groupId>
    <artifactId>hello-world</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>Maven Hello World Project</name>
    <description>Maven Hello World Project Demo</description>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.7</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

</project>

项目目录结构如下:

HelloWorld
│  pom.xml
│  
└─src
    ├─main
    │  └─java
    │      └─com
    │          └─example
    │              └─helloworld
    │                      HelloWorld.java                     
    └─test
        └─java
            └─com
                └─example
                    └─helloworld
                            HelloWorldTest.java

pom.xml文件说明:

打包类型:jar和war,默认使用jar类型打包。

 

POM文件中依赖的使用范围可以通过scope元素指定,有如下几种范围:

test: 若scope指定为test,则表示该依赖只对测试代码有效;

compile: 若不声明依赖范围,则默认就是compile,表示该依赖对主代码和测试代码都有效。

 

除了手动构造Maven项目骨架外,一般可以使用archetype快速生成通用项目框架:

mvn archetype:generate

以交互式命令行方式构建Maven项目,过程中需要选择archetype(默认为maven-archetype-quickstart)和输入groupId、artifactId和package名。最后确认信息后会在当前目录下生成一个以artifactId为名的工程目录,该工程与上面手动创建的工程在目录结构上基本一致。

 

Maven核心要素

 

 

 

maven生命周期与插件

当插件目标被绑定到不同的生命周期阶段的时候,其执行顺序由生命周期阶段的先后顺序决定。如果多个目标被绑定到同一个阶段,它们按照插件声明的先后顺序执行。

 

 

Maven常用命令:

mvn clean compile: 

mvn clean test: 执行test之前会先执行compile

mvn clean package: 执行package前会先执行test

mvn clean install: 执行install之前会先执行package

 

查看插件信息

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1 -Ddetail

 

mvn dependency:list 查看当前项目的已解析依赖

mvn dependency:tree 查看当前项目的依赖树,可以查看当前项目的传递性依赖

mvn dependency:analyze 帮助分析当前项目的依赖(由于analyze只会分析编译主代码和测试代码需要用到的依赖,一些执行测试和运行时需要的依赖它就发现不了。)

 

推荐阅读