Maven的使用入门

1. 检查JDK安装

在安装Maven之前,首先要确认安装了JDK.

2. 下载Maven

点击下载apache-maven-3.6.1-bin.zip,解压文件到指定目录,设置环境变量

3. Maven使用入门

3.1 编写pom.xml

Maven的核心文件是pom.xml.POM(Project Object Model)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等等.

以下为一个pom.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?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>club.swzdl.wechatminiprogram</groupId>
<artifactId>wechatminiprogram</artifactId>
<version>1.0-SNAPSHOT</version>
<name>WeChatMiniProgram</name>

<dependencies>
<!--json-lib-->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>

<!--jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.1.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>

<!--JUnit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>

</dependencies>


<build>
<finalName>WeChatMiniProgram</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>

</pluginManagement>
</build>

</project>
  • 第一行是XML头,指定该XML文档的版本和编码方式.

  • 紧接着是project元素,是所有pom.xml的根元素,声明一些POM相关的命名空间和xsd元素,不是必须的,但是能够让第三方工具帮助我们快速编辑POM.

  • 根元素下的第一个子元素modelVersion指定了当前POM模型的版本,对于Maven2和Maven3,只能是4.0.0

  • 最重要的是包含groupId、artifactId和version的三行.这三个元素定义了一个项目基本的坐标.

    • groupId:定义项目属于哪个组,这个组往往和项目所在的组织或公司存在关联.如果你的公司是mycom,有一个项目是myapp,那么groupId就应该是com.mycom.myapp
    • artifactId:定义当前Maven项目在组中唯一的ID.在myapp中可能为不同的子项目(模块)分配不artifactId,如myapp-util,myapp-web等
    • version:定义当前项目的版本.
    • name:声明了一个对用户更为友好的项目名称,虽然不是必须的,但是推荐使用以方便交流
  • 添加依赖:<dependencies>元素中可以包含多个<dependency>元素以声明项目的依赖.通过groupId,artifactId,version定位一个jar,Maven将从中央仓库下载.JUnit依赖中的<scope>表示依赖范围,如果依赖范围为test,则表示该依赖只对测试有效.如果不声明依赖范围,默认值为compile,表示对主代码和测试代码都有效.

3.2 打包和运行

pom中没有指定打包类型,则使用默认打包类型jar.

1
mvn clean package

执行该命令后,将获得项目的jar包,可以将该jar包复制到其他项目的Classpath中以使用该jar包.

但是如何让其他的Maven项目引用这个jar呢?

需要一个安装的步骤:

1
mvn clean install

此时这个jar包被安装到了本地Maven仓库中.

但是生成的jar包不是可执行的,为了生成可执行的jar包,需要借助maven-shade-plugin,将该插件添加到pom.xml中:

1
2
3
4
5
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.1</version>
</plugin>

然后执行mvn clean install,构建完成后打开target/目录,生成两个jar包,其中original开头的为原始的jar包,另一个为可执行的jar包,执行该jar包:

1
java -jar target ***.jar

3.3 使用Archetype生成项目骨架

手动创建Maven的目录非常麻烦,可以使用maven archetype生成项目的骨架:

如果是Maven 3:

1
mvn archetype:generate

如果是Maven 2:

1
mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate

4. 项目坐标详解

Maven为各种构件引入了秩序,任何一个构件都必须明确定义其坐标,一组Maven坐标通过一些元素定义,分别是:groupId,artifactId,version,packaging,classifier.

  • groupId:定义当前Maven项目隶属的实际项目,一般为域名反向对应.注意要定义到项目级别而不应该只定义到组织级别.如com.sonatype.nexus,而不是com.sonatype
  • artifactId:定义实际项目中的一个Maven项目(模块),使用实际项目名称作为其前缀,如nexus-indexer,使用实际项目名nexus作为前缀.这样的好处是方便寻找构件.
  • version:定义Maven项目当前所处的版本.版本管理后面介绍.
  • packaging:定义Maven的打包方式,默认值为jar
  • artifactId:用来帮助定义构建输出的一些附属构件.不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成.

以上五个元素,groupId,artifactId,version为必须定义的,packaging为可选的,classifier是不可直接定义的

5. 依赖的配置

1
2
3
4
5
6
7
8
9
<dependencies>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<artifactId>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
  • groupId,artifactId,artifactId:基本坐标
  • type:依赖的类型,对应于项目坐标定义的packaging,大部分情况下该元素不必声明,其默认值为jar
  • scope:依赖的范围
  • optional:标记依赖是否可选
  • exclusions:用来排除传递性依赖

大部分依赖声明只包含基本坐标,在一些特殊情况下,其他元素至关重要.对其他元素将在后面的文章介绍

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×