Apache Maven是做什么的
maven系统架构

Maven 使用惯例优于配置的原则,要求在没有定制之前,所有的项目都有如下的结构:
一个 Maven 项目在默认情况下会产生JAR文件,JAR文件会放在 ${basedir}/target 下面。
Maven命令
mvn compile exec:java -Dexec.mainClass=${main}
这个命令的意思是在 compile 执行完后,执行运行Java的命令,具体执行哪个类是由 -Dexec.mainClass=${main} 参数指定的, ${mian} 是要换成具体的类的。
pom.xml
POM (Project Object Model)
1. Maven坐标
<groupId>com.youkeda.course</groupId><artifactId>app</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version>
Maven 坐标决定了这个 maven 工程部署后存在仓库的文件位置,所以这个坐标信息是必须指定的。
groupId像一个文件夹一样,命名和包比较一致。每个公司都有自己的groupId,避免和其他公司重合,个人开发者也可以设置自己的groupId.artifactId有些像文件名一样,在一个groupId内,它应该是唯一的,从规范上来说,只能使用小写的英文字母、.、-、_。比如,app 、member.share这些都OK。packaging用来指定工程执行完要打包的文件格式,默认情况下,packaging的值是jar。如果没有声明这个标签,就是jar。
packaging 的格式有: jar , war , ear , pom
version基本上遵守了软件工程中对版本号的约定。在 Maven 的世界里,会把一个工程分为两种状态,也是软件工程里最常用的规范。SNAPSHOT 表示当前工程还处于不稳定的阶段,随时可以修改,在开发的时候就会用这个。 RELEASE 表示稳定版本,正式发布的时候就用这个。可以不用特意加,因为只要不是
SNAPSHOT就是RELEASE。
版本号的约定:一般是三位数字来表示版本号, x.x.x 这样的格式 .有时也可能是两位版本,因为有些时候不需要主版本号,总之只要团队约定好就可以.
- 第一位表示主版本号 - 主版本号一般是团队约定的
- 第二位代表的是新增功能
- 第三位表示的是 bugfix 后的版本
还有一个约定,就是执行 mvn package/mvn install 命令生成的 jar 文件名是 [artifactId]-[version].jar .
2. Maven 属性配置
属性配置就是用来做参数设置的. properties 内的标签可以自定义.
<properties><java.version>1.8</java.version><maven.compiler.source>${java.version}</maven.compiler.source><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.target>${java.version}</maven.compiler.target></properties>
java.version代表设置一个参数,值为1.8maven.compiler.source指定 Maven 编译时候源代码的 JDK 版本.project.build.sourceEncodin指定工程代码源文件的文件编码格式,一般都设置为UTF-8maven.compiler.target这个参数作用是按照这个值来进行编译源代码,比如上面的例子中就是按照 JDK1.8进行编译.3. 依赖管理 dependencies
用于指定当前工程依赖其他代码库.一旦我们在 pom.xml 声明了 dependencies 信息, 会先去本地用户目录下的.m2文件内查找对应的文件,如果没有找到就会触发从中央仓库下载行为.
其实可以看出<dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency></dependencies>
dependency标签的内容就是 Maven 坐标 ,所以说只要有坐标就可以建立依赖.一般把别人写的代码库称为三方库,自己写的叫二方库
间接依赖是 mvn 成功的核心要素,简单来说,如果工程A依赖了 okhttp 库,而工程B依赖了工程A,那么工程B 就会自动依赖 okhttp 库.
4. 插件体系 plugins
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version></plugin></plugins></build>
这里声明了一个插件用于执行 maven compile ,maven 的插件也是放在中央仓库的坐标,也就是一切都是 jar .

