大家好,我是IT修真院西安分院第4期的学员,一枚正直纯洁善良的java程序员。
今天给大家分享一下,修真院官网Java任务2,深度思考中的知识点————clean,install,package,deploy命令分别代表什么含义?
1.背景介绍
1)maven是什么?
Maven 是一个项目管理工具。它负责管理项目开发过程中的几乎所有的东西。
maven对依赖关系的特性进行细致的分析和划分,避免开发过程中的依赖混乱和相互污染行为
maven支持许多种的应用程序类型,对于每一种支持的应用程序类型都定义好了一组构建规则和工具集。
一个大型的项目通常有几个小项目或者模块组成,用maven可以很方便地管理。
2.知识剖析
1)pom文件
Maven的核心功能便是合理叙述项目间的依赖关系,通俗点讲,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包,而这里pom.xml文件对于学了一点maven的人来说,就有些熟悉了,怎么通过pom.xml的配置就可以获取到jar包呢?pom.xml配置文件从何而来?等等类似问题我们需要搞清楚,如果需要使用pom.xml来获取jar包,那么首先该项目就必须为maven项目,maven项目可以这样去想,就是在java项目和web项目的上面包裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能了(通过pom.xml添加jar包)。
2) maven把项目的构建划分为不同的生命周期(lifecycle)。粗略一点的话,它这个过程(phase)包括:编译、测试、打包、集成测试、验证、部署。maven中所有的执行动作(goal)都需要指明自己在这个过程中的执行位置,然后maven执行的时候,就依照过程的发展依次调用这些goal进行各种处理。
这个也是maven的一个基本调度机制。一般来说,位置稍后的过程都会依赖于之前的过程。当然,maven同样提供了配置文件,可以依照用户要求,跳过某些阶段。
3)目录结构
Maven的标准工程结构如下:
|-- pom.xml(maven的核心配置文件)
|-- src
|-- main
| -- java(java源代码目录) |
– resources(资源文件目录)
|-- test
`-- java(单元测试代码目录)
|-- target(输出目录,所有的输出物都存放在这个目录下)
|–classes(编译后的class文件存放处)
4)约定优于配置
每一个阶段的任务都知道怎么正确完成自己的工作,比如compile任务就知道从src/main/java下编译所有的java文件,并把它的输出class文件存放到target/classes中。
对maven来说,采用"约定优于配置"的策略可以减少修改配置的工作量,也可以降低学习成本,更重要的是,给项目引入了统一的规范。
回归主题
clean: 清除target目录;
install: 将工程打包到本地仓库,这时本地项目可以依赖,别人是依赖不了的;
package:将项目中的各种文件,比如源代码、编译生成的字节码、配置文件、文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR包;
deploy: 将打包的jar文件上传到私服(如果有私服),此时连接私服的人才可以下载依赖。
3.提问
1)如何跳过Junit?
在pom文件中加入以下代码
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
2)maven install 和 maven package 区别?
如果b项目依赖a项目,而a打了包(package),jar仅仅时打到了a项目的target下。这时编译b项目,还是会报错,找不到所依赖的a项目,说明b项目在本地仓库是没有找到它所依赖的a项目。然后,我install a项目这时,有以下日志,[INFO] Installing G:\projects\a\target\a-0.0.1-SNAPSHOT.jar to F:\repository\com\chenjun\a\0.0.1-SNAPSHOT\a-0.0.1-SNAPSHOT.jar
[INFO] Installing G:\projects\a\pom.xml to F:\repository\com\chenjun\a\0.0.1-SNAPSHOT\a-0.0.1-SNAPSHOT.pom,说明a项目已安装到本地仓库了,并且是jar和pom同时安装的.
这时候去compileb项目,编译通过.
总之,package是把jar打到本项目的target下,而install时把target下的jar安装到本地仓库,供其他项目使用.
3)为什么要跳过Junit?
因为有时候我们不想让测试类再去跑一遍,不跳过的话有可能会出现报错
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~
腾讯视频
我的邀请码:29862094,或者你可以直接点击此链接:http://www.jnshu.com/login/1/29862094
作者: L812497683