Maven教程,一篇带你走入“内行”!

Maven教程

Maven 翻译为"专家"、"内行",是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:
POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。Maven 是一个项
目管理工具,可以对 Java 项目进行构建、依赖管理。Maven 也可被用于构建和管理各种项目,例如 C#,
Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持
的独立 Apache 项目。

一,分布式

传统项目部署:
1.新建一个项目,通过不同的包区分不同的模块
2.把这一个项目发布服务器的 tomcat 中

分布式项目部署(适用于高负载情况下)
1.把一个完整的项目拆分成多个项目,把拆分后的项目分别部署到对应的服务器( tomcat )中的过程就叫做分布式项目部署
2.把传统项目包换成一个单独的项目

二,Ant

Ant 和 Maven 都是项目构建工具

在项目的运行编辑打包等过程都需要依赖于 Ant 构建工

eclipse 默认使用的是 Ant ,项目根目录下的 .project 文件即为 Ant 的配置文件

三,Maven
Maven简介

基于 Ant 的构建工具,Ant 有的功能 Maven 都有,额外添加了其他功 能

本地仓库:计算机中一个文件夹,自己定义是哪个文件夹

中央仓库:网上地址 https://repo1.maven.org/maven2/ (下载速度慢 -> 配置国内镜像)

保证 JDK 版本和开发环境一致,如果不配置 1.4 或 1.5

坐标
1.每一 jar 文件都有一个唯一坐标,通过坐标可以精确确定是哪 个 jar
2.坐标组成:
Group ID: 公司名.公司网址倒写
Artifact ID: 项目名
Version: 版本

pom
1.英文名称( Project Object Mode )
2.项目对象模型:
A.把 project 当作对象看待
B.通过 Maven 构建工具可以让对象(项目)和对象(项目)之 间产生关系

网址(查看定位坐标)
http://mvnrepository.com

Maven初始化

eclipse 环境默认集成 Maven

eclipse (开启,修改) Maven 版本和版本切换:Window -> Preferences -> Maven -> Installations (勾选相应
版本即可,如果要额外添加其它版本点击 add)

settings.xml ( Window -> Preferences -> Maven -> User Settings ) 中需要配置的内容

设置本地仓库(示例语法)
<localRepository>D:/maven/r2/myrepository</localRepository>

修改 JDK 版本保证 JDK 版本和开发环境一致,如果不配置 1.4 或 1.5( JDK1.7 示例)

<profile>
<id>jdk-1.7</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>

修改镜像地址(不使用 nexus 时配置)(默认国外镜像,速度慢,修改为阿里云镜像)

<mirror>
<id>alimaven</id>
<name>aliyunmaven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>

创建Maven项目

New -> Maven Project

勾选复选框( Create a simple project(skip archetype selection) ),表示创建一个简单的 Maven 项目(不应用
任何模板)

填写项目信息
Artifact

Group Id:一般公司名.公司网址倒写(例如:com.lls)

Artifact Id:项目名(例如:test)

Version:版本, 0.0.1-SNAPSHOT 为 0.0.1 快照版,可以忽略,也可以修改为版本( 0.0.1 ),因为一般
快照版(快照机制)只在私服的时候有作用

Packaging:项目的类型,最终会被打包成什么类型
jar:java 项目
war:web 项目
pom:逻辑父项目,只要一个项目有子项目必须是 pom 类型

Name:项目名字,一般只在远程发布的时候有作用(一般忽略)

Description:项目描述信息,一般只在远程发布的时候有作用(一般忽略)
Parent Project:一般只在创建子项目的时候才需要配置
Advanced:一般忽略

Maven项目目录结构(jar 类型)

src/main/java :真实目录( src/main/java )的快捷目录,写 java 代码

src/main/resources :真实目录( src/main/resources)的快捷目录
1.存放配置文件
2.虽然看见 resources 但是里面所有配置文件最终会被编译放入到 classes 类路径( java 项目会被编译放入项目根目录)

src/test/java :写测试 java 代码(无关紧要)

src/test/resources :测试的配置文件夹(无关紧要)

pom.xml:Maven 的配置文件
当前项目所依赖的其他项目或 jar 或插件等

注意:无论是 java 视图还是 javaee 视图,src/main/java 下都有 main 和 resources ,只是 java 视图看不见(默认
隐藏)

Maven项目之间的关系
依赖关系

标签 把另一个项目的 jar 引入到当过前项目

自动下载另一个项目所依赖的其它项目

继承关系

父项目是 pom 类型

子项目jar或war,如果子项目还是其他项目的父项目,子项目也 是 pom 类型

有继承关系后,子项目中出现 <parent> 标签
如果子项目和 <groupId>和 <version>与父项目项目,在子项目中可以不配置 <groupId>和
<version>

父项目 pom.xml 中是看不到有哪些子项目,在逻辑上具有父子 项目关系.

<parent>
<groupId>com.bjsxt</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>

聚合关系

前提是继承关系,父项目会把子项目包含到父项目中

子项目的类型必须是 MavenModule 而不是 mavenproject

新建聚合项目的子项目时,点击父项目右键新建 Maven Module

具有聚合关系的父项目,在 pom.xml 中 <modules>

<modules>
<module>child2</module>
</modules>

具有聚合关系的子项目,在 pom.xml 中 <parent>

<parent>
<groupId>com.bjsxt</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>

聚合项目和继承项目区别

在语意上聚合项目父项目和子项目关系性较强

在语意上单纯继承项目父项目和子项目关系性较弱

<dependencyManagement> 写在父项目

作用:声明可能使用到的所有 jar

子项目中只需要有坐标的 <groupid> 和 <artifactid> , <version> 继承父项目

在父项目中 <properties> 把所有版本好进行统一管理

父项目 pom.xml
A. <properties> 子标签名称自定义
B. ${名字} 引用标签的值

<properties>
<spring-version>4.1.6.RELEASE</spring-version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-version}</version>
</dependency>
</dependencies>
</dependencyManagement>

子项目

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
</dependencies>

创建 war 类型项目

创建 mavenproject 时选择 packaging 为 war

在 webapp (类似普通项目的 webContent 文件夹) 文件夹下新建 META-INF 和 WEB-INF/web.xml (不需要创
建 lib 因为Maven 项目的依赖包统一由 pom.xml 进行管理)

在 pom.xml 中添加 javaee 相关的三个 jar (基础的 web 包)
<scope> jar有效范围 provided 表示编译期生效,不会打包发布到 tomcat 中,因为 tomcat 中默认
有,打包过去的话会有冲突

<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>

配置 tomcat 插件( Maven 从仓库加载的一个独立 tomcat ),父项目中 <plugins> 也可以用
<pluginManagement> 括起来表示不立即引入到子项目中,子项目如果需要的话可以再单独引入,子项目引入
时的版本号标签要去掉,也起到了父项目统一管理子项目插件版本的目的

<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 控制 tomcat 端口号 -->
<port>80</port>
<!-- 项目发布到 tomcat 后的名称 -->
<!-- / 相当于把项目发布名称为 ROOT -->
<!-- /abc -->
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>

右键项目 -> run as -> maven build -> Goals 中输入
clean tomcat7:run
注意:不注明版本 7 默认是版本 6

资源拷贝插件

maven 默认只把 src/main/resources 里面的非.java 文件进行编译到 classes 中,而 src/main/java 下的
Mapper.xml 或者其它配置文件就会解析不到,只配置 src/main/java 的解析的话,src/main/resource 又会
解析不到,所以需要两个(存在配置文件的目录)全部配置

如果希望 src/main/java 下的文件也被编辑到 classes 中,在 pom.xml 中配置(下面内容配置在 <build>中 )

<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>

热部署

简介:通过热部署配置,可以便捷地把本地项目发布到远程的 tomcat (发布会不用重启 tomcat 就能看到效果)

修改 tomcat/conf/tomcat-users.xml 添加 tomcat 角色(确保 tomcat 中有自带的那个 manager 项目)

<rolerolename="manager-gui"/>
<rolerolename="manager-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script"/>

在 Maven 项目的 pom.xml 中 tomcat 插件的 <configuration>里配置

<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 控制 tomcat 端口号 指 Maven 里的 tomcat 端口,热部署时这项不生效 -->
<port>80</port>
<!-- 项目发布到 tomcat 后的名称 -->
<!-- / 相当于把项目发布名称为 ROOT -->
<!-- /abc -->
<path>/jqk</path>
<username>tomcat</username>
<password>tomcat</password>
<url>http://192.168.139.128:8080/manager/text</url>
</configuration>
</plugin>
</plugins>

右键项目 -> run as -> maven build (以前写过,选择第二个) -> 输入
tomcat7:deploy :第一次发布(目标 tomcat 没有同名项目)
tomcat7:redeploy :非第一次发布(目标 tomcat 有同名项目,会覆盖原来的同名项目)

打包项目成war包

右键要打包的项目,选择 Run As -> Maven install (也可以先运行 Maven clean 命令清一下缓存)

控制台提示打包成功后,会显示打包后 war 包的路。径地址

刷新工程,在 target 中发现打包好的 war 包,并且复制 war 包,放入tomcat 的 webapps 中,因为 war 包
的名字过长,放入 webapp 时可以修改其名字

补充知识

当 @RequestMapping("/")控制器注解无法进入时,可尝试在 web.xml 中做如下配置

<welcome-file-list>
<welcome-file></welcome-file>
</welcome-file-list>

强行解释:不配置欢迎列表内容,项目默认走 index.jsp ,所以需要配置欢迎页,把默认页改为空,这样根路径请
求才能走控制器


如果大家对于学习Java有任何问题(学习方法,学习效率,如何就业),可以随时来咨询我,这是我的Java交流学习扣扣群:六三零,四七三,七一 一。 多多交流问题,互帮互助,群里有不错的学习教程和开发工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值