喜欢就点个赞呗!
GitHub项目JavaHouse同步收录html
在平常 Java 开发中,Maven 应该是必不可少的一个工具了,固然也有人使用 Gradle 的。那么 Maven 到底是个啥东西呢?不就是一个依赖引入工具吗?我相信不少人和我是同样的感受。可是通常而言,感受的东西每每是不可靠的。我在网上收集一些资料,翻翻官网,从新整理了一下 Maven 的资料。前端
维基百科上面说 Maven 是一个软件项目管理和自动构建工具。单从字面意思来看,我是不知道这是想要表达什么意思的。按照个人理解,Maven 其实就是一个开发工具,跟 IDEA 相辅相成。咱们平常使用 IDEA 的编译项目的时候,其实就是在使用 Maven,只不过这些操做都被强大的 IDEA 隐藏了,形成咱们在使用 IDEA,和 Maven 没有联系的错觉。java
说命令行以前,容我说手几个专业的名词。 git
名称 | 解释 |
---|---|
groupId | 包名 |
artifactId | 项目名称 |
groupId 的 artifactId 被人们称为坐标,确实也是,一旦他们的值肯定了,咱们就能够根据他们的坐标找到他们。github
mvn -B archetype:generate
-DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app
-Dartifac t Id=my-app
复制代码
这样maven就自动建立了一个带有 hello world 的 Maven 项目。包名是 com.mycompany.app; 项目名是 my-app。看到这里,咱们就知道为何 Maven 是项目构建工具了。我我的以为 Maven 跟大前端的 npm 工具备类似的地方。web
mvn compile
复制代码
该命令从字面意思流知道是编译命令,他是否是编译 test 文件夹里面的源码的。执行该命令就会生成一个 target 文件。文件夹里面就是编译后的内容。apache
mvn clean
复制代码
该命令主要是清除编译后产生的 target 文件夹。npm
mvn package
复制代码
该命令会将项目默认打成 jar 包,固然咱们就也能够打成 war 包。tomcat
mvn install
复制代码
该命令能够把项目打成 jar,放到本地仓库。微信
要理解 Maven,仓库概念是必不可少的。让我(灵魂画手)画个图。
项目须要的依赖都是从本地仓库里面拿到的,本地仓库就是本身的电脑,咱们引入的各类依赖都放在本地仓库里面,通常依赖有问题的话,就是本地仓库的依赖没有。咱们能够先把本地的对应的依赖删除,在试试,或许就能够了。
从中,咱们能够看到自建仓库,也就是咱们说的私服,能够存放一些咱们开发的基础包,从自建仓库引入依赖就比较快的,固然若是自建仓库里面没有咱们须要的依赖,自建仓库就会发出请求,请求远程的中央仓库,中央仓库没有那就真的没有了。
如今是咱们的重要任务出场了--POM. Maven 项目都会有一个 pom.xml 文件。
这是一个最简单的 pom 文件。这个 pom 文件应该咱们很熟悉了,引入依赖就是从这里引的。没什么好说的,因此说些其余的。
// war
<packaging>jar</packaging>
复制代码
该标签决定项目是 jar 包或者 war 包。通常来讲,SpringBoot 项目会打成 war 包,而后放进 tomcat 运行。固然也能够 jar 包运行,毕竟 SpringBoot 内置了tomcat ,强的一批。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
复制代码
若是咱们把一下文件,例如 xml 后缀的 mapper 文件放在 resources 里面,编译的时候会发现他们没有编译进去,是由于 标签默认是 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 须要添加 标签,以下
<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 文件里面加入顶层的 标签
<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 包。