maven项目管理工具
使用maven的必要性
1.maven使用本地仓库存储jar包,所有项目都会共用仓库中的同一份jar包。
2.maven可以解决版本兼容问题,自动引入所需的兼容版本。
3.maven可以很方便的删除或是升级一些jar包,只需要在配置文件中删掉或更改版本号即可。
4.maven内置web server服务器,可以连接远程服务器,自动上传部署项目,一键切换服务器环境等。
5.目前github上有大量的开源项目,而他们都是maven项目。
maven安装
下载地址:http://maven.apache.org/download.cgi
下载后解压得到文件夹
bin目录:mvn的运行脚本mvn mvnDebug
boot目录:类加载器jar包
conf文件夹:setting.xml配置文件
lib文件夹:maven运行时需要的java类库
配置环境变量: 打开.bash_profile键入如下内容 vim ~/.bash_profile
# maven所在的目录
export M2_HOME=/Users/baidawei/maven
# maven bin所在的目录
export M2=$M2_HOME/bin
# 将maven bin加到PATH变量中
export PATH=$M2:$PATH
# 配置JAVA_HOME所在的目录,注意这个目录下应该有bin文件夹,bin下应该有java等命令
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
然后刷新配置 source ~/.bash_profile 输入mvn -v 查看是否配置成功
Maven仓库
Maven提供三种仓库 当获取jar包时,首先去本地仓库找,如果本地仓库没有 则去远程仓库(私服)去下载 如果还没有则去中央仓库(互联网)下载 再没有 那就真没有了...
1.本地仓库 自己维护
打开conf下的settings.xml 查找localRepository 有一个默认地址${user.home}/.m2/repository 修改本地仓库位置 更改此处位置为/users/baidawei/maven/repository
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <!-- localRepository | The path to the local repository maven will use to store artifacts. | | Default: ${user.home}/.m2/repository--> <localRepository>/users/baidawei/maven/repository</localRepository>
2.远程仓库(私服) 公司维护
3.中央仓库 maven团队维护
Idea集成了maven,默认使用的是内置的,我们可以配置全局setting,比如远程仓库地址,本地编译环境变量等。
打开settings,在输入框中搜索maven,修改maven文件夹,以及配置信息和仓储位置。
使用Idea编辑器创建maven项目
1.create New Project
2.左侧选择maven 勾选Create from archetype来创建一个简单的maven项目 ,在下拉选项中 选择webapp -> next
3.接下来填写maven的坐标 groupId(公司域名反写),artifactId(项目名),version(版本号)->next.
4.在面板中选择本地的maven文件夹->next->finish
5.在main文件夹下新建一个java文件夹 修改为源码文件夹 command+; ->Modules -> 选择java文件夹 点击marks as Sources
pom.xml配置
刚创建完的项目根目录有一个pom.xml文件 一般至少有三个部分
第一部分,项目坐标,信息描述等
<?xml version="1.0" encoding="UTF-8"?> <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文件的模型版本 --> <modelVersion>4.0.0</modelVersion> <!--项目打包发布的文件 --> <packaging>war</packaging> <!--项目描述 --> <name>sshTest</name> <!--com.公司网站 --> <groupId>com.david</groupId> <!--项目名 --> <artifactId>sshTest</artifactId> <!--版本 --> <version>1.0-SNAPSHOT</version> ...
第二部分,引入jar包
<dependencies> <!-- 自动生成的 意思是junit-3.8.1.jar引入项目中 --> <!--dependency标签:引入jar包到本地仓库 --> <dependency> <!--jar包在仓库中的坐标 --> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <!--scope作用范围 test指 只在测试时使用,发布时会忽略这个包(需要发布的包忽略这个设置) --> <scope>test</scope> </dependency> </dependencies>
第三部分,构建项目
<build> <!--打包文件名 --> <finalName>com</finalName> <!--插件 --> <plugins> <plugin> <!--坐标 --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <!--插件的参数 --> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> </project>
国内镜像下载(公司搭建私服禁用,会只从镜像找)
maven默认会从中央仓库下载jar包,这个仓库在国外,全世界的人都会去下载,所以下载速度很慢,可以使用国内镜像下载。
在settings.xml中配置,所有项目都会生效
<mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>
继承
如果项目有多个模块,都需要依赖相似的jar包,只需要创建一个父模块,在它的pom.xml文件中配置依赖jar包,功能模块只需要继承父模块,就可以自动得到其依赖的jar包,而不需要在每个模块中都重复的配置。
1.创建父模块 packaging必须选择pom,只有pom才能被继承。
2.编辑pom.xml配置好公共的依赖jar包后,执行maven install 将parent.pom安装到本地仓库
3.在子项目的pom.xml中不需要配置依赖,只要继承parent.pom的坐标,就可以自动依赖parent的所有jar包。
<parent> <groupId>xxx</groupId> <artifactId>xxx-parent</artifactId> <version>1.0-SNAPSHOT</version> </parent>
4.由于每个子模块的功能不同,如果直接继承父模块,可能会将不需要的多余的jar包也继承过来,可以在dependencies上加一级<dependencyManagement>,子模块可以选择性的继承。
5.在子模块中,配置parent继承后,不会自动去依赖,需要手动添加需要的依赖,只是不需要再配置版本号,便于在parent中统一管理jar包版本。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
安装nexus私服
官方下载地址:https://www.sonatype.com/download-oss-sonatype
1.上传到linux 解压到/usr目录 tar -xvf nexus-3.11.0-01-unix.tar.gz -C /usr 解压后mexus是核心文件夹 sonatype-work用来存储下载的jar包
2.进入bin目录 安装运行 ./nexus start
3.开启防火墙8081端口 firewall-cmd --zone=public --add-port=8081/tcp --permanent 修改后重启一下防火墙 firewall-cmd --reload
4.输入 ip:8081访问
5.登陆nexus耐克瑟斯 默认账号admin 密码admin123
6.点击最上面的齿轮按钮 -> 左边的repository-repositories可以看到当前仓库列表
列表中 format列:maven2是java仓库,nuget是.net仓库
type列:proxy是代理仓库,hosted是宿主仓库,group是仓库组
代理仓库proxy: 局域网内用户首先从代理仓库下载jar包,如果没有就去远程仓库下载到代理仓库
修改 代理仓库的默认下载地址(设置镜像下载):点击列表中的maven-central代理仓库,出现设置页面,将remote storage修改为 阿里镜像 http://maven.aliyun.com/nexus/content/groups/public/
回到列表页,点击右边的copy按钮,复制仓库地址粘贴到pom.xml中 设置如下
<repositories> <repository> <id>central</id> <name>central</name> <url>http://10.211.55.5:8081/repository/maven-central/</url> </repository> </repositories>
如果 之前在settings.xml中设置了镜像仓库,需要注释掉,代理仓库才会生效。
点击齿轮旁边的方块->选择下面的browse菜单-》点击maven-central仓库 下载jar包会在这里 ,局域网内其他人可以直接从这里下载,而不需要外网
宿主仓库hosted:与代理仓库相反,他没有远程仓库,自己就是终点。主要用于多模块开发时,将某一模块代码打成jar包,发布到宿主仓库,其他项目成员可以从这个仓库下载你的模块jar包,在其他模块中使用这个模块类的功能。
在pom.xml中设置发布仓库如下
<distributionManagement> <repository> <id>releases</id> <name>releases</name> <url>http://10.211.55.5:8081/repository/maven-releases/</url> </repository> </distributionManagement>
在setting.xml中设置账号和密码,id要和上面的对应,匿名用户只有读取的权限,没有发布的权限
<servers> <servers> <server> <id>releases</id> <username>admin</username> <password>admin123</password> </server> </servers> </servers>