1 引入
在日常的Java开发中,Maven应该成为了不可缺少的工具。 当然,也有人用Gradle 那么,Maven到底是什么? 不是依赖部署工具吗? 我相信很多人都和我有同样的感觉。 但是,一般来说,感觉上的东西大多不可靠。 我在网上收集了一些资料,翻了官网,重新整理了Maven的资料。根据
2 Maven 简介
维基百科的说法,Maven是软件项目管理和自动构建工具。 光从字面上看,我不知道这是要传达什么意思。 据我了解,Maven其实是一种开发工具,与IDEA相辅相成。 我们日常使用IDEA的编译项目的时候,其实用的是Maven。 但是,这些操作都隐藏在强大的IDEA中,我们使用的是IDEA,给人一种与Maven没有联系的错觉。在说
3 Maven 的命令
命令行之前,请先弄几个专业名词。名称说明groupId软件包名称artifactId项目名称
groupId的artifactId被称为坐标,如果确定了他们的值,我们就可以根据他们的坐标找到他们。
创建
mvn-b体系结构:生成器--darchetypegroupid=org.Apache.maven.archetypes-d组id=com.my公司. app
- dartifactid=我的应用程序(9500.163.Com ) () ) ) ) ) ) ) ) ) )到) ) ) ) ) )中的一个示例。
现在,maven自动创建了一个带有hello world的maven项目。 包名为com.my公司. app; 项目名称为my-app。 看这里就知道为什么Maven是项目构建工具了。 我个人觉得Maven和大前端的npm工具有相似之处。
编译
mvncompile根据字面流程,我知道这个命令是编译命令。 他是不是编译了test文件夹内的源代码? 命令将生成一个目标文件。 文件夹中是编译后的内容。
清除
mvnclean此命令主要清除编译后生成的target文件夹。
打包
mvn包此命令缺省情况下将项目转换为jar包。 当然,也可以做成war包。
安装
mvninstall这个命令可以将项目做成jar,放在本地仓库。要理解
4 仓库
maven,仓库的概念是不可缺少的。 请让我(灵魂画师)画张图。
项目所需的依赖都是从本地仓库中获得的,本地仓库是自己的电脑,我们引入的各种依赖都放在本地仓库中。 如果说一般的依存有问题的话,就是没有本地仓库的依存。 也许我们可以先删除本地对应的依赖,试一试。 从中可以看到自制仓库,也就是我们说的便服。 可以保管一些我们开发的基础包。 从自制仓库引进依赖就太早了。 当然,如果自建仓库中没有我们需要的依赖,自建仓库会提出请求,委托偏远的中央仓库。 中央仓库没有它就真的没有。
5 POM
现在我们的重要任务登场了。 --POM. Maven项目包含一个pom.xml文件。
这是最简单的pom文件。 这个pom文件应该很熟悉。 引入依赖是从这里开始的。 什么也不说,说点别的。
包类型
//瓦打包jar打包此标签确定项目是jar包或war包。 一般来说,SpringBoot项目是war包,放入tomcat中执行。 当然,也可以运行jar包。 说到底只是SpringB
oot 内置了tomcat ,强的一批。加进来
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>如果我们把一下文件,例如 xml 后缀的 mapper 文件放在 resources 里面,编译的时候会发现他们没有编译进去,是因为 <filtering> 标签默认是 false,我们需要 true。
去掉他
<exclusions> <exclusion> <groupId>sample.ProjectE</groupId> <!-- Exclude Project-E from Project-B --> <artifactId>Project-E</artifactId> </exclusion> </exclusions>部署到远程
<distributionManagement> <repository> <id>mycompany-repository</id> <name>MyCompany Repository</name> <url>scp://repository.mycompany.com/repository/maven2</url> </repository> </distributionManagement>当我们造好轮子之后,想部署到远程中央仓库,就添加上面标签。同时在 setting.xml(Maven 安装的目录下)添加以下
<servers> <server> <id>mycompany-repository</id> <username>jvanzyl</username> <!-- Default value is ~/.ssh/id_dsa --> <privateKey>/path/to/identity</privateKey> (default is ~/.ssh/id_dsa) <passphrase>my_key_passphrase</passphrase> </server> </servers>多个模块
如果我们想一次建造几个maven项目,也是没有问题的。比如有两个模块(my-app、my-webapp),目录如下
+- pom.xml +- my-app | +- pom.xml | +- src | +- main | +- java +- my-webapp | +- pom.xml | +- src | +- main | +- webapp在顶层 pom.xml 需要添加 <modules> 标签,如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>app</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>my-app</module> <module>my-webapp</module> </modules> </project>然后选一个做老大(webapp),在他的 pom 文件里加入 my-app 的依赖
<dependencies> <dependency> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> </dependency> ... </dependencies>然后再这两个项目(webapp、my-app)的 pom 文件里面加入顶层的 <parent> 标签
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>com.mycompany.app</groupId> <artifactId>app</artifactId> <version>1.0-SNAPSHOT</version> </parent> ...最后执行 mvn verify 命令,就会在老大项目(webapp)的 target 文件夹里生成 war 包。