├── pom.xml
├── maven笔记.txt
└── README.md
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | 4.0.0
7 |
8 | com.tiakon.maven.demo
9 | maven-learning-notes
10 | 1.0-SNAPSHOT
11 |
12 |
13 |
14 | UTF-8
15 |
16 |
17 |
28 |
32 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | junit
53 | junit
54 | RELEASE
55 |
56 |
57 | test
58 |
59 |
60 |
61 |
67 |
68 |
69 |
70 |
77 |
78 |
79 |
80 |
81 |
82 | org.apache.maven.plugins
83 | maven-source-plugin
84 | 3.0.1
85 |
86 |
87 |
88 | package
89 |
90 |
91 | jar-no-fork
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
107 |
108 |
109 |
--------------------------------------------------------------------------------
/maven笔记.txt:
--------------------------------------------------------------------------------
1 | 相关网站
2 |
3 | http://search.maven.org/
4 | http://www.mvnrepository.com/
5 |
6 | maven介绍及环境搭建
7 | 介绍:
8 | 基于项目对象模型,可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具
9 | 下载 maven.appache.org
10 | download maven 3.3.3 jdk 1.7的支持
11 | 目录结构:
12 | bin 包含mvn脚本 m2.conf配置文件
13 | boot 类加载器的框架 使用这个jar加载类库
14 | config 配置文件 settings.xml经常用到
15 | lib 常用的类库除了自己的还有第三方以来的类库
16 | 配置环境变量:
17 | maven_home maven目录
18 | path maven的bin目录
19 | 命令行中 mvn -v 能够查看到maven、java、系统版本号就说明安装成功了
20 | hello maven的小例子
21 | 目录介绍
22 | src
23 | -main
24 | -java
25 | -package
26 | -resources
27 | -test
28 | -java
29 | -package
30 | pom.xml配置文件
31 | mvn test
32 | 生成target文件夹
33 | classes文件夹存放字节码文件
34 | reports存放生成的测试报告
35 | mvn package
36 | target中生成一个jar文件
37 | 2017年9月24日22点39分
38 | maven的基础知识
39 | 常用的构建命令
40 | mvn -v 查看maven版本
41 | compaile 编译
42 | test 测试
43 | package 打包
44 | clean 删除target中的字节码文件和测试报告
45 | install 安装jar到本地仓库
46 | 构建过程:先编译,如果过程中程序有依赖就去pom.xml中查找是否引入坐标,会去本地仓库当中查找
47 | 如果有就将jar加入到项目的classpath中如果没有就回去网上的maven中央仓库中下载
48 | 放到仓库中供我们的项目使用
49 | 自动创建目录骨架
50 | archetype插件用于创建符合maven规范的目录骨架
51 | src java中主代码
52 | 创建目录的2中方式:
53 | 1. mvn archetype:generate 按照提示进行选择
54 | 2. archetype:generate 组织名,公司网址的反写+项目名
55 | -DartifaceId=项目名-模块名
56 | -Dcersion-版本号
57 | -Dpackage=代码所存在的包名
58 | 坐标
59 | 构建
60 | 仓库
61 | 本地仓库和远程仓库
62 | lib/maven-model-builder的jar
63 | 其中org/apache/maven/model中pom-4.0.0xml
64 |
65 | central
66 | Central Repository
67 | https://repo.maven.apache.org/maven2默认的中央仓库的地址
68 | default默认的布置
69 |
70 | false禁止下载快照的版本构建
71 |
72 |
73 | 中央仓库地址http://search.maven.org/
74 | 镜像仓库
75 | conf settings
76 | mirror
77 |
78 | maven.net.cn
79 | central 可以使用*
80 | 对原仓库的访问都指向镜像仓库,原仓库不能直接访问
81 | central mirror in China
82 | http://maven.net.cn/content/groups/public
83 |
84 | 本地仓库
85 | 修改settings
86 | 一般不放c盘,防止重装系统丢失
87 | 小技巧:将settings复制一份到repo中,可以在maven升级后
88 | 不用重新设置maven
89 | 2017年10月3日15点07分
90 | 在eclipse中安装插件以及创建
91 | 在eclipse4.0以上不用另外安装maven插件
92 | maven插件将其复制到eclipse/dropins中重启eclipse
93 | 1.在eclipse.ini中加入-vm java_home\bin\javaw.exe
94 | 2.修改eclipse的jre 在java installed jres 中改成自己的jre
95 | (两者区别??)
96 | 3.更改maven配置 installations改成本机的maven
97 | user settings改成repo中 的settings
98 | 选择quick-start
99 | 创建了一个maven项目
100 | run as mavenbuilder->compile 出现错误
101 | 在java的jre中添加-Dmaven.multiModuleProjectDirectory=$m2_home(maven的目录)
102 | run as mavenbuilder->compile编译成功
103 | package打包成功
104 | 2017年10月3日20点30分
105 | 完整的项目构建过程包括
106 | 清理、编译、测试、打包、集成测试、验证、部署
107 | maven生命周期
108 | clean 清理项目
109 | default 构建项目
110 | site 生成项目站点
111 | clean、compile、test、package、install
112 | clean清理项目
113 | pre-clean 执行清理前的工作
114 | clean清理上一次构建生成的所有文件
115 | post-clean 执行清理后的文件
116 | default构建项目(最核心)
117 | compile test package install
118 | site生成项目站点
119 | pre-site 在生成项目站点前要完成的工作
120 | site 生成项目的站点文件
121 | post-site 在生成项目站点后要完成的工作
122 | site-deploy 发布生成的站点到服务器上
123 | pom.xml中添加了
124 |
125 |
126 |
127 | org.apache.maven.plugins
128 | maven-source-plugin
129 | 2.4
130 |
131 |
132 | package
133 |
134 | jar-no-fork
135 |
136 |
137 |
138 |
139 |
140 |
141 | 然后run as clean package 项目就执行了编译 测试 打包 并且生成了source
142 | 执行某个阶段时,其前面的阶段会依次执行
143 | pom.xml
144 | 详解见pom.xml文件
145 | 依赖范围
146 | scope 三种classpath 编译测试运行
147 | compile 默认的范围,编译测试运行都有效
148 | provided 在编译和测试时有效
149 | runtime 在测试和运行时有效
150 | test 只在测试时有效
151 | system 与本机系统相关联,可移植性差
152 | import 导入的范围,它只使用在dependencyManagement中,
153 | 表示从其他的pom中导入dependecy的配置
154 | 依赖冲突
155 | 依赖不同版本的相同构建
156 | 1.短路优先
157 | A->B->C->X(jar)
158 | A->D->X(jar)
159 | 2.先声明先优先
160 | 如果路径长度相同,则谁先声明,先解析谁
161 | 聚合和继承
162 | 聚合:
163 | 1.packaging设置为pom
164 | 2.删除了junit依赖
165 | 3.modules设置多个模块../模块名
166 | 4.run as clean install
167 | 继承:
168 | 1.创建一个父类,packaging设置为pom,可以删除main和test目录
169 | 2. 将公共依赖放入中,
170 | 可以提取版本号到properties中利用${}进行获取
171 | 3.子类依赖只写groupid和artifactid就可以
172 | 一个完整的web项目:
173 | 1.jsp报错 添加servlet api 在www.mvnrepository.com查找servletapi选3.0版本
174 | 并将junit版本设置为4.10,
175 | 2.在build中添加插件jetty并将可以写executions
176 | 可设置打包成功后 使用jetty run运行jetty服务
177 | localhost:8080启动
178 | 1.添加tomcat服务器在tomcat官网上maven插件
179 | localhost:8080/项目名
180 | myeclipse中的Deployment Assembly中将test去掉项目发布后不需要测试代码
181 | project facts中将dynamic web module勾选上
182 | build path中source的各个目录都指向target/class
183 |
184 |
185 |
186 |
187 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Maven学习笔记
2 | =========
3 | 本笔记配合慕课网上maven视频使用效果最佳,链接如上
4 |
5 | ----------
6 | 一.介绍
7 | ----
8 | **Maven**是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。
9 |
10 | 1. bin目录是包含mvn的运行脚本
11 | 2. boot目录包含一个类加载器的框架,maven使用它加载自己的类库
12 | 3. conf配置文件
13 | 4. lib包含maven运行时的依赖类库
14 |
15 | 二.环境变量的配置
16 | ---------
17 |
18 |
19 | [点击下载](http://maven.apache.org/download.cgi "下载地址")
20 | **maven**环境配置,增加一个环境变量**MAVEN_HOME**,值是maven的安装路径(`C:\Program Files\apache-maven-3.5.0-bin\apache-maven-3.5.0`)
21 | 修改path则是在path最后面添加`;%MAVEN_HOME%\bin`。
22 |
23 |
24 |
25 | ### Maven的项目结构 ###
26 |
27 | ```cmd
28 | 项目名
29 | -src
30 | -main
31 | -java
32 | -package
33 | -test
34 | -java
35 | -package
36 | -pom.xml
37 | ```
38 |
39 | 三.常用命令
40 | ------
41 | ```cmd
42 | mvn -v 查看 maven 版本
43 | compile 编译
44 | test 测试
45 | package 打包
46 |
47 | clean 删除 target
48 | install 安装 jar 包到本地仓库
49 | ```
50 |
51 | ### maven快速创建项目骨架目录 ###
52 | **两种方式:**
53 |
54 | ```cmd
55 | 1. mvn archetype:generate 按照提示进行选择
56 | 2. mvn archetype:generate -DgroupId=com.imooc.maven -DartifactId=
57 | maven-service -Dversion=1.0.0SNAPSHOT -Dpackage=com.imooc.maven.demo
58 | 1. -DgroupId=组织名,公司网址反写+项目名
59 | 2. -DartifactId=项目名+模块名
60 | 3. -Dversion=版本号
61 | 4. -Dpackage=代码所存在的包名
62 | ```
63 | 四.Maven中的坐标和仓库
64 | --------------
65 |
66 | **构件坐标:**
67 |
68 | ```cmd
69 | 1. groupId:公司名字+项目名
70 | 2. artifactId:项目名+模块名
71 | 3. varsion:版本号
72 | ```
73 |
74 | **仓库:**
75 |
76 | ```cmd
77 | 1. 本地仓库
78 | 2. 远程仓库
79 | 3. 镜像仓库
80 | ```
81 |
82 | 五.更改仓库默认路径
83 | ------
84 | 已安装到本地仓库中的jar包位置:
85 |
86 | ```cmd
87 | C:\Users\用户\.m2\repository\com\tiakon\demo
88 | ```
89 |
90 | 安装路径conf文件夹下settings.xml文件
91 | 打开找到这段备注是的代码:
92 |
93 | ```xml
94 |
99 | ```
100 | 复制粘贴出来
101 |
102 | ```xml
103 | /path/to/local/repo
104 | ```
105 |
106 | **将localRepository便签内的值替换成新路径即可。**
107 |
108 | 六.maven生命周期
109 | ---------
110 |
111 | 完整的项目构建过程包括:
112 | **清理、编译、测试、打包、集成测试、验证、部署**
113 |
114 | **maven三套独立的生命周期**
115 |
116 | ```cmd
117 | clean 清理项目
118 | 1.pre-clean 执行清理前的工作
119 | 2.clean 清理上一次构建生成的所有文件
120 | 3.post-clean 执行清理后的文件
121 |
122 | default 构建项目(最核心)
123 | compile test package install
124 |
125 | site 生成项目站点
126 | 1. pre-site 在生成项目站点前要完成的工作
127 | 2. site 生成项目的站点文档
128 | 3. post-site 在生成项目站点后要完成的工作
129 | 4. site-deploy 发布生成的站点到服务器上
130 | ```
131 |
132 | 七.maven中pom.xml常见元素介绍
133 | ---------------
134 | ```xml
135 |
136 |
139 |
140 | 4.0.0
141 |
142 | com.tiakon.maven.demo
143 | HoictasStudio-MavenDemo01
144 | 1.0-SNAPSHOT
145 |
156 |
160 |
161 |
162 |
163 | UTF-8
164 |
165 |
166 |
180 | ```
181 |
182 |
183 | ```xml
184 |
185 |
186 |
187 |
188 | junit
189 | junit
190 | RELEASE
191 |
192 |
193 |
194 |
195 |
196 |
197 |
203 |
204 |
205 |
206 |
213 |
214 |
215 |
216 |
217 |
218 | org.apache.maven.plugins
219 | maven-source-plugin
220 | 3.0.1
221 |
222 |
223 |
224 | package
225 |
226 |
227 | jar-no-fork
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
243 |
244 |
245 | ```
246 | 八.Maven的依赖范围
247 | ----------
248 |
249 | ```cmd
250 | 三种 classpath
251 | 1. 编译
252 | 2. 测试
253 | 3. 运行
254 | ```
255 |
256 | **maven提供了6种可选依赖范围:**
257 |
258 |
259 |
260 | ```cmd
261 | 1. compile: 默认范围,编译测试运行都有效。
262 | 2. provided: 在编译和测试时有效。(比如说在做 web 时,你在本地运行的 servlet ,
263 | 是需要调用已添加到项目中的 servlet-api.jar 这个 jar 包的。这个过程就包含了编译【就是
264 | 把 Java 文件编译成 class 文件的过程中也要调用】和测试【测试就是在本地运行】,那么他说
265 | 的运行是指,整个项目已开发完成,编译、测试通过后,将 class 文件或包含有 class 文件的 war 包
266 | 发布到服务器上的 Tomcat 中运行,这时启动项目,就可以直接调 Tomcat 中的 servlet-api.jar ,
267 | 不必再将自己的 jar 包添加到项目中去。也就是说当你选择 provided 时,项目发布时 Maven 不会将
268 | 你添加的 jar 包,加入到项目中。)
269 | 3. runtime: 在测试和运行时有效。(典型例子:JDBC驱动的实现。)
270 | 4. test: 只在测试是有效。
271 | 5. system: 类似 provided,与本机系统相关联,可移植性差。
272 | 6. import: 导入范围,他只是用在 dependencyManagement 中,表示从其他的 pom 中导
273 | 入dependecy的配置。(以下引用官网案例并不难理解。)
274 | ```
275 |
276 |
277 |
278 |
279 |
280 | ```xml
281 | Importing Dependencies
282 |
283 |
284 | 4.0.0
285 | maven
286 | B
287 | pom
288 | B
289 | 1.0
290 |
291 |
292 |
293 | maven
294 | A
295 | 1.0
296 | pom
297 | import
298 |
299 |
300 | test
301 | d
302 | 1.0
303 |
304 |
305 |
306 |
307 |
308 | test
309 | a
310 | 1.0
311 | runtime
312 |
313 |
314 | test
315 | c
316 | runtime
317 |
318 |
319 |
320 | ```
321 |
322 | Assuming A is the pom defined in the preceding example, the end result would be the same. **All of A's managed dependencies would be incorporated into B except for d since it is defined in this pom.**
323 |
324 | 假设A是前面示例中定义的pom,那么最终结果将是相同的。**所有管理的依赖项都将被合并到B中,除了在这个pom中定义的d之外。**
325 |
326 | 九.依赖冲突
327 | ------
328 |
329 | ```cmd
330 | 1.短路优先:
331 |
332 | C->B->A->X1(jar)
333 | C->B->X2(jar)
334 |
335 | 【C依赖B,B依赖A,A和B都包含同一个不同版本的Jar,则取B的依赖版本。(c的pom.xml中不必注明jar坐标)】
336 |
337 | 2.先声明先优先
338 |
339 | 如果路径相同长度相同,则谁先声明,先解析谁。
340 |
341 | 【C依赖A和B,A和B都包含同一个不同版本的Jar,谁依赖在前取谁的依赖版本。】
342 | ```
343 |
344 | 十.聚合与继承
345 | -------
346 | ### 聚合 ###
347 |
348 | ```xml
349 | pom
350 |
351 | ../HoictasStudio-MavenDemo01
352 | ../HoictasStudio-MavenDemo02
353 | ../HoictasStudio-MavenDemo03
354 |
355 | ```
356 |
357 | 假设在**HoictasStudio-MavenParent**模块中添如以上代码,输入`clean install`命令后,即可同时安装多个jar到本地仓库中
358 |
359 | ```markdown
360 | [INFO] HoictasStudio-MavenDemo01 .......................... SUCCESS [ 4.618 s]
361 | [INFO] HoictasStudio-MavenDemo02 .......................... SUCCESS [ 0.828 s]
362 | [INFO] HoictasStudio-MavenDemo03 .......................... SUCCESS [ 0.923 s]
363 | [INFO] HoictasStudio-MavenParent .......................... SUCCESS [ 0.021 s]
364 | ```
365 |
366 |
367 | ### 继承 ###
368 |
369 | **根据官方文档说明继承会根据父模块与子模块的包含与否,对pom.xml的写法则有两种。**
370 |
371 | #### 第一种写法 ####
372 |
373 | 假设我们有两个模块,前一个叫 `com.mycompany.app:my-app:1`,后一个叫`com.mycompany.app:my-module:1`。
374 |
375 | my-app的pom文件为:
376 |
377 | ```xml
378 |
379 | 4.0.0
380 | com.mycompany.app
381 | my-app
382 | 1
383 |
384 | ```
385 |
386 | my-module的pom文件为:
387 |
388 | ```xml
389 |
390 | 4.0.0
391 | com.mycompany.app
392 | my-module
393 | 1
394 |
395 | ```
396 |
397 | 我们指定如下项目结构:
398 |
399 | ```xml
400 | .
401 | |-- my-module
402 | | `-- pom.xml
403 | `-- pom.xml
404 | ```
405 |
406 | 那么,我们需要`my-module`去继承`my-app`,则需要在`my-module`的pom文件中添加以下代码:
407 |
408 | ```xml
409 |
410 |
411 | com.mycompany.app
412 | my-app
413 | 1
414 |
415 | 4.0.0
416 | com.mycompany.app
417 | my-module
418 | 1
419 |
420 | ```
421 |
422 | #### 第二种写法 ####
423 |
424 | ```cmd
425 | However, that would work if the parent project was already installed inour local repository or was in that specific
426 | directory structure (parent pom.xml is one directory higher than that of the module's pom.xml). But what if the parent
427 | is not yet installed and if the directory structure is
428 | .
429 | ```
430 | |-- my-module
431 | | `-- pom.xml
432 | `-- parent
433 | `-- pom.xml
434 |
435 | 上一段话摘自官网对继承的介绍,就是说如果你的父模块已在本地安装或者父模块不包含子模块,目录级别甚至是
436 | 比子模块的还要高,就在第一种写法上添加``标签。
437 |
438 |
439 | ```xml
440 |
441 |
442 | com.mycompany.app
443 | my-app
444 | 1
445 | ../parent/pom.xml
446 |
447 | 4.0.0
448 | my-module
449 |
450 | ```
451 |
452 |
453 |
454 | 笔者在看视频时就发现,当父模块与子模块处于同一级别时,在按照视频中的写法(第一种写法)test时就会报错,
455 | 而此时的情况是不包含子模块,所以应该在``标签中添加``标签即可测试通过。
456 |
457 | 十一.maven配置阿里云镜像
458 | -------
459 |
460 | 修改`setting.xml`文件,添加镜像地址
461 |
462 | ```xml
463 |
464 |
465 | nexus-aliyun
466 | *
467 | Nexus aliyun
468 | http://maven.aliyun.com/nexus/content/groups/public
469 |
470 |
471 | ```
472 |
473 | > 这个地址下载 jar 包的速度,谁用谁知道!
474 |
--------------------------------------------------------------------------------