Java基础笔记(Maven入门)

1 Maven

《Maven安装与配置》

Maven 是一个 Java 项目管理和构建工具,它提供了:

  • 标准化的项目结构
  • 标准化的构建流程
  • 依赖管理:它使用 pom.xml 文件定义项目内容,该文件只需声明依赖项,而Maven会自动下载该依赖项并导入到 classpath

Maven 使用如下图所示早已预定好的目录结构:
Java基础笔记(Maven入门)_第1张图片

1.1 依赖管理

1.1.1 pom.xml 文件结构

Java基础笔记(Maven入门)_第2张图片

  • pom.xml 是一个 XML 文件,它的 根元素

  • 使用 version 表示当前项目的唯一标识

  • 标签表示打包方式,《maven之packaging标签》

    • 默认指定为 jar,表示项目打包成一个 jar 包,jar 包就是 java 的类进行编译生成的 class 文件就行打包的压缩包而已,里面就是一些 class 文件。在其它项目引用该 jar 包时,该 jar 包依赖的其它 jar 包也要同时引用。
    • 指定为 war,表示项目打包成一个 war 包,与 jar 包不同在于,它会将项目中依赖的所有 jar 包都放在 WEB-INF/lib 这个文件夹下,因此 war 包非常适合部署时使用,不再需要下载其他的依赖包,能够使用户拿到 war 包直接使用(放在 tomcat 的 webapps 目录下,启动即可)
    • 构建聚合工程的时候,父级项目的 POM 文件的 标签必须显式声明为 pom,父级的 pom 文件只作项目的子模块的整合,在 maven install 时不会生成 jar/war 压缩包。
  • 标签用于定义一些用于 XML 文件的一些变量

  • 标签用于描述依赖信息

有时候Maven默认创建的项目使用 JDK1.5,在 中添加

<java.version>1.8java.version>

<maven.compiler.source>1.8maven.compiler.source>

<maven.compiler.target>1.8maven.compiler.target>

如果想要一劳永逸就需要修改 Maven 安装目录下的 settings.xml 文件了,该文件还包含设置中央仓库的镜像仓库,本地仓库的目录地址

Maven 通过解析依赖关系确定项目所需的 jar 包,往pom.xml 文件中的 标签添加 标签用以添加依赖,其中 标签内部有一个 标签,它表示该依赖的作用域,有如下值:

  • compile:默认值,编译时需要该 jar 包,如 commons-logging
  • test:编译 Test 时需要该 jar 包,如 junit
  • runtime:编译时不需要,当运行时需要,如 log4j
  • provided:编译时需要到,但运行时由 JDK 或某个服务器提供,如 servlet-api

1.2 构建流程

Maven 的生命周期(lifecycle)由一系列阶段(phase)构成,常用的阶段、构建流程有:

  • clean:删除所有编译生成的文件
  • compile:编译源码,编译测试源码
  • test:运行测试
  • package:打包为 jarwar

有些阶段依赖于其它的阶段,有些则是独立的,比如要执行 test 就必须执行 compile
使用 Maven 构建项目就是执行Lifecycle,执行Lifecycle就是按顺序执行一系列Phase,比如在命令行中输入 mvn compile 就是执行 compile 阶段,输入 mvn clean test 就是执行 cleancompiletest 这些阶段。
每执行一个Phase,都会执行该phase绑定的若干Goal,Goal是最小执行任务单元

1.3 使用插件

Maven 通过调用相应的插件执行阶段,比如阶段 clean 对应的插件是 clean 插件

Maven自带的插件的如 clean 插件无需显式引用,但使用自定义的 Maven 插件时就需要在 pom.xml 文件的 标签内的 plugins 标签进行添加了,相关的使用方法需要到相应插件的官方文档中查看,如:

<project>
	....
	<build>
		<plugins>
			
			<plugin>
				<groupId>org.mybatis.generatorgroupId>
				<artifactId>mybatis-generator-maven-pluginartifactId>
				<version>1.3.7version>
				<dependencies>
					<dependency>
						<groupId>mysqlgroupId>
						<artifactId>mysql-connector-javaartifactId>
						<version>6.0.5version>
					dependency>
				dependencies>
				
				<configuration>
					<configurationFile>${basedir}/src/main/resources/generatorConfig.xmlconfigurationFile>
				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>../parentmodule>
		<module>../greetingmodule>
		<module>../hellomavenmodule>
	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 文件中的 标签设置值为 pom ,此时该文件就可以作为 parent 文件以供继承,在派生的 pom.xml 文件中需要添加 标签,该标签内部包含了父类 pom.xml 文件的 标签相应的属性值和 标签指明父类文件的相对路径。

<project>
	...
	<parent>
		<groupId>groupId>
		<artifactId>articfactId>
		<version>version>
		<relativePath>relativePath>
	parent>
project>

你可能感兴趣的:(Java,程序人生)