Maven配置本地仓库和镜像仓库
- 配置本地仓库路径
默认: ~/.m2/repository
修改: install_home/conf/settings.xml
<settings ..>
<localRepository></localRepository>
</settings>
-
通过maven创建项目
mvn archetype:generate
提示:
groupId 如: com.corpname.project
artifactId: moduleName
版本/包名/确认 回车 -
配置镜像仓库// mirrorOf * 所有jar都从这里取
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
- 使用maven创建的项目默认使用JDK1.5,修改JDK
<profile>
<id>jdk-1.8</id>
<activation>
<jdk>1.8</jdk>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
Maven项目创建
1.2 常用操作
archetype 根据模板创建maven项目骨架
clean 清理(删除target目录)
--------------------------------------------------------------
compile 编译 (运行前先切换到项目目录)
package 打包(此命令包含了compile的动作)
install 安装(此命令包含了package的动作) 供本地仓库使用
deploy 发布 供中央仓库使用 需要仓库地址/账号/密码
site 生成关于项目介绍的网页
2.web项目创建 命令: mvn archetype:generate 10
2.1 目录结构
|-project
|-src //程序代码
|-main //主代码
|-java //源码根目录(需要自己创建)
|-resources //资源配置文件夹
|-webapp //相当于传统的WebRoot
|-WEB-INF
|-web.xml
|-pom.xml //maven核心配置文件
2.2 常用操作
同1.2
mvn tomcat:run #如果本地没有tomcat,可以使用命令下载插件来部署
-
生命周期
build过程: 清理,编译,测试,打包,集成测试,部署
三套生命周期: clean, default, site #互相独立没有以来,每个生命周期包含多个阶段
default: compile->test->package #阶段之间有依赖 -
IDE中使用Maven
4.1 eclipse for JAVAEE 默认支持
4.2 My Eclipse 默认支持
** 指定自己的maven安装目录,制定maven配置文件
4.3 IDEA 默认支持
设置:
指定maven安装目录/配置文件路径/仓库路径
plugins->buid tools->maven->import->import maven projects automatically
pom.xml详解
- 坐标解释
<!-- 坐标 定位唯一
groupId: 域名组织反向
artifactId: 模块
version: 版本
-->
<groupId>com.test.shop</groupId>
<artifactId>mall</artifactId>
<version>1.0-SNAPSHOT</version>
-
如何查找坐标
官方:search.maven.org
第三方: mvnrepository.com
阿里云:maven.aliyun.com/nexus
Spring仓库: repo.spring.io -
作用域
compile 该依赖可以在整个项目中使用,参与打包,部署 。 默认值
test 该依赖只能在测试代码中能使用,并且不参与打包,部署。 如: JUnit
provided 该依赖编写源代码时需要,但不需要打包和部署,因为服务器上有。 如: tomcat里面就自带。
runtime 该依赖编写时不需要,但是打包,部署时需要。 如: 数据库驱动, 反射机制动态加载。
system 该依赖使用本地系统路径下的jar包,不是仓库中的jar。 如:oracle驱动,因为版权原因不能放到中央仓库。
配置参考:
<scope>system</scope>
<systemPath>${basedir}/lib/xxxx.jar</systemPath>
- 全局属性
<properties>
<xxx.version>1.0.0</xxx.version>
</properties>
<dependency>
<version>${xxx.version}</version>
</dependency>
- 配置远程仓库: 有些最新的jar包或者私服上自己定义的jar在中央仓库中没有,则使用这样的方式
依赖顺序: 本地仓库 -> pom.xml中配置的远程仓库 -> settings.xml中的远程仓库
<repositories>
<repository>
<id>xxxx</id>
<url>http://xxxxxxxxx</url>
</repository>
</repositories>
-
用来配置插件
-
超级pom.xml
所有的pom.xml都隐式继承了一个超级pom.xml, 所以会默认支持一些插件。 -
Maven中的关系
8.1 继承
一个maven项目可以继承自另一个maven项目,分别成为父项目,子项目。
场景: 多个子项目中使用相同的依赖或插件, 以达到统一管理和一致性的目的。
步骤:
8.1.1 父项目配置
<!--
jar:默认打包成jar包
war: web项目打包方式
pom: 父项目的打包方式
-->
<packaging>pom</packaging>
8.1.2 子项目中指定父项目的坐标
<parent>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<!-- 指定父项目pom.xml文件的相对物理路径 -->
<relativePath>../parentPoject/pom.xml</relativePath>
</parent>
8.1.3 依赖管理
父工程中配置:
<!-- 只进行管理,不让子项目默认继承依赖。子项目中引用指定的依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
...
</dependency>
...
</dependencies>
</dependencyManagement>
8.2 聚合(告诉父项目有哪些子项目)
将多个子项目添加到一个父项目中,然后能通过父项目进行操作,从而实现对所有聚合的子项目进行操作。
<!-- 指定被聚合的子项目的根目录 -->
<modules>
<module>../child1</module>
<module>../child2</module>
</modules>
8.3 依赖
8.3.1 依赖具有传递性
因为:项目A -> 项目B -> 项目C 所以: 项目A -> 项目C
8.3.2 依赖传递的控制
作用域: compile可以传递; test不可以
不传递:A->B B中配置为optional为true的不会被传递到A
不接收:A->B A中配置排除,表示不接收被传递的依赖:
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
-
maven防止jar包冲突
原则:
就近原则 A->B->C B和C定义了两个冲突的jar, 但是A通过就近原则会使用B中定义的jar。
优先定义原则 A->B->C 且 A->D B和D中定义了两个冲突的jar, 但是A通过优先定义(dependency顺序)原则使用jar。 -
maven的web项目
exploded 支持热部署,无需打包成war到tomcat.
使用tomcat插件:
10.1 search tomcat maven plugi
10.2
<plugin>
<configuration>
<path>/</path>
<port>8888<port>
</configuration>
</plugin>
-
使用Nexus搭建Maven私服
11.1 原因:
1) 为了安全,公司不许访问外网,是能通过特定的电脑访问外网。
2) 速度快,方便。
3) 存放公司自己的库。
11.2 Nexus工具
搭建步骤:
1) 解压缩并安装为系统服务 install-nexus.bat
2) 访问 localhost:8081/nexus
3) 仓库地址 http://localhost:8081/nexus/content/groups/public
4) 私服上配置阿里云
登入账号/密码:admin/admin123
添加第三方仓库地址:Repositories -> Add -> Proxy Repository
设置:remote storage location=http://maven.aliyun.com/nexus/content/groups/public
添加到查找列表 Public Repositories -> Configuration 并调整仓库查找顺序
5) 在Nexus上添加本地的jar包
Repositories -> Artifact Upload -
综合应用
12.1 分析
可以按业务分,按层次分,按业务和层次分
12.2 按层次分
父工程: demo-parent
dao:demo-dao
映射文件存放的两种方式:
1) 放置在resources目录。
2) 和java代码放置在一起, maven默认指挥对java代码进行包, 如果需要对配置文件也进行打包, 则需要额外配置。
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>false</filtering><!-- 是否存在排除过滤 -->
</resource>
<resource>
<directory>src/main/resources</directory><!-- resources需要重新配置, 否则不会打包 -->
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
service: demo-service
action: demo-action
步骤:
1) 创建父子工程 使用继承和聚合
2) 配置工程依赖