Blog诞生记
Android studio构建项目有时候build.gradld构建缓慢,严重影响了开发心情,这仅是次要因素,最重要的是leader为了考虑团队发展,建议搭建Maven私服,把项目模块化,按照module各自维护,把module push到maven私服,后续开发将依赖搭建的maven私服来开发,服从leader要求,开始了maven学习之路,先了解了maven基础知识,再搭建maven私服,测试zbar二维码扫描上传module和依赖私服module,便学编写,blog就此诞生了..
Maven基础知识
下载地址(注意JDK要求1.7+)
http://maven.apache.org/download.cgi
配置环境变量
校验安装maven环境搭建
cmd命令行输入命令
mvn -v
Maven与HelloWorld
先来认识Maven项目的目录层次结构
根据上图结构目录,先新建idea.analyzesystem.maven包,再分别在其下家新建HelloWorldHelper.java和HelloWorldTest.java类,在完成上述内容后开始编写pom.xml文件,pom.xml文件的基本框架
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
</project>
编写pom文件首先呢项目定位
<groupId></groupId> // 项目包名
<artifactId></artifactId> // 模块名称,建议使用项目名称
<version></version> // 版本号
其次呢项目如果用了第三方包需要在pom里面声明,比如HelloWorld示例(代码下载链接在文末)用到了junit,需要在pom声明如下(如果你项目有用到其他的包,直接参照下列代码结构编辑即可)
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
最后把pom.xml文件放置到src文件夹同级目录,运行cmd命令行,切换到项目下面,执行命令
mvn compile
如果你是第一次执行该命令会看到如下图效果(会下载很多包)
当你看到下图效果表示编译ok了
运行测试用例 mvn test 命令
项目编译后会在src同级目录默认生成一个target文件夹,target内部结构目录如下
我们在运行mvn package命令生成jar包,build success之后再回到target目录如下
Maven 核心知识
Clean与install命令
mvn clean // 删除编译生成的target文件夹
install命令
mvn install //把 mvn package 生成的jar包安装到本地
根据以上只是进行了一次小实践,编译生成一个jar供一个工程调用,操作步凑如下
这里简单贴一下pom.xml文件
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>idea.analyzesystem.maven2</groupId>
<artifactId>maven-simple2</artifactId>
<version>0.0.1SANPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>idea.analyzesystem.maven</groupId>
<artifactId>maven-simple</artifactId>
<version>0.0.1SANPSHOT</version>
</dependency>
</dependencies>
</project>
自动构建目录骨架(archetype插件)
首先创建项目目录,再进入命令提示符使用archetype命令(第一次运行会执行一些下载依赖)
mvn archetype:generate
在选择好版本后,开始配置基本信息。
以上是一次配置信息完成自动构建,我们也可以通过一条命令直接配置完成构建。
mvn archetype:generate -DgroupId=xxx -DartifactId=xx -Dversion=xxx -Dpackage=xxx
Maven的坐标与仓库
Maven根据pom文件配置的坐标,现在本地查找,如果找不到就回去中央仓库查找。
在Maven安装的目录下找到lib目录下的maven-model-builder-3.3.9.jar,用压缩工具打开跟进目录你会发现pom-4.0.0.xml,所有的pom文件都继承自它
根据浏览器预览可以发现中央仓库地址
https://repo.maven.apache.org/maven2/
https://search.maven.org/ //这里同样可以访问,可以检索出你想要的jar
天朝的网络壁垒,我们常常无法访问国外服务器,但是可以通过访问镜像达到目的,maven在天朝是有镜像仓库的,我们可以直接访问国内镜像仓库,这样访问速度更快更稳定。那么如何访问国内镜像仓库呢?打开安装目录下的conf目录,找到settting.xml配置文件,定位到如下图位置
提供了一个默认配置镜像示例,根据示例修改添加镜像配置如下:
<mirrors>
<mirror>
<id>maven.net.cn</id>
<mirrorOf>central</mirrorOf>
<name>Central mirror in china</name>
<url>http://maven.net.cn/content/groups/public</url>
</mirror>
</mirrors>
这里额外提供几个镜像配置(个人用lattern就不需要镜像了)
<mirror>
<id>nexus-osc</id>
<mirrorOf>central</mirrorOf>
<name>Nexus osc</name>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
<mirror>
<id>osc_thirdparty</id>
<mirrorOf>thirdparty</mirrorOf>
<url>http://maven.oschina.net/content/repositories/thirdparty/</url>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
添加上面的中央仓库镜像以后,访问都直接访问镜像中央仓库,而原中央仓库将不再访问。
根据坐标从中央仓库找到的jar等下载到本地仓库,默认c盘目录下,如下图
跟进目录就可以发现自己install的jar,如idea 之前install的helloworld相关的jar
这些文件我们一般都不会放在c盘,都会自定义目录存放,那么如何更改仓库位置呢?同样离不开setting.xml
<localRepository>D:\workspace\maven\maven-repo</localRepository> //路径
// 把setting.xml文件拷贝一份到该目录下
Maven插件安装就不多说了,对个人来说没啥意思,下面来看看pom.xml的元素标签
<project> <modeIVersion> <groupId> <artifactId> <packaging> <version>
//之前用过了这些标签,这里提一下version: "0.0.0" ,第一位表示大版本号,第二位表示分支版本号,第三位表示小版本号。
<name> //标签指项目描述名称
<url> //项目地址
<description> //项目描述
<developers> //开发人员信息
........
<dependencies> //依赖列表
一个项目可能有多个依赖jar或者第三方工程,这里使用pom就需要添加多个依赖项<dependency>
<scope> //依赖范围 ,限定作用域
<option> //值:true false(默认) 设置依赖是否可选
<exclusions> //排除依赖传递列表 a依赖b依赖c ,a排除依赖c就只依赖b
<build> //构建
<plugins> //插件列表 子标签插件<plugins>
<parent> //聚合子模块,可以一起编译
<modules> //原理同上
依赖范围、依赖冲突、聚合与继承暂不做过多学习了,日后再说吧,如果你想了解可以上imooc上面搜maven相关视频教程,基础了解到此就好。
Nexus下载与安装
下载地址
http://www.sonatype.com/download-oss-sonatype
安装下一步就好,端口号个人用的默认配置8081,你可以修改适合的端口号(如果你是下载zip,需要自己配置环境变量相关的),安装好以后浏览器打开地址
http://localhost:8081/
使用默认登陆账号admin,密码:admin123
完成登陆后创建一个仓库如下图
完善上面信息创建成功如下
这个路径很重要,在后面会有提到,对于上面选择maven2-(hosted)你有疑问,可以参考下面一篇blog
Nexus与Android Studio
上面体验了一把Nexus,创建仓库,现在需要通过Android Studio项目,找到module zbar二维码扫描module,把他上传到创建好的Idea里面去,流程请参考下面博客(做人不能太无耻了,劳动成果我不能随意切去别人的哈)
补充两点:
url路径组成就是上面我截图标出,build.gradle里面的路径也是指向这里,有个误区我看他blog里面提到的是”xxx/xxx/xx-id”,本人测试栽进去了
命令执行在这里
上传ok以后再通过下面流程可以查看
compile的组成
compile com.zbar.lib:zbar:1.0
小结
maven私服搭建是非常有必要的,好处不多说,谁用谁知道!!本周学习进度缓慢,下周尽量加快进度,小逗逼要休假一天了,周一见..