Maven的学习是不可或缺的,不使用maven的话,两个项目之间只能通过将一个项目打包成jar包,然后放在另一个项目的lib下面.工欲善其事,必先利其器.我们从是什么,为什么两个点出发来了解Maven。
一、就官方介绍,Maven是基于POM(Project Object Manager)项目对象管理,可以使用一小段的描述来进行管理项目的构建,报告,文档的软件项目管理工具。也就是Maven用来管理项目并且可以自动生成报告和文档,这用起来岂不乐哉。
二、话说Maven, a Yiddish word meaning accumulator of knowledge也就是Maven的原本意思是知识的积累,这是要鼓励程序员多学习的节奏呀,最早在Jakata Turbine项目是为了简化项目的构建,但是发现其中Ant build 是差不多一样的,jars都放在CVS(代码版本控制软件,类subversion)上维护,为了有一种很方便的方式来发布项目信息,以及一种在多个项目中共享JAR的方式引入了Maven。说说maven的优点:
1、Making the build process easy(容易构建项目,方便编译,打包,发布)
2、Providing a uniform build system (为每个项目统一配置)
3、Providing quality project information(提供优质的项目信息)
4、Providing guidelines for best practices development(最佳开发实践)
5、Allowing transparent migration to new features(安装和更新第三插件透明化)
安装就不复述,安装,我们直接开始分析pom.xml文件,因为比较能够直观清晰的了解.一般pom.xml长成大概这样子:
<?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">
<!-所有pom.xml的根元素和pom的一些相关命名空间以及xsd元素->
<modelVersion>4.0.0</modelVersion>
<groupId>com.XXX</groupId>
<artifactId>XXX-parent</artifactId>
<packaging>pom</packaging>
<version>1.0.0</version>
<properties> 属性-用来统一管理版本号
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>4.11</junit.version>
<common.jdbc.version>1.0.0</common.jdbc.version>
<commons.lang3.version>3.1</commons.lang3.version>
<common.util.version>1.12.7</common.util.version>
</properties>
<modules> 依赖的模块
<module>XXX-service</module>
</modules>
<dependencies>
<dependency>
<groupId>junit</groupId> 实际项目
<artifactId>junit</artifactId>模块
<version>${junit.version}</version>版本
<scope>test</scope>依赖范围
</dependency>
</dependencies>
<distributionManagement>
<repository> 表示发布稳定版本的构件的仓库
<id>releases</id>远程仓库的唯一标识
<name>Team Nexus Repository</name>便于阅读的name
//仓库的地址 <url>http://XXX.XXX.XX.187:8080/nexus/content/repositories/releases/</url>
</repository>
</distributionManagement>
<build>
<plugins>插件的导入
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<attach>true</attach>
</configuration>
<executions> 用来排除某些插件
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
仓库的话有本地仓库,中央仓库,或者利用Nexus搭建的远程仓库,我们在maven的配置文件setting.xml中需要指定本地仓库的时候可以加上.<localRepository>E:/repository</localRepository>,当我们第一次搭建maven的时候一般都是会默认在c盘中有一个.m2的文件夹,里面放着maven的配置的配置文件。一般第一次拉取项目的时候会先从配置的远程仓库或者是中央仓库里面下载所需要的jar包,然后建立该本地仓库用来存放jar包,在下一次需要使用某jar包的时候就先从本地找,找不到再去从远程仓库或者中央仓库里下载。
三、理解maven的文件架构才更好的明白其运作原理
bin是运行的脚本,主要是配置Java命令,准备了classpath和Java系统属性之后会执行Java命令。
boot里有一个jar包,其为maven的类加载器框架,用来加载maven的类库。
conf就是咱修改的setting文件啦,直接修改此文件是可以全局定制maven的行为的。
lib为所有的maven运行时需要的所有的java类库和第三方依赖的库。
四、关于maven的命令操作
mvn clean:表示运行清理操作(会默认把target文件夹中的数据清理)。
mvn clean compile:表示先运行清理之后运行编译,会将代码编译到target文件夹中。
mvn clean test:运行清理和测试。
mvn clean package:运行清理和打包。
mvn clean install:运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用。(一般会重新生成target文件的)
mvn clean deploy:运行清理和发布(发布到私服上面)。
五、在ideal上你要知道的一些东西
例如:clean:Maven 清洁目标被绑定清洁干净的生命周期阶段。clean 目标删除 build 目录下的构建输出。当 mvn clean 命令执行时,Maven会删除编译目录。
validate:验证项目是否正确,并且所有必要的信息可用于完成构建过程
compile:编译该项目的源代码
test: 使用合适的单元测试框架测试编译的源代码。这些测试不应该要求代码被打包或部署
package:提取编译后的代码,并在其分发格式打包,如JAR,WAR或EAR文件
verify:运行任何检查,验证包是有效的,符合质量审核规
install:将包存储到本地存储库,可以作为其他项目的依赖
site:生成项目的站点文档
deploy:复制最终包到远程仓库,可以与其他开发者和项目共享
本文先到此结束,有需要补充的将会继续补充哦!