Lifecycle | 含义 |
---|---|
clean | 清理项目 |
default | 构建项目 |
site | 发布项目站点 |
每个生命周期都由多个"阶段"(Phase)组成
每个“阶段"与它生命周期前后的"阶段"有依赖关系,执行一个"阶段"会自动执行在它之前的所有"阶段"
即使不引入任何第三方插件,Maven 也内置了一套"阶段"对应"插件"的关系
Lifecycle | Phase | > | Plugin | Goal |
---|---|---|---|---|
clean | clean | maven-clean-plugin | clean | |
default | compile | maven-compiler-plugin | compile | |
default | package | maven-jar-plugin | jar | |
default | deploy | maven-deploy-plugin | deploy | |
site | site | maven-site-plugin | site | |
Maven Usage
usage: mvn [options] [goal(s)] [phase(s)]
调用插件的一个具体目标
mvn maven-install-plugin:install
在不引入第三方插件的情况下,为何这两条命令是等价的?
# phase
mvn clean
# plugin:goal
mvn maven-clean-plugin:clean
项目依赖的 jar 在 maven 中通过配置的方式自动引入,只需将依赖声明在 pom 文件中即可
com.zaxxer
HikariCP
2.3.2
什么是依赖传递?
Dependency Scope
junit
junit
4.6
test
javax.servlet
servlet-api
2.5
provided
Dependency Scope
Scope | 传递 | 含义 |
---|---|---|
compile | 是 | 默认值,依赖在所有过程中有效 |
provided | X | 此依赖已由容器提供(例如 servlet-api, jsp-api),仅在编译、测试阶段使用 |
runtime | 是 | 此依赖仅在运行时使用,编译期不需要 |
test | X | 此依赖仅在测试编译、测试运行阶段使用 |
system | X | 类似 provided,但期望你指出依赖的明确位置,而不会去仓库查询 |
Exclusions
org.apache.poi
poi
3.1-FINAL
log4j
log4j
Maven 仓库分两大类,其中"远程仓库"又分三种:
...
local.mirror.repository
Local Nexus Repository
http://192.168.100.90:8081/nexus/content/groups/public/
*
...
修改项目的 pom.xml,增加 distributionManagement 部分
...
releases
Internal Releases
http://192.168.100.90:8081/nexus/content/repositories/releases/
snapshots
Internal Releases
http://192.168.100.90:8081/nexus/content/repositories/snapshots/
...
修改 Maven 配置文件 settings.xml,增加 servers 部分
...
releases
deployment
fake_passwd
snapshots
deployment
fake_passwd
...
至此,执行 deploy 命令就将会把当前项目按照 pom 中的版本部署到自建仓库
mvn clean deploy
IDE | 可用插件 |
---|---|
Intellij IDEA | 已内置 |
Eclipse | m2e (m2eclipse) |
MyEclipse | 已内置 |
当碰到类找不到的错误,例如:
java.lang.NoClassDefFoundError: com.foo.FooServiceImpl
可通过 GrepCode 搜索 FooServiceImpl 来自哪个 Lib