Maven学习
目录:
1、Maven介绍:
2、常用命令及操作:
3、pom文件:
1、Maven介绍:
(1)Maven是一个强大的项目构建工具。Maven是用Java开发的,因此Maven被更多的用于Java项目中。
(2)构建工具是将软件项目构建相关的过程自动化的工具。
构建一个软件项目通常包含以下一个或多个过程:
①生成源码(如果项目使用自动生成源码);
②从源码生成项目文档;
③编译源码;
④将编译后的代码打包成JAR文件或者ZIP文件;
⑤将打包好的代码安装到服务器、仓库或者其它的地方;
有些项目可能需要更多的过程才能完成构建,这些过程一般也可以整合到构建工具中,因此它们也可以实现自动化。
(3)自动化构建过程的好处是将手动构建过程中犯错的风险降到最低。而且,自动构建工具通常要比手动执行同样的构建过程要快。
2、常用命令及操作:
(1)安装maven并在系统中配置好环境变量后,在Intellj idea中File->Settings->Build,Execution,Deployment->Maven设置配置文件路径:
图2.1 截图1
(2)mvn -v:查看maven版本,或使用命令mvn -version
图2.2 截图2
(3)从模板创建项目:
mvn archetype:generate -DgroupId=com.remoa -DartifactId=TestMaven -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
图2.3 截图3
在当前目录下找到创建的maven项目,创建成功。
图2.4 截图4
默认在src目录下生成了一个App.java的类。编辑该类,得到结果如下:
图2.5 截图5
(4)若在创建新项目时出现报错:
Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.0.1:generate (default-cli) on project standalone-pom: Archetype org.apache.maven.archetypes:maven-archetype-quickstart:1.0 is not configured
图2.6 截图6
在http://repo1.maven.org/maven2找到下面的文件,复制到目录C:\Users\Administrator\.m2\repository\org\apache\maven\archetype\archetype-catalog\3.0.1下面。
图2.7 截图7
然后在输入命令时,在末尾加上一个参数:
mvn archetype:generate -DgroupId=com.remoa -DartifactId=TestMaven -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -DarchetypeCatalog=local
(5)在pom.xml文件中添加build配置,配置项目的主入口类:
<build>
<finalName>remoa</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.remoa.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
进入maven工程目录,输入指令mvn compile:编译项目的源代码
图2.8 截图8
(6)mvn package:将编译好的代码打包成可分发的格式,如jar、war等
图2.9 截图9
若使用mvn package -U参数:该参数能强制让Maven检查所有SNAPSHOT依赖更新,确保集成基于最新的状态,如果没有该参数,Maven默认以天为单位检查更新,而持续集成的频率应该比这高很多。
(7)查看生成的target目录:dir target
图2.10 截图10
(8)运行项目里的jar包
java -jar target/remoa.jar
图2.11 截图11
(9)运行项目里的其他类
mvn exec:java -Dexec.mainClass=”com.remoa.App”
查看到输出语句“Hello Remoa!”执行成功。
图2.12 截图12
(10)mvn site:生成项目相关信息的网站
图2.13 截图13
图2.14 截图14
打开后如下所示:
图2.15 截图15
(11)以树形结构查看项目的依赖信息:
mvn dependency:tree
图2.16 截图16
(12)mvn clean:清空生成的文件
图2.17 截图17
3、pom文件:
(1)结构图:
图3.1 结构图
(2)POM文件:
①当执行一条Maven命令的时候,会传入一个pom文件。Maven会在该pom文件描述的资源上执行该命令。
②Maven的POM文件是一个xml文件,描述项目用到的资源,包括源代码目录、测试代码目录等的位置,以及项目依赖的外部jar包。
③POM文件描述的是构建“什么”,而不是“如何”构建。如何构建是取决于Maven的构建阶段和目标。当然,如果需要,你也可以向Maven构建阶段中添加自定义的目标。
④每一个项目都有一个POM文件。POM文件即pom.xml,应该放在项目的根目录下。一个项目如果分为多个子项目,一般来讲,父项目有一个POM文件,每一个子项目都有一个POM文件。在这种结构下,既可以一步构建整个项目,也可以各个子项目分开构建。
(3)构建生命周期、阶段和目标:
Maven的构建过程被分解为构建生命周期、阶段和目标。
一个构建周期由一系列的构建阶段组成,每一个构建阶段由一系列的目标组成。当你运行Maven的时候,你会传入一条命令。这条命令就是构建生命周期、阶段或目标的名字。如果执行一个生命周期,该生命周期内的所有构建阶段都会被执行。如果执行一个构建阶段,在预定义的构建阶段中,所有处于当前构建阶段之前的阶段也都会被执行。
(4)依赖和仓库
Maven执行时,其中一个首要目标就是检查项目的依赖。依赖是项目用到的jar文件(java库)。如果在本地仓库中不存在该依赖,则Maven会从中央仓库下载并放到本地仓库。本地仓库只是你电脑硬盘上的一个目录。
(5)插件
构建插件可以向构建阶段中增加额外的构建目标。如果Maven标准的构建阶段和目标无法满足项目构建的需求,可以在POM文件里增加插件。Maven有一些标准的插件供选用,如果需要可以自己实现插件。
(6)配置文件
配置文件用于以不同的方式构建项目。比如,你可能需要在本地环境构建,用于开发和测试,你也可能需要构建后用于开发环境。这两个构建过程是不同的。在POM文件中增加不同的构建配置,可以启用不同的构建过程。当运行Maven时,可以指定要使用的配置。
(7)Maven与Ant
Ant是Apache另一个流行的构建工具。
Ant使用命令式的方式,即你需要在Ant构建文件里指定Ant应该执行的操作。你可以指定低级别的操作,如复制文件、编译代码等。你指定操作,还需要执行这些操作执行的顺序。Ant没有默认的目录结构。
Maven使用声明式的方式,即你需要在POM文件里指定做什么,而不是如何做。POM文件描述项目的资源,而不是如何构建。相比而言,Ant构建文件描述的是如何构建项目。在Maven里,如何构建是在“Maven 构建生命周期、阶段和目标”中预定义的。
(8)具体配置参数:
①modelVersion:表示使用的POM模型的版本。选择和你正在使用的Maven版本一致的版本即可。
②groupId:是一个组织或者项目(比如开源项目)的唯一ID。groupId不一定非要使用Java的包名,也不一定要使用.分隔符来分隔ID中的词。但是,如果你这么使用,项目将会位于Maven仓库的结构化目录中,该结构化目录与group ID匹配。每一个.是一个目录分隔符,每一个词都表示一个目录。group ID为com.remoa的项目将位于目录MAVEN_REPO/com/remoa中。目录路径中的MAVEN_REPO表示Maven仓库的路径。
③artifactId:包含你正在构建的项目的名称。artifact ID可以是Maven仓库中group ID目录下的子目录名。artifact ID也是构建完项目后生成的jar包的文件名的一部分。构建过程的输出,即构建结果,在Maven中成为构件(artifact)。通常它就是一个jar包、war包或者EAR包。
④versionId:项目的版本号。如果你的项目有不同的发行版,比如开源API,对构建过程版本化是很有用的。如果使用版本,项目的用户就可以查看项目的具体版本。版本号是artifact ID目录下的子目录名。版本号也用作构建结果名称的一部分。
⑤groupId,artifactId和versionId属性,在项目构建后会生成一个jar文件,位于Maven仓库的如下路径中(目录和文件名):MAVEN_REPO/com/remoa/RegistrationSystem/1.0.0/RegistrationSystem-1.0.0.jar