1 Maven
Maven 是一个 Java 项目管理和构建工具,它提供了:
- 标准化的项目结构
- 标准化的构建流程
- 依赖管理:它使用
pom.xml
文件定义项目内容,该文件只需声明依赖项,而Maven会自动下载该依赖项并导入到classpath
中
Maven 使用如下图所示早已预定好的目录结构:
1.1 依赖管理
1.1.1 pom.xml
文件结构
-
pom.xml
是一个 XML 文件,它的 根元素 是<project>
-
使用
<groupId>
、<artifactId>
、version
表示当前项目的唯一标识 -
<packaging>
标签表示打包方式,《maven之packaging标签》- 默认指定为
jar
,表示项目打包成一个jar
包,jar
包就是 java 的类进行编译生成的class
文件就行打包的压缩包而已,里面就是一些class
文件。在其它项目引用该jar
包时,该jar
包依赖的其它jar
包也要同时引用。 - 指定为
war
,表示项目打包成一个war
包,与jar
包不同在于,它会将项目中依赖的所有jar
包都放在WEB-INF/lib
这个文件夹下,因此war
包非常适合部署时使用,不再需要下载其他的依赖包,能够使用户拿到war
包直接使用(放在 tomcat 的webapps
目录下,启动即可) - 构建聚合工程的时候,父级项目的
POM
文件的<packaging>
标签必须显式声明为pom
,父级的pom
文件只作项目的子模块的整合,在maven install
时不会生成jar/war
压缩包。
- 默认指定为
-
<properties>
标签用于定义一些用于 XML 文件的一些变量 -
<dependencies>
标签用于描述依赖信息
有时候Maven默认创建的项目使用 JDK1.5
,在 <properties>
中添加
<java.version>1.8</java.version>
<!-- 表示源代码使用 1.8 格式 -->
<maven.compiler.source>1.8</maven.compiler.source>
<!-- 编译使用 1.8 -->
<maven.compiler.target>1.8</maven.compiler.target>
如果想要一劳永逸就需要修改 Maven 安装目录下的
settings.xml
文件了,该文件还包含设置中央仓库的镜像仓库,本地仓库的目录地址
Maven 通过解析依赖关系确定项目所需的 jar 包,往pom.xml
文件中的 <dependencies>
标签添加 <dependency>
标签用以添加依赖,其中 <dependency>
标签内部有一个 <scope>
标签,它表示该依赖的作用域,有如下值:
compile
:默认值,编译时需要该 jar 包,如commons-logging
test
:编译Test
时需要该 jar 包,如junit
runtime
:编译时不需要,当运行时需要,如log4j
provided
:编译时需要到,但运行时由 JDK 或某个服务器提供,如servlet-api
1.2 构建流程
Maven 的生命周期(lifecycle)由一系列阶段(phase)构成,常用的阶段、构建流程有:
clean
:删除所有编译生成的文件compile
:编译源码,编译测试源码test
:运行测试package
:打包为jar
或war
有些阶段依赖于其它的阶段,有些则是独立的,比如要执行 test
就必须执行 compile
。
使用 Maven 构建项目就是执行Lifecycle,执行Lifecycle就是按顺序执行一系列Phase,比如在命令行中输入 mvn compile
就是执行 compile
阶段,输入 mvn clean test
就是执行 clean
,compile
,test
这些阶段。
每执行一个Phase,都会执行该phase绑定的若干Goal,Goal是最小执行任务单元。
1.3 使用插件
Maven 通过调用相应的插件执行阶段,比如阶段
clean
对应的插件是clean
插件
Maven自带的插件的如 clean
插件无需显式引用,但使用自定义的 Maven 插件时就需要在 pom.xml
文件的 <build>
标签内的 plugins
标签进行添加了,相关的使用方法需要到相应插件的官方文档中查看,如:
<project>
....
<build>
<plugins>
<!-- dao,mapping,bean 文件生成器创建依赖 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.5</version>
</dependency>
</dependencies>
<!-- dao,mapping,bean 文件生成器核心配置文件 -->
<configuration>
<configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
</configuration>
</plugin>
</plugins>
</build>
</project>
1.4 模块化管理
Maven 支持模块化管理,可以将一个的项目拆成几个大模块。如果模块A依赖模块B,则模块A需要模块B的 jar 包才能正常编译,正常情况下都是从中央仓库中获取模块依赖,还有一种就是从本地仓库中获取,我们可以通过
mvn clean install
这个命令将自定义的jar包发布在本地仓库中,同时还有使用模块化编译,使用模块化编译可以新建一个没有Java代码的Maven项目,在 pom.xml
文件中添加 modules
标签,指明模块之间编译,比如:
<project>
<modules>
<module>../parent</module>
<module>../greeting</module>
<module>../hellomaven</module>
</modules>
</project>
此时在该Maven文件中执行编译,就会在各自模块的 target
目录下输出相应的编译结果,在该文件中无需声明模块间的依赖顺序,Maven会自动编译处理。
操作sqlserver时,要引入
sqljdbc4.jar
包,Maven中央库中并没有这个包,此时就需要从网上下载并发布到Maven的本地库中,在下载的包的文件目录下打开命令行,输入命令mvn install:install-file -Dfile=sqljdbc4.jar -Dpackaging=jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0
即可,随后就可以在pom.xml
文件中添加依赖。
1.4.1 依赖配置继承
Maven 的 pom.xml
配置文件可以通过继承统一定义重复配置,实际上就是创建一个没有Java代码的Maven项目,将 pom.xml
文件中的 <packaging>
标签设置值为 pom
,此时该文件就可以作为 parent
文件以供继承,在派生的 pom.xml
文件中需要添加 <parent>
标签,该标签内部包含了父类 pom.xml
文件的 <groupId>
、<artifactId>
、<version>
标签相应的属性值和 <relativePath>
标签指明父类文件的相对路径。
<project>
...
<parent>
<groupId></groupId>
<artifactId></articfactId>
<version></version>
<relativePath></relativePath>
</parent>
</project>