Maven->解决包依赖的问题
下载maven,解压,配置PATH
Maven简单的流程
pom.xml
对于项目需要配置三个元素
- 项目名称<groupId>cn.edu.zttc.maven.hello</groupId>
- 项目模块<artifactId>hello-first</artifactId>
- 版本<version>SNAPSHOT-0.0.1</version>快照模版(特殊模版)
- 模型版本<modelVersion>4.0.0</modelVersion>
Maven的所有的类都必须放在src/main/java下面
package cn.edu.zttc.hello
public class Hello {
public String sayHello(String name) {
Return “hellol:”+name;
}
public static void main(String[] args) {
System.out.println(“hello world!”);
}
}
设置在config下面的settings.xml,对所有项目都起作用
<localRepository>d:/java/maven/repo</localRepository>
然后把settings.xml文件拷贝到这个目录下面
这个命令在本地仓库中有就本地运行,没有从远程目录下载运行
进入pox所在文件夹 输入mvn compile
会产生一个target文件,对类进行了编译操作
测试目录
src/test/java建一个测试类
package cn.edu.zttc.hello;
import org.junit.*;
import static junit.framework.Assert.*;
import cn.edu.zttc.hello.*;
public class TestHello {
@Test
Public void testHello() {
Hello h = new Hello();
assertEquals(h.sayHello(“zs”) , “hello:zs”);
}
}
===运行mvn test
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
指定项目有个依赖
Mvn clean(执行这个命令)
Mvn clean package(编译、测试、自动打包)
Mvn clean install(会把项目拷到本地仓库中)
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<scope>compile</scope>
</dependency>
在不同的项目中,可以有效的进行项目管理
- Mvn安装
下载maven的3.0.4版本
设置环境变量中的path
- 本地仓库的安装
修改maven目录下的conf中的setting.xml(指明本地的一个路径)
- 新建一个简单项目,主要创建xml
(主要包括,项目坐标)
groupId用来表示项目的名称
artifactId用来表示项目的模块名称建议使用项目的名称+模块名称来表示
version项目版本
- 创建代码和测试代码
源代码应该放入src/main/java中
测试代码应该放入src/test/java中
源代码的资源文件放入src/main/resources中
测试代码的资源文件放入src/test/resources中
- 运行
Mvn-clean->表示运行清理操作(会默认把target文件夹中的数据清理)
Mvn clean compile ->表示运行清理之后运行编译,会把代码编译到target文件中
Mvn clean test ->运行清理测试
Mvn clean package->运行清理和打包(包名为项目名称+版本名称)
Mvn clean install ->运行清理和安装(会将打好的包安装到本地仓库中,以便其他的项目可以调用)
Mvn clean deploy->运行清理和发布(发布到私服上面)
仓库的依赖管理
分模块的开发项目,ant最主要的问题(依赖管理不好管理)
Mvn archetype可以自动有效的项目骨架创建
Mvn archetype: generate
- maven项目的生成方式
默认sts和myeclipse都自带了maven的支持
Eclipe中需要安装m2eclipse
Maven有三大部分组成
- 依赖
- 仓库
- 生命周期和插件
推荐《maven实战》徐晓斌
第一部分依赖讲解
创建maven项目
模块划分
Core->vo
Dao
Log
Service
第一个模块
Group Id: org.konghao.user
Artifact Id: user-core
依赖包的查询
所有的依赖都是通过坐标进行存储的(GAV->groupid, artifactid, version)
有一些网上的仓库提供了坐标的查询
mvnrepository.com
创建hibernat依赖
创建资源文件src/main/resources
第二个模块user-log
第三个模块user-dao
它需要运用哪些东西(user-core)传递性依赖
Maven是如何搜索依赖的?首先去本地仓库查询如果本地仓库没有,就去中央仓库查询。
Maven依赖范围<scope>,依赖传递
依赖是会传递的
a->c b->a ==>b->c(这种依赖是基于compile这个范围进行传递)
如果没有写scope默认就是compile
如果scope是test,那么依赖就不会传递
<scope>的作用域有哪写。
依赖的范围
- test范围指的测试范围有效,在编译和打包时都不会使用
- compile范围指的是编译范围有效,在编译和打包时都会将依赖存储进去(默认的依赖)
- provide指的是在编译和测试的时候有效,最后生成war包是不会加入,比如:servlet-api(因为tomcat等web服务器已经存在了,如果再打包会冲突)
- runtime在运行时依赖,在编译时不依赖
a->b1.0 c->b1.2
d->a,c这样就会冲突,(这时在d的pom中,哪个依赖先写,就使用先写依赖的版本)
第四个模块user-service
首先依赖于user-dao、user-log
a–>b1.0
c–>b1.1
d–>a和c
f–>d,c,如果路径的长短不一致就选择最短的,这时f->依赖b 1.1
<dependency>
<exclusions>
<exclusion>
</exclusion>
</exclusions>
<dependency>
如果希望精确的控制依赖包,可以使用依赖的排除功能<exclusions>
依赖的聚合和继承问题
第五个模块user-aggregation,将所有的模块聚合编译打包
<packaging>pom</packaging>
<modules>
<module>../user-core</module>
<module>../user-dao</module>
<module>../user-log></module>
<modue>../user-service<module>
</modules>
<properties>
<junit.version>4.0</junit.version>
</properties>
第六个模块user-parent
其他模块可以继承这个模块的pom.xml
<parent>
<groupId>org.konghao.user</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../user-parent/pom.xml</relativePath>
</parent>
<dependencyManagement>
</dependencyManagement>
对于依赖的继承而言都需要dependencyManagement,如果不管理,子类会全部继承,这种可能会导致一些模块存在不需要的依赖
转载请注明:学时网 » maven听课笔记总结(一)