maven 总结 | Frank 的博客

maven 总结

maven 简洁整理

依赖包的 scope

1
2
mvn compile / clean /package/ install/ test
<scope> 对应的几个范围, test, provided, runtime, 不推荐 system, compile, import

使用 mvn 命令原型创建普通 java 项目

mvn archetype:generate -DgroupId=com.ghc.generalApp -DartifactId=algorithm -DarchetypeArtifactId=maven-archetype-quickstart

使用 mvn 命令原型创建 web 项目

mvn archetype:generate -DgroupId=com.ghc.webapp -DartifactId=microservice -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

总结

  1. springboot initializer作为父项目 gav 坐标, name, url, description 等写一写 packaging 方式改为 pom
  2. 并干掉不相关的文件目录(.mvn目录、src目录、mvnw及mvnw.cmd文件,最终只留.gitignore和pom.xml)
  3. 在父项目中 仅做依赖申明 dependencyManagement, 具体引用由子项目自己去规定
  4. 记得将版本号以及编码类型等在 properties 中描述 如(druid.version)
  5. 如果父项目 pom 中没有 modules, 则需要添加
  6. 将大家都用到的依赖放于 common 模块 xxx 中
  7. 其他子模块中独有的 依赖 写在自己的 pom 文件中
  8. -DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。
    -Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。
  9. application.yml 可以 读取 pom 文件中的 配置, 如 profile , jdbcurl等

9.问题:
Maven中optional和scope元素的使用
optional 为 true 则 不传递 依赖, scope 是指传递依赖的范围

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
依赖传递 
路径优先
声明优先

别人隐藏自己 <optional>true></optional>
自己主动排除 <exclusions>...</exclusions>
设置 jar 的存在范围
<scope></scope> 默认 compile
可选 test 如 junit 仅供测试
runtime jdbc 编译器也没法用
provided servlet-api 因为 tomcat 默认带了

项目构建的生命周期
compile -> test-compile -> test -> package -> install

mvn 指令 -P 环境定义 id

mvn install -P pro_env

mvn install -D skipTests

mvn clean package -pl module_a -am


pluginManagement