框架相关 maven
Maven 学习笔记(2017.6.21)
修复 Eclipse 可能出现的报错
Eclipse Java JRE 配置[缺省值 VM]
-Dmaven.multiModuleProjectDirectory=$M2_HOME
Maven 目录结构
src
main
java
resources
test
java
resources
Maven 常用命令解析
- mvn -v 查看maven版本
- mvn compile 编译
- mvn test 测试
- mvn package 打包
- mvn clean 删除target
- mvn install 安装到本地代码仓库
- mvn deploy 上传到私有服务器代码仓库
Maven 使用archetype创建项目:
1.archetype:generate
命令: mvn archetype:generate
………………
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 981:【此处回车】
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6: 【此处输入6】
………………
Define value for property 'groupId': 【此处输入com.amos.maven01】
Define value for property 'artifactId': 【此处输入maven01-service】
Define value for property 'version' 1.0-SNAPSHOT: : 【此处输入1.0.00SNAPSHOT】
Define value for property 'package' com.amos.maven01: : 【此处输入com.amos.mavendemo01】
Confirm properties configuration:
groupId: com.amos.maven01
artifactId: maven01-service
version: 1.0.0
package: com.amos.mavendemo01
Y: : 【此处输入y】
2. archetype:generate 拼接参数
-DgroupId=组织名(公司网址的反写+项目名)
-DartifactId=项目名-模块名
-Dversion=版本号
-Dpackage=代码所存放的包名
命令:
mvn archetype:generate -DgroupId=com.amos.maven -DartifactId=maven-service -Dversion=1.0.0SNAPSHOT -Dpackage=com.amos.service
………………
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 981:【此处回车】
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6: 【此处输入6】
[INFO] Using property: groupId = com.amos.maven
[INFO] Using property: artifactId = maven-service
[INFO] Using property: version = 1.0.0SNAPSHOT
[INFO] Using property: package = com.amos.service
Confirm properties configuration:
groupId: com.amos.maven
artifactId: maven-service
version: 1.0.0SNAPSHOT
package: com.amos.service
Y: : 【此处输入y】
Maven 命令详解
mvn compile
【命令执行完毕后创建一个target文件,并且把Java文件编译成class文件,
注意:compile不是complier,也不是complie】
mvn package
【对项目进行打包,执行完毕后, 会在target文件夹下面生成jar包:***.jar】
java -cp target/maven-service-1.0.0.jar com.amos.service.App
【此时一般是测试的,不出错的话会输出hello world!注意:jar包一定要带上.jar】
integration-test 处理package以便需要时可以部署到集成测试环境;
verify
检验package是否有效并且达到质量标准;install
安装package到本地仓库,方便本地其它项目使用;deploy 部署,拷贝最终的package到远程仓库和替他开发这或项目共享,在集成或发布环境完成。
总结 · Maven 命令创建项目五步走:
mvn archetype:generate -DgroupId=com.amos.maven -DartifactId=eBeyDemo -Dversion=1.0.0SNAPSHOT -Dpackage=com.amos.ebuy
mvn compile
mvn test
mvn package
java -cp target/eBeyDemo-1.0.0SNAPSHOT.jar com.amos.ebuy.App
详解 Maven 核心文件:pom.xml
pom:Project Object Model (项目对象模型)
示例:
<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">
【POM 的版本号,现在都是 4.0.0 的,必须得有,但不需要修改】
<modelVersion>4.0.0</modelVersion>
【以下三个合起来就是该 Maven 构件的坐标,
这个坐标在 Maven 仓库中对应唯一的 Maven 构件】
<groupId>com.amos.maven</groupId>组织名
<artifactId>eBeyDemo</artifactId>构件名
<version>1.0.0SNAPSHOT</version>版本号
【表示该项目的打包方式,war表示打包为 war 格式,
默认为jar,表示打包为 jar 格式】
<packaging>jar</packaging>
【表示该项目的名称与 URL 地址,意义不大,可以省略】
<name>eBeyDemo</name>
<url>http://maven.apache.org</url>
【<properties>配置信息(一般定义常量,例如版本号)
常量:<junit.version>3.8.1</junit.version>
调用:${junit.version}】
<properties>
<junit.version>3.8.1</junit.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
【定义该项目的依赖关系,其中每一个 dependency 对应一个 Maven 构建,Maven坐标唯一标识。
加载时会依次加载,先在本地查找,找不到到Maven中央仓库找,再找不到就会报错。
最下边有<scope>属性,表示作用域(后边会详解)】
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
【build:表示与构建相关的配置,一般是引入插件】
<build>
<!-- 插件列表 -->
<plugins>
<plugin>
<!-- 插件也是通过坐标唯一标识的,可以在下边网址中搜索 -->
<!-- http://mvnrepository.com/ -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
</plugin>
<!-- 也可以定义java的jdk版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<!-- 继承(后边会详解) -->
<parent></parent>
<!-- 聚合(后边会详解) -->
<modules>
<moudle></moudle>
</modules>
</project>
Maven 远程仓库地址
首先到Maven安装路径中的以下路径
E:\allocation_resource\apache-maven-3.5.0\lib\maven-model-builder-3.5.0.jar
打开压缩包,到压缩包中的以下路径
maven-model-builder-3.5.0.jar\org\apache\maven\model
打开目录最下边的pom-4.0.0.xml文件
pom-4.0.0.xml也就是maven的超级pom
也就是我们的pom.xml中固定行中所指
<modelVersion>4.0.0</modelVersion>
pom-4.0.0.xml中的url就是目标
https://repo.maven.apache.org/maven2
Maven 六种值,范围解析:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
依赖三个范围:编译 测试 运行,六种值:
- compile:默认的,编译、测试、运行都有效
- provided:编译、测试有效
- runtime(运行):测试和运行时有效
- test:仅测试有效
- system:编译、测试有效(与本机系统相关联,移植性差)
- import:表示继承过来的依赖
Maven 当依赖发生冲突时,会遵循下边两个原则:
- 短路径优先
- 优先声明优先
…… 一、多重继承,使用类型相同但版本不同jar,短路径优先。
如果 A 继承自 B,B 继承自 C,C 为根, B 中引入hello2.0.jar,
C 中引入 hello2.4.jar,那么 A 中的jar就会是 hello2.0.jar二、优先声明优先
如果 A 继承自 B 和 C, B 中引入 hello2.0.jar,C 中引入 hello2.4.jar,在引入jar的时候,先引入 C , 再引入 B,那么 A中的jar就会是 hello2.4.jar
Maven 依赖管理
我们知道,maven的依赖关系是有传递性的。如:A–>B,B–>C。
但有时候,项目A可能不是必需依赖C,因此需要在项目A中排除对C的依赖。 在maven的依赖管理中,有两种方式可以对依赖关系进行:
可选依赖 Optional Dependencies,以及依赖排除DependencExclusions
<project........>
<!-- A依赖B,排除B的依赖C -->
<groupId>com.amos.maven</groupId>
<artifactId>BuyDemo-A</artifactId>
<version>1.0.0SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.amos.maven</groupId>
<artifactId>BuyDemo-B</artifactId>
<version>1.0.0SNAPSHOT</version>
<!-- 设置依赖是否可选 -->
<optional>true</optional>
<!-- 排除依赖传递列表,
也就是排除依赖中引用的依赖 -->
<executions>
<execution>
<groupId>com.amos.maven</groupId>
<artifactId>BuyDemo-C</artifactId>
</execution>
</executions>
</dependency>
</dependencies>
<project>
聚合与继承
一、聚合,使用modules--module(当一个项目聚合了其他多个时,当前这个执行mvn clean install,
以下三个项目会依次执行install命令)
<modules>
<module>../maven01-service</module>
<module>../maven01-moudle</module>
<module>../maven01-action</module>
</modules>
二、继承,使用dependencyManagement/parent
以下作为本Maven项目中所有构件的父类
<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.amos.maven</groupId>
<artifactId>eBeyDemo</artifactId>
<version>1.0.0SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>3.8.1</junit.version>
</properties>
</project>
上边是父类,下边的maven构件继承自父类,用<parent>标签
<parent>
<groupId>com.amos.maven</groupId>
<artifactId>eBeyDemo</artifactId>
<version>1.0.0SNAPSHOT</version>
<parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
查看项目中引入的jar
mvn dependency:list