Maven初识
定义:
Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM),
Maven can manage a project's build, reporting and documentation from a central piece of information. => Maven是一个软件项目管理和综合的工具,基于POM,从一块中心信息管理项目的构建,报告,以及文档。
目标
那么,大神们创造Maven的目的是什么呢?
- 1Making the build process easy 使工程build更容易
- Providing a uniform build system 提供一个统一的build系统
- Providing quality project information 提供高效的项目信息
- Providing guidelines for best practices development 为最好的开发实践提供准则
- Allowing transparent migration to new features 提供向新特性透明迁移
安装方法:
1. 设置Java环境,包括JAVA_HOME参数
2. 解压maven安装包,并将根目录设置到path
Maven本身的配置
1. MAVEN_OPTS environment variable:用于更改Maven默认启动参数,比如占用内存范围 -Xms256m -Xmx512m
2. settings.xml file: 位于USER_HOME/.m2,为全局配置
3. .mvn folder:位于具体project根目录,包括maven.config and extensions.xml
有关setting的详细说明,请参考: https://maven.apache.org/settings.html
运行
mvn [options] [<goal(s)>] [<phase(s)>]
整体顺序如下:
- clean - pre-clean, clean, post-clean
- default - validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy
- site - pre-site, site, post-site, site-deploy
除了mvn package,mvn validate也是比较重要的
常识概念
1. 什么是SNAPSHOT version?
是开发中的版本,发布为release版本时,会去除SNAPSHOT字样
依赖 - dependency
Dependency Scope
1. compile: 默认范围,编译时可用,包含的所有class path可在编码时使用. 2. provided:跟compile相似,不同的是只在编译,测试时使用,实际上,jdk或者将要发布的容器环境中已经存在,所以打包时不会包含 3. runtime: 运行时使用,编译时并不检查 4. test: 测试时使用 5. system:跟provided类似,jar包环境中存在,不同的是需要明确指定位置 6. import (2.0.9之后引入):用于dependencyManagement节点,一般用于版本集中管理, 这个方案可以解决parent依赖只能有一个的问题
传递依赖: 可向被依赖主体传递(transitivity)的包括compile,runtime
type: 依赖的type属性默认为jar,也可以为war,pom等。可以通过插件来自定义工程生成的依赖类型
classifier:用于一个pom根据不同目的生成不同的包,比如支持的jdk版本不同。还有就是可以帮助生成附属产物,比如javadoc,source等
完整信息请参考:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
有关pom的完整说明,请参考:https://maven.apache.org/pom.html
dependencyManagement节点
一般用于项目的parent中,主要用于版本。
当然,dependencyManagement里包含的dependency仍然需要在子项目的依赖中明确写上,只是不用写上版本号而已。
插件 - Plugin
举例如下,使用jdk1.5来编译工程
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> --- 插件参数配置 <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </build>
具体配置插件方法请参考:https://maven.apache.org/guides/mini/guide-configuring-plugins.html
依赖包找不到的一般原因&解决途径
1. Maven默认repository在:https://repo.maven.apache.org/maven2
2. 如果默认repository没有,就需要添加repository,或者手动下载安装(特别是对于老版本jar)
3. 手动安装方法:
mvn install:install-file -DgroupId=jnuit -DartifactId=junit -Dversion=3.8.1 -Dpackaging=jar -Dfile=/path/to/file
然后,要在pom依赖里加入该jar包属性:
<scope>system</scope> <systemPath>${project.basedir}/lib/my-jar.jar</systemPath>
高阶:如何搭建Repository Manager
用处:https://maven.apache.org/repository-management.html
方法:搜集资料中
高阶:如何发布到自定义的的repository
pom中添加
<distributionManagement> <repository> <id>mycompany-repository</id> <name>MyCompany Repository</name> <url>scp://repository.mycompany.com/repository/maven2</url> </repository> </distributionManagement>
setting.xml中添加认证信息
<servers> <server> <id>mycompany-repository</id> <username>jvanzyl</username> <!-- Default value is ~/.ssh/id_dsa --> <privateKey>/path/to/identity</privateKey> (default is ~/.ssh/id_dsa) <passphrase>my_key_passphrase</passphrase> </server> </servers>
另外,有以下几点需要知道:
1. Maven是基于Java的,所有Java环境变量配置是必须的
参考:http://maven.apache.org/index.html
未完待续...