1:Maven目录分析 bin:含有mvn运行的脚本 boot:含有plexus-classworlds类加载器框架 conf:含有settings.xml配置文件 lib:含有Maven运行时所需要的java类库 Settings.xml 中默认的用户库: ${user.home}/.m2/repository[通过maven下载的jar包都会存储到指定的个人仓库中] Maven默认仓库下载地址在: maven的lib目录下maven-model-builder-3.0.4.jar的pom.xml中
2:创建目录结构:
Hello
--src
-----main
----------java --用来存放Java文件
----------resources --用来存放资源文件
-----test
---------java --用来存放测试的Java文件
---------resources
--target --项目输出位置,编译完毕后自动生成
--pom.xml -- 项目对象模型的描述 ,它是maven配置的核心
3:建立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/xsd/maven-4.0.0.xsd">
<!-- 当前pom的版本号 -->
<modelVersion>4.0.0</modelVersion>
<!-- groupId: 当前jar所属的命名空间 -->
<groupId>cn.bie.maven</groupId>
<!-- 当前项目模块名称 -->
<artifactId>Hello</artifactId>
<!-- 当前项目的版本, SNAPSHOT镜像版 -->
<version>0.0.1-SNAPSHOT</version>
<!-- 当前模块需要依赖的相关jar包,也称为依赖管理, 所有被依赖的包都是通过"坐标"定位的 -->
<dependencies>
<!-- 需要依赖junit 通过 groupId+artifactId+version来查找,如果本地没有则到中央仓库下载 -->
<dependency>
<!-- 当前jar所属的命名空间 -->
<groupId>junit</groupId>
<!-- 依赖的项目模块的名称 -->
<artifactId>junit</artifactId>
<!-- 依赖的版本号 -->
<version>4.9</version>
<!-- 依赖的范围, 有 test compile privlege。test依赖的jar包的使用范围,当测试的时候使用该jar包,正式发布,删除这个 -->
<scope>test</scope>
</dependency>
</dependencies>
</project>
4:Maven核心概念:
4.1:Maven插件
Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的每个插件都能实现多个功能,每个功能就是一个插件目标
Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务, Maven的插件在: .m2\repository\org\apache\maven\plugins
4.2:Maven坐标
类似在平面几何中坐标(x,y)可以标识平面中唯一的一点, Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范
拥有了统一规范,就可以把查找工作交给机器
groupId:定义当前Maven项目隶属项目 (实际对应JAVA的包的结构, 是main目录里java的目录结构)
artifactId:定义实际项目中的一个模块(项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称)
version:定义当前项目的当前版本
4.3:Maven仓库
何为Maven仓库:用来统一存储所有Maven共享构建的位置就是仓库
Maven配置jar包的路径为:groupId/artifactId/version/artifactId-version
本地仓库(~/.m2/repository/):每个用户只有一个本地仓库
中央仓库(Maven默认的远程仓库):Maven默认的远程仓库下载地址为:http://repo1.maven.org/maven2
私服:是一种特殊的远程仓库, 它是架设在局域网内的仓库, 主要是为了团队协作开发
镜像:用来替代中央仓库, 速度一般比中央仓库快
4.4:软件构建生命周期,maven软件构建的生命周期
清除--> 编译-->测试-->报告-->打包(jar\war)-->安装-->部署。
maven生命周期命令插件(命令:mvn clean):clean--compile--test--package--install-deploy。
maven坐标:maven通过坐标的概念来唯一标识jar包或者war包
1:Maven官网:http://maven.apache.org/
Maven远程仓库:http://search.maven.org/
2:Maven是一个采用纯Java编写的开源项目管理工具,Maven采用了一种被称之为Project Object Model(POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的配置文件中。通过该文件Maven可以管理项目的整个生命周期,包括,清除,编译,测试,报告,打包,部署等等。目前,Apache下绝大数项目都已经采用Maven进行管理,而Maven本身还支持多种插件,可以很方便的控制项目,开发人员的主要任务应该是关注商业逻辑并去实现它,而不是把时间浪费到在学习如何在不同的环境中去依赖jar包,项目部署等等。Maven正是为了将开发人员从这些任务中解脱出来而诞生的。
3:Maven能够做什么???
jar的声明式依赖性管理;
项目自动构建,项目发布;
4:Maven的下载,安装,配置,如下所示:
4.1:百度搜索Maven,然后找到Maven的官网,即Apache的官网:
找到Download,然后找到下图箭头所示的apache-maven-3.5.0-bin.zip;
4.2:下载完成之后直接找到一个适合的目录解压缩即可,然后找到maven的bin目录,如下所示,复制一下,然后在你的电脑里面的环境变量里的path配置一下,如在path的后面加上;G:\baidu\maven\apache-maven-3.5.0\bin即可;记住前面那个英文分号哈。还需要配置的就是JAVA_HOME,这个之前配置jdk的话应该是配置的,如果没配置,就配置一下,这个里面是jdk的路径,如:E:\Android_java_resouce\jdk1.7
4.3:上面配置好之后验证一下maven是否配置成功即可,在命令行测试maven的版本,如:mvn -version;出现如下所示即可;
4.4:这里需要声明的是,Eclipse配置Maven需要看看Eclipse的版本,最新版的Eclipse已经集成了Maven,所以不再需要安装Maven插件了,直接使用即可,这里简单说一下;
4.4.1:首先打开Eclipse(Mars版本),然后选择Window--->Preferences--->Maven
4.4.2:然后选择installations--->Add--->Directory
4.4.3:点击Directory,选择Maven解压缩的路径,如下演示所示:然后点击finish即可。
4.4.4:之后将刚才添加的打上对号,点击apply,然后点击ok即可。
4.4.5:这里说明一点,因为开始java使用的是jdk外面的jre,但是出错了,这里改成jdk1.7文件里面的jre即可。如下所示:
Window--->Preferences--->Java--->Installed JREs--->Add--->Standard VM
4.4.6:点击Standard VM之后出现如下所示的,点击Directory,之后选择jdk1.7以及以上的目录,选择Finish即可。
设置User setting,如下所示,在eclipse的preferences——>maven—–>user settings中有两个配置:
global settings :本机器的配置,使用这台机器的所有用户都是用这个配置;
user settings :当前用户的配置;
5:测试安装,配置的Maven,检查自己安装配置是否成功;
5.1:首先创建一个Maven工程;File--->New--->Other
5.2:点击Other之后,找到Maven,然后Maven--->Maven Project,然后点击Next;
5.3:点击next之后默认即可,选择Next;
5.4:点击next之后点击下面那个quickstart;然后点击next即可;
在构件向导的时候选择quickstart注意, 此向导也是插件,第一次使用的时候.也要从远程仓库中下载相应的jar包, 因此需要网络环境;
如果创建web项目选择下面这个即可:
5.5:点击next之后出现如下所示的,然后将Group id和Artifact id填上,然后点击Finish即可;
groupId:定义当前Maven项目隶属项目 (实际对应JAVA的包的结构, 是main目录里java的目录结构)
artifactId:定义实际项目中的一个模块(项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称)
version:定义当前项目的当前版本
5.6:点击Finish之后出现如下所示的,点击打开pox.xml,然后点击pom.xml可以看这个pom.xm配置文件。
5.7:右击pom.xml,然后Run as,然后Maven build;
5.8:如下演示所示,如果没有报错,说明编译成功;
5.9:如下所示,如果package没有出现错误,那么说明打包成功;
6:Maven常用的命令,坐标,仓库,镜像仓库:
6.1:Maven常用的命令:
mvn -v(mvn -version):查看maven的版本;
mvn compile:编译
mvn test:测试
mvn package:打包
mvn clear:删除target
mvn install:安装jar包到本地仓库中
6.2:Maven的坐标:坐标构件,如groupId,artifactId,version。
6.3:Maven的仓库分为本地仓库和远程仓库(https://repo.maven.apache.org/maven2):
6.4:镜像仓库(国外的可能无法访问,如果不FQ的话,但是可以访问国内的镜像仓库),使用默认即可,这里不用管即可;
6.5:更改仓库的位置,这点很重要,maven默认存放在C盘(你可以看看存在C盘这个位置:C:\Users\bhlgo\.m2\repository),这点很不好,你修改到自己需要的位置,最好别存放到C盘哈,修改如下所示:在apache-maven-3.5.0\conf\找到settings.xml这个xml文件,然后按照下面的操作即可。修改之后保存即可,最后最好再将修改好的settings.xml复制一份到刚才创建的仓库即:C:\Users\bhlgo\.m2\repository,因为这样以后再更新maven的版本就不用再修改settings.xml了。好了,大功告成,赶紧测试,看看仓库是否已经修改成功了(使用上面的5.7进行测试即可哦)。
6.6:使用阿里的镜像,加快下载速度:你别说,阿里还真强。中国良心企业啊;修改如下所示:
修改位置:maven/apache-maven-3.5.0/conf/setting.xml里面的镜像位置;
1 <!--阿里镜像--> 2 <mirror> 3 <id>nexus-aliyun</id> 4 <mirrorOf>central</mirrorOf> 5 <name>Nexus aliyun</name> 6 <url>http://maven.aliyun.com/nexus/content/groups/public</url> 7 </mirror>
"万事开头难,开好头,万事都不难",令我十分感概的是,最近老贾负面新闻,频出不凡,不知道这个大boss能不能如史大哥一样翻身啊。
后续maven,使用maven创建struts项目测试:(将一些比较适合新手的补一下:)
1:File--->New--->Other--->Maven--->Maven Project--->next--->org.apache.maven.archetypes maven-archetype-webapp 1.0--->next--->如下图--->finish
2:创建好之后会报错,很正常,然后在src/main下面创建一个java文件夹,然后在src下面创建一个test文件夹,然后在test文件夹下面创建一个java文件夹;创建好之后还会报错,然后将pom.xml修改一下(这是比较完整的pom.xml);
第4行:<groupId>com.bie.maven</groupId>
第5行:<artifactId>struts_20170506</artifactId>
第280行:<finalName>struts_20170506</finalName>
这三行修改成自己的项目名和组织名即可
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>com.bie.maven</groupId> 5 <artifactId>struts_20170506</artifactId> 6 <packaging>war</packaging> 7 <version>0.0.1-SNAPSHOT</version> 8 <name>shop Maven Webapp</name> 9 <url>http://maven.apache.org</url> 10 11 <!-- <repositories> <repository> <id>nexus</id> <name>my-nexus-repository</name> 12 <url>http://127.0.0.1:8088/nexus-2.9.0/content/groups/public/</url> <releases> 13 <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> 14 </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> 15 <id>nexus</id> <name>my-nexus-repository</name> <url>http://127.0.0.1:8088/nexus-2.9.0/content/groups/public/</url> 16 <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> 17 </snapshots> </pluginRepository> </pluginRepositories> --> 18 <properties> 19 <java-version>1.8</java-version> 20 <junit-version>4.8.2</junit-version> 21 <org.springframework-version>3.2.4.RELEASE</org.springframework-version> 22 <jackson-mapper-asl-version>1.9.12</jackson-mapper-asl-version> 23 <jackson-core-asl-version>1.9.12</jackson-core-asl-version> 24 <mysql-connector-java-version>5.1.8</mysql-connector-java-version> 25 <org.mybatis-version>3.2.7</org.mybatis-version> 26 <org.mybatis-spring-version>1.2.2</org.mybatis-spring-version> 27 <opensymphony-version>2.4.2</opensymphony-version> 28 <freemarker-version>2.3.9</freemarker-version> 29 <c3p0-version>0.9.1.2</c3p0-version> 30 <commons-collections-version>1.0</commons-collections-version> 31 <commons-fileupload-version>1.2.2</commons-fileupload-version> 32 <org.apache.commons-version>3.1</org.apache.commons-version> 33 <commons-codec-version>1.6</commons-codec-version> 34 <dom4j-version>1.6.1</dom4j-version> 35 <javax.servlet-version>1.2</javax.servlet-version> 36 <aspectjweaver-version>1.6.6</aspectjweaver-version> 37 <slf4j-log4j12-version>1.6.6</slf4j-log4j12-version> 38 <log4j-version>1.2.16</log4j-version> 39 <javax.servlet-jsp-version>2.0</javax.servlet-jsp-version> 40 <cglib-version>2.2.2</cglib-version> 41 <slf4j-api-version>1.6.6</slf4j-api-version> 42 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 43 </properties> 44 <dependencies> 45 <!-- with junit4.8.2 --> 46 <dependency> 47 <groupId>junit</groupId> 48 <artifactId>junit</artifactId> 49 <version>${junit-version}</version> 50 <type>jar</type> 51 </dependency> 52 <!-- with spring --> 53 <dependency> 54 <groupId>org.springframework</groupId> 55 <artifactId>spring-core</artifactId> 56 <version>${org.springframework-version}</version> 57 </dependency> 58 <dependency> 59 <groupId>org.springframework</groupId> 60 <artifactId>spring-web</artifactId> 61 <version>${org.springframework-version}</version> 62 </dependency> 63 <dependency> 64 <groupId>org.springframework</groupId> 65 <artifactId>spring-test</artifactId> 66 <version>${org.springframework-version}</version> 67 </dependency> 68 <dependency> 69 <groupId>org.springframework</groupId> 70 <artifactId>spring-aspects</artifactId> 71 <version>${org.springframework-version}</version> 72 </dependency> 73 <dependency> 74 <groupId>org.springframework</groupId> 75 <artifactId>spring-context-support</artifactId> 76 <version>${org.springframework-version}</version> 77 </dependency> 78 <dependency> 79 <groupId>org.springframework</groupId> 80 <artifactId>spring-web</artifactId> 81 <version>${org.springframework-version}</version> 82 </dependency> 83 84 <dependency> 85 <groupId>org.springframework</groupId> 86 <artifactId>spring-webmvc</artifactId> 87 <version>${org.springframework-version}</version> 88 </dependency> 89 <dependency> 90 <groupId>org.springframework</groupId> 91 <artifactId>spring-jdbc</artifactId> 92 <version>${org.springframework-version}</version> 93 </dependency> 94 <dependency> 95 <groupId>org.springframework</groupId> 96 <artifactId>spring-tx</artifactId> 97 <version>${org.springframework-version}</version> 98 </dependency> 99 <dependency> 100 <groupId>org.springframework</groupId> 101 <artifactId>spring-instrument</artifactId> 102 <version>${org.springframework-version}</version> 103 </dependency> 104 <dependency> 105 <groupId>org.springframework</groupId> 106 <artifactId>spring-instrument-tomcat</artifactId> 107 <version>${org.springframework-version}</version> 108 </dependency> 109 <!--springmvc 转 Json --> 110 <dependency> 111 <groupId>org.codehaus.jackson</groupId> 112 <artifactId>jackson-mapper-asl</artifactId> 113 <version>${jackson-mapper-asl-version}</version> 114 </dependency> 115 <dependency> 116 <groupId>org.codehaus.jackson</groupId> 117 <artifactId>jackson-core-asl</artifactId> 118 <version>${jackson-core-asl-version}</version> 119 </dependency> 120 <!--freemarker --> 121 <dependency> 122 <groupId>freemarker</groupId> 123 <artifactId>freemarker</artifactId> 124 <version>${freemarker-version}</version> 125 </dependency> 126 <!-- with mybatis-spring --> 127 <dependency> 128 <groupId>org.mybatis</groupId> 129 <artifactId>mybatis</artifactId> 130 <version>${org.mybatis-version}</version> 131 </dependency> 132 <dependency> 133 <groupId>org.mybatis</groupId> 134 <artifactId>mybatis-spring</artifactId> 135 <version>${org.mybatis-spring-version}</version> 136 </dependency> 137 <!-- jdbc driver --> 138 <dependency> 139 <groupId>mysql</groupId> 140 <artifactId>mysql-connector-java</artifactId> 141 <version>${mysql-connector-java-version}</version> 142 </dependency> 143 <!-- connect pool with c3p0 --> 144 <dependency> 145 <groupId>c3p0</groupId> 146 <artifactId>c3p0</artifactId> 147 <version>${c3p0-version}</version> 148 </dependency> 149 <!-- apache commons jar --> 150 <dependency> 151 <groupId>commons-collections</groupId> 152 <artifactId>commons-collections</artifactId> 153 <version>${commons-collections-version}</version> 154 </dependency> 155 156 <dependency> 157 <groupId>commons-fileupload</groupId> 158 <artifactId>commons-fileupload</artifactId> 159 <version>${commons-fileupload-version}</version> 160 </dependency> 161 162 <dependency> 163 <groupId>org.apache.commons</groupId> 164 <artifactId>commons-lang3</artifactId> 165 <version>${org.apache.commons-version}</version> 166 </dependency> 167 168 <dependency> 169 <groupId>commons-codec</groupId> 170 <artifactId>commons-codec</artifactId> 171 <version>${commons-codec-version}</version> 172 </dependency> 173 <!-- analyze xml use dom4j --> 174 <dependency> 175 <groupId>dom4j</groupId> 176 <artifactId>dom4j</artifactId> 177 <version>${dom4j-version}</version> 178 </dependency> 179 <!-- about servlet --> 180 <dependency> 181 <groupId>javax.servlet</groupId> 182 <artifactId>jstl</artifactId> 183 <version>${javax.servlet-version}</version> 184 </dependency> 185 186 187 <dependency> 188 <groupId>taglibs</groupId> 189 <artifactId>standard</artifactId> 190 <version>1.1.2</version> 191 </dependency> 192 <dependency> 193 <groupId>javax.servlet</groupId> 194 <artifactId>javax.servlet-api</artifactId> 195 <version>3.0.1</version> 196 <scope>provided</scope> 197 </dependency> 198 <dependency> 199 <groupId>org.slf4j</groupId> 200 <artifactId>slf4j-log4j12</artifactId> 201 <version>1.6.6</version> 202 </dependency> 203 <dependency> 204 <groupId>log4j</groupId> 205 <artifactId>log4j</artifactId> 206 <version>1.2.17</version> 207 </dependency> 208 209 <dependency> 210 <groupId>org.slf4j</groupId> 211 <artifactId>slf4j-api</artifactId> 212 <version>1.6.6</version> 213 </dependency> 214 <dependency> 215 <groupId>javax.activation</groupId> 216 <artifactId>activation</artifactId> 217 <version>1.1.1</version> 218 </dependency> 219 220 <!-- memcached --> 221 <dependency> 222 <groupId>com.google.code.maven-play-plugin.spy</groupId> 223 <artifactId>memcached</artifactId> 224 <version>2.4.2</version> 225 </dependency> 226 <dependency> 227 <groupId>cglib</groupId> 228 <artifactId>cglib</artifactId> 229 <version>${cglib-version}</version> 230 </dependency> 231 <dependency> 232 <groupId>net.fckeditor</groupId> 233 <artifactId>java-core</artifactId> 234 <version>2.6</version> 235 </dependency> 236 <dependency> 237 <groupId>org.json</groupId> 238 <artifactId>json</artifactId> 239 <version>20131018</version> 240 </dependency> 241 242 243 <dependency> 244 <groupId>com.sun.jersey</groupId> 245 <artifactId>jersey-client</artifactId> 246 <version>1.18.1</version> 247 </dependency> 248 <dependency> 249 <groupId>jsptags</groupId> 250 <artifactId>pager-taglib</artifactId> 251 <version>2.0</version> 252 </dependency> 253 254 <dependency> 255 <groupId>net.sourceforge.jexcelapi</groupId> 256 <artifactId>jxl</artifactId> 257 <version>2.6.10</version> 258 </dependency> 259 260 <dependency> 261 <groupId>opensymphony</groupId> 262 <artifactId>oscache</artifactId> 263 <version>2.4.1</version> 264 </dependency> 265 <dependency> 266 <groupId>javax.servlet</groupId> 267 <artifactId>servlet-api</artifactId> 268 <version>2.4</version> 269 <scope>provided</scope> 270 </dependency> 271 272 <dependency> 273 <groupId>org.apache.struts</groupId> 274 <artifactId>struts2-core</artifactId> 275 <version>2.3.8</version> 276 </dependency> 277 278 </dependencies> 279 <build> 280 <finalName>struts_20170506</finalName> 281 <plugins> 282 <plugin> 283 <groupId>org.apache.tomcat.maven</groupId> 284 <artifactId>tomcat7-maven-plugin</artifactId> 285 <version>2.2</version> 286 <configuration> 287 <url>http://localhost:8080/manager/text</url> 288 <username>admin</username> 289 <password>123</password> 290 </configuration> 291 </plugin> 292 </plugins> 293 </build> 294 </project>
错误分析:将上面做好之后我的报了一个错,然后我将本地仓库里面的dom4j删除之后重新去pom.xml保存一下,然后就解决这个错误问题了;
Failure to transfer dom4j:dom4j:jar:1.6.1 from http://maven.aliyun.com/nexus/content/groups/public was cached in the local repository, resolution will not be reattempted until the update interval of nexus-aliyun has elapsed or updates are forced. Original error: Could not transfer artifact dom4j:dom4j:jar:1.6.1 from/to nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public): Failed to transfer http://maven.aliyun.com/nexus/content/groups/public/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar. Error code 503, Service Unavailable
org.eclipse.aether.transfer.ArtifactTransferException: Failure to transfer dom4j:dom4j:jar:1.6.1 from http://maven.aliyun.com/nexus/content/groups/public was cached in the local repository, resolution will not be reattempted until the update interval of nexus-aliyun has elapsed or updates are forced. Original error: Could not transfer artifact dom4j:dom4j:jar:1.6.1 from/to nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public): Failed to transfer
3:然后修改一下src/main/webapp/web-inf/web.xml文件, 修改成如下即可:不然不支持el表达式:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> 3 <display-name>Archetype Created Web Application</display-name> 4 5 6 7 8 9 10 </web-app>
4:最后测试允许即可,上面讲过,这里不叙述了;最需要注意的就是jdk的问题,
4.1:上面的4.4.5也说明这种情况
或者使用下面这种方法解决jdk的问题;
4.2:修改jre的版本:
第一步:打开官网:http://maven.apache.org/
第二步:点击:maven plugins--->compiler--->
Example--->Compile Using -source and -target javac Options
第三步:之后:右键项目maven--->update project;
第四步:看着官网给的指导,将下面的第一种方式复制到自己的pom.xml里面的url标签和dependencies标签之间即可;
第二种方式在build标签之间,自己看清楚即可;
1 <!-- pom修改jre的版本,第一种方式 --> 2 <properties> 3 <maven.compiler.source>1.7</maven.compiler.source> 4 <maven.compiler.target>1.7</maven.compiler.target> 5 </properties> 6 7 <!-- pom修改jre的版本,第二种方式 --> 8 <plugins> 9 <plugin> 10 <groupId>org.apache.maven.plugins</groupId> 11 <artifactId>maven-compiler-plugin</artifactId> 12 <version>3.6.1</version> 13 <configuration> 14 <source>1.7</source> 15 <target>1.7</target> 16 </configuration> 17 </plugin> 18 </plugins> 19
初识maven就告一段落了,还有很多事情等着自己去解决呢,加油~~~
5:Maven私服:
1:关于中央仓库注意事项 地址: 目前来说: http://repo1.maven.org/maven2/是真正的Maven中央仓库的地址,该地址内置在Maven的源码中其他的都是镜像 索引: 中央仓库带有索引文件以方便用户对其进行搜索,完整的索引文件大小约为60M,索引每周更新一次 黑名单: 如果某个IP地址恶意的下载中央仓库内容,例如全公司100台机器使用同一个IP反复下载,这个IP(甚至是IP段)会进入黑名单,因此稍有规模的使用Maven时,应该用Nexus架设私服 2:为什么需要私服 为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库
图片描述如下所示:
6:Nexus环境搭建(是开源的框架,属于sonatype 机构的开源框架,用该框架架设maven 私有服务器):
官方网址:http://www.sonatype.org/nexus/
第一步:下载nexus-2.6.2.war包,然后拷贝到tomcat下的webapps目录中,把nexus.war 包放到tomcat的webapp下面;
第二步:启动tomcat,tomcat7有点慢 ,浏览且登录,默认登录账户密码为: admin admin123
第三步:访问http://localhost:8080/项目名称,就是自己的nexus的名称/
7:认识repository:
Nexus仓库的默认的地址, nexus-2.1.2\WEB-INF\plexus.properties 中定义的在Views/Repositories-->Repositories里进行配置, nexus里可以配置3种类型的仓库,分别是proxy、hosted、group; proxy:是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用。代理仓库 :代理中心仓库的jar包。 Hosted:是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,ojdbc6.jar,在central repository是获取不到的,就需要手工上传到hosted里,宿主仓库 ,该仓库属于该公司私有的。 Group:是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了右边那个Repository Path可以点击进去,看到仓库中artifact列表。不过要注意浏览器缓存。我今天就发现,明明构件已经更新了,在浏览器里却看不到,还以为是BUG,其实是被浏览器缓存了 virtual:也是中央仓库镜像,支持M1老版本。
8:每个仓库的作用:
Central Repository:
最关键的一个配置, 就是Central Repository的proxy配置,因为大部分的构件,都是要通过这个proxy得到的,
3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库,第三方的jar包,但是该jar包没有在中心仓库保存,驱动.jar。
Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库,测试版本、镜像版本 easyNet.war。
Central: 用来代理maven中央仓库中发布版本构件的仓库。
Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库。
Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库。
Releases: 用来部署管理内部的发布版本构件的宿主类型仓库,发行版本。
Snapshots:用来部署管理内部的快照版本构件的宿主类型仓库。
具体如下图所示:
9:通过私服上传下载jar包,上传jar包:
1 (1):直接上传jar包,通过网站直接上传。 2 (2):把myEclispe项目上传到私服。 3 (3):从私服中依赖jar包(下载jar包)。
配置Hosted Repository:
一般会配置3个hosted repository, 分别是3rd party、Snapshots、Releases,分别用来保存第三方jar(典型的比如ojdbc6.jar),项目组内部的快照、项目组内部的发布版, 这里并没有什么特别的配置,只是Deployment Policy这个选项,一般Snapshots会配置成允许,而Releases和3rd party会设置为禁止;
配置group repository
前面说过group其实是一个虚拟的仓库, 通过对实体仓库(proxy、hosted)进行聚合, 对外暴露一个统一的地址这里要注意的是,放到左边的仓库,才是会被聚合的仓库;
使用浏览器上传如下所示:
上传成功以后会弹出一个框提示你上传成功了,如何验证上传成功了,如下所示:
最后在pom.xml里面配置相应的配置即可;
待续......