转:https://www.cnblogs.com/chenzhuantou/p/12032704.html
维基百科上面说 Maven 是一个软件项目管理和自动构建工具。单从字面意思来看,我是不知道这是想要表达什么意思的。按照我的理解,Maven 其实就是一个开发工具,跟 IDEA 相辅相成。我们日常使用 IDEA 的编译项目的时候,其实就是在使用 Maven,只不过这些操作都被强大的 IDEA 隐藏了,造成我们在使用 IDEA,和 Maven 没有联系的错觉。
说命令行之前,容我说手几个专业的名词。
groupId:包名
artifactId:项目名称
创建groupId 的 artifactId 被人们称为坐标,确实也是,一旦他们的值确定了,我们就可以根据他们的坐标找到他们。
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 工具有相似的地方。
mvn compile
mvn clean
mvn package
mvn install
要理解 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 包。
原文:https://www.cnblogs.com/jvStarBlog/p/12037017.html