Maven 学习
Maven 是一个项目管理工具,它包含了一个 项目对象模
型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管
理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标
(goal)的逻辑。
安装 maven
配置
JAVA_HOME
的环境变量解压到一个没有中文没有空格的路径下
bin
: 存放了 maven 的命令,比如mvn
boot
: 存放了一些 maven 本身的引导程序,如类加载器等conf
: 存放了 maven 的一些配置文件,如setting.xml
文件lib
: 存放了 maven 本身运行所需的一些 jar 包
在环境变量增加
M2_HOME
,路径是 maven 解压后的根目录在环境变量里的
path
中增加maven/bin
的目录mvn -v
查看 maven 版本mvn -v Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00) Maven home: C:\maven\bin\.. Java version: 1.8.0_171, vendor: Oracle Corporation Java home: C:\Program Files\Java\jdk1.8.0_171\jre Default locale: zh_CN, platform encoding: GBK OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
Maven 本地仓库的配置
在 MAVE_HOME/conf/settings.xml
文件中配置本地仓库位置(maven 的安装目录下):
<!-- settings 标签下 -->
<!-- 默认值:${user.home}/.m2/repository -->
<localRepository>/path/to/local/repo</localRepository>
Maven 工程的目录结构
src/main/java
—— 存放项目的.java 文件src/main/resources
—— 存放项目资源文件,如 spring, hibernate 配置文件src/main/webapp
—— 存放项目页面元素,普通 Java 项目没有这个目录src/test/java
—— 存放所有单元测试 .java 文件,如 JUnit 测试类src/test/resources
—— 测试资源文件target
—— 项目输出位置,编译后的 class 文件会输出到此目录pom.xml
—— maven 项目核心配置文件
Maven 常用命令
compile
:编译,mvn compile
将 src/main/java 下的文件编译为 class 文件输出到 target 目录下test
:测试,mvn test
执行 src/test/java 下的单元测试类clean
:清理,mvn clean
删除 target 目录package
:打包,mvn package
将 Java 工程打成 jar 包,对于 web 工程打成 war 包install
:安装,mvn install
将打成 jar 或 war 包发布到本地仓库中
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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 公司或组织域名倒序+项目名 -->
<groupId>com.bin.test</groupId>
<!-- 模块名 -->
<artifactId>Demo</artifactId>
<!-- 打包方式 jar 或 war 或 pom :用于 maven 工程的继承,通常父工程设置为 pom-->
<packaging>war</packaging>
<!-- 版本 -->
<version>0.0.1-SNAPSHOT</version>
<!-- 项目的显示名称,通常用于 maven 产生的文档中 -->
<name>Demo Maven Webapp</name>
<!-- 指定项目站点,通常用于maven产生的文档中 -->
<url>http://maven.apache.org</url>
<!-- 描述此项目,通常用于maven产生的文档中 -->
<description>测试</description>
<properties>
<!-- 占位符 -->
<spring.version>4.2.9.RELEASE</spring.version>
</properties>
<dependencies>
<!-- 依赖的项目 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
<repositories>
<!-- 默认的中央仓库设置 -->
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<build>
<!-- 项目的名字 -->
<finalName>WebMavenDemo</finalName>
<!-- 描述项目中资源的位置 -->
<resources>
<!-- 自定义资源1 -->
<resource>
<!-- 资源目录 -->
<directory>src/main/java</directory>
<!-- 包括哪些文件参与打包 -->
<includes>
<include>**/*.xml</include>
</includes>
<!-- 排除哪些文件不参与打包 -->
<excludes>
<exclude>**/*.txt</exclude>
<exclude>**/*.doc</exclude>
</excludes>
</resource>
</resources>
<plugins>
<!-- 设置 jdk 编译版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 添加 tomcat7 插件,自带 tomcat6, 就算加上 7 了,执行 mvn tomcat:run 也还是 6 -->
<!-- 启动命令:mvn tomcat7:run -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<uriEncoding>utf-8</uriEncoding>
<port>8070</port>
<path>/</path>
</configuration>
</plugin>
<!-- 此时点击 idea 最右侧 Maven Projects,就可以看到我们新添加的 tomcat7 插件,双击 tomcat7 插件下 tomcat7:run 命令直接运行项目 -->
</plugins>
</build>
maven坐标和仓库对应的映射关系:[groupId]\[artifactId]\[version]\[artifactId]-[version].jar
去本地仓库看一下此目录:org\springframework\spring-core\4.3.4.RELEASE\spring-core-4.3.4.RELEASE.jar
依赖范围
scope就是依赖的范围
compile
,默认值,适用于所有阶段(开发、测试、部署、运行)provided
,只在开发、测试阶段使用,目的是不让 Servlet 容器和你本地仓库的 jar 包冲突 。如 servlet.jar。runtime
,只在运行时使用,如 JDBC 驱动,适用运行和测试阶段。test
,只在测试时使用,用于编译和运行测试代码。不会随项目发布。system
,类似 provided,需要显式提供包含依赖的 jar 文件的路径,Maven 不会在 Repository 中查找它,不推荐使用。
依赖范围 | 对于编译 classpath 有效 | 对于测试 classpath 有效 | 对于运行时 classpath 有效 | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | spring-core |
test | - | Y | - | Junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | JDBC 驱动 |
system | Y | Y | - | 本地的 |
idea 开发 maven 项目
idea 的 的 maven 配置:File --> Settings --> Build, Execution, Deployment --> Build Tools --> Maven
。
创建 Maven 项目速度慢问题
IDEA 根据 maven archetype
的本质,其实是执行 mvn archetype:generate
命令,该命令执行时,需要指定一个 archetype-catalog.xml
文件。
该命令的参数 -DarchetypeCatalog
,可选值为:remote
,internal
(内置的,即 maven-archetype-plugin
内置的 archetypeCatalog
文件),local
(本地的,即本地 ~/.m2/
下的 archetypeCatalog
文件)等,用来指定 archetype-catalog.xml
文件从哪里获取。
默认为 remote
,即从 http://repo1.maven.org/maven2/archetype-catalog.xml 路径下载 archetype-catalog.xml
文件。
可以在 Maven --> Runner --> VM Options
,增加参数:-DarchetypeCatalog=internal
创建 Maven 项目
普通 Java 项目,勾选 Create from archetype
(可选,最后生成的目录结构不一样),选择 maven-archetype-quickstart
。
web 项目,勾选 Create from archetype
),选择 maven-archetype-webapp
。
填写 GroupId
(公司名称),ArtifactId
(项目名),Version
(版本),剩下的默认即可。最后生成的目录不完整,需自己手动补上。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com
文章标题:Maven 学习
文章字数:1.8k
本文作者:Bin
发布时间:2019-08-26, 21:41:45
最后更新:2019-09-11, 21:42:24
原始链接:http://coolview.github.io/2019/08/26/Java/Maven%20%E5%AD%A6%E4%B9%A0/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。