文章目录
- 概述
- 从没用的有趣小知识开始
- Maven是什么?
- 为什么用Maven?
- 使用与配置入门
- 目录结构
- 编写pom
- 使用Archetype生成骨架
- 小彩蛋:直接运行包含main的jar
概述
从没用的有趣小知识开始
Maven可以翻译成“知识的累积”,“专家/行家”。
Maven是什么?
- 服务于java的自动化构建工具
- 什么是构建?把动态web工程经过编译得到的编译结果直接部署到服务器上的整个过程
构建的环节:
clean->compile->test->report->package->install->deploy
- ps: package过程把动态web工程打war包,java工程打jar包
deploy时将动态Web工程生成的war包复制到servlet容器下,可使其运行
- 依赖管理工具与项目信息管理工具
- 类库是通过依赖的方式引入进项目,maven通过其坐标系统可以精准的定位每一个artifacts/控件,进行有序地依赖管理。
- 此外,maven也管理了如开发者列表,项目描述等琐碎的项目信息。
为什么用Maven?
- 把一个项目拆分成多个工程
- 把jar包保存在仓库中
- 可使用统一规范的方法去下载jar包
- 预防jar包版本不一致
- 自动导入依赖包
使用与配置入门
目录结构
可以看到一共有四个文件夹和三个文件。
- bin:包含了maven的运行脚本。命令行中命令例如“mvn -v”就是在调用这些脚本。
- boot:存放类加载器框架,用于加载自己的类库。
- conf:包含了settings.xml,修改该文件可以全局定制maven的行为。或将该文件复制到~/.m2/中,控制该用户下的maven。
- lib:包含了maven运行时需要的所有类库。
编写pom
pom是一个xml文件,因此要遵守xml的格式,包括xml头与各元素。
project标签内:
\qquad
坐标定义三要素:groupId,artifactId,version
\qquad
- groupId: 项目的组名
\qquad
- artifactId:该项目在组中的唯一ID
\qquad
- verion:该项目的版本
\qquad
- name(非必须):项目的名字
clean:清理输出文件夹/target
compile:将主代码编译到target/class文件夹
maven中默认的项目主代码位于/src/main/java
默认的测试代码位于/src/test/java
- 测试部分使用JUnit/@Test/assertEquals() 此处不详细展开了
使用Archetype生成骨架
先创建好一个空的目录,若是maven3则运行
mvn archetype:generate
运行后会开始下载并列出一大堆archetype,按照默认值回车就好,再填好前面说的三要素,就创建成功了。
小彩蛋:直接运行包含main的jar
step1:编写一个带有main的class(可以试一下上面的archetype创建)
step2:在project→build→plugins下添加插件maven-shade-plugin
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals><goal>shade</goal></goals>
<configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.ptyp.App(这里写你自己的main所在的类)</mainClass>
</transformer> </transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
step3:执行mvn clean install
可以看到target文件夹中出现了两个jar,其中original是不带main的,另外一个是带main的,我们点进去看看META-INF\MANIFEST.MF文件
发现它多了一行Main-Class
step4:运行该jar文件:java -jar jar名.jar,成功打印~
彩蛋结束
参考
- 《Maven实战》- 许晓斌