当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
<?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.tur</groupId> <!-- 我们的项目的 gorupId,相当于公司名称 -->
<artifactId>Avatar</artifactId> <!-- 我们的项目的 artifactId,相当于项目的名称,一个公司下可以有多个项目 -->
<version>1.0-SNAPSHOT</version> <!-- 我们的项目的版本号 -->
<!-- 定义变量,这里定义 mysql 的 jar 包的版本号,当需要更换版本的时候,直接修改这里。
当同一个变量被多个地方引用时,变量的优势就体现出来了 -->
<properties>
<mysql.version>5.1.21</mysql.version>
</properties>
<dependencies>
<!-- 定义要下载的 jar 包的坐标,Maven 用它来找到要下载的 jar 包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
<scope>compile</scope> <!-- 如果不写 scope,那么就用默认值 compile -->
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
</project>
在 POM 4 中,
compile
:缺省值,适用于所有阶段,会随着项目一起发布。provided
:类似 compile,期望 JDK、容器或使用者会提供这个依赖,既是打包的时候这个 jar 包不会被一起打包,如 servlet.jar,因为 Web Server 都会提供这个 jar 包,所以就不需要和项目一起发布了。runtime
:只在运行时使用,如 JDBC 驱动,适用运行和测试阶段,如有 2 个 jar 包,一个是编译时用,一个是运行时用。test
:只在测试时使用,用于编译和运行测试代码。不会随项目发布。system
:类似 provided,需要显式提供包含依赖的jar,Maven 不会在 Repository 中查找它。Maven 仓库
: search.maven.org
例如 spring, org.springframework,spring-webmvc, 找到我们需要的 GroupId 和 ArtifactId,点击图一里红框中的版本链接,在新打开的页面的图二中红框部分就是我们需要的依赖的信息:
在网上看别人的源码的时候,如源码里用到了类 org.springframework.web.bind.annotation.RequestMapping
,但是没有说这个类在哪一个 jar 包里,或者这个 jar 包去哪里下载。如果我们找不到这个类所在 jar 包并加入到项目的 CLASSPATH,就不能运行这个程序。这里我们介绍一个小技巧,通过类名找到这个类所在的 jar 包并用 Maven 下载下来。
Advanced Search
Classname
中输入类名或者类的全路径(包含包路径)