Maven入门实战笔记04-仓库

 

仓库

区分 坐标和依赖与仓库

构件的逻辑表示方式:坐标和依赖

构件的物理表示方式:文件(Maven通过仓库来统一管理文件)

 

1.仓库

Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库

2.仓库的布局

groupId/artifactId/version/artifactId-version.packaging

3.仓库的分类

本地仓库

默认本场仓库目录 :用户名/.m2/repository

自定义本地仓库目录地址,编辑文件~/.m2/settings.xml

 

<settings>
  <localRepository>D:\java\respository</localRepository>
</settings>

 将本地项目的构件装到Maven仓库中

mvn clean install

 该命令将项目的构件输出文件安装到本地仓库中

 

远程仓库

安装好 Maven后,本地仓库目录是不存在的,当输入第一条Maven命令后,Maven才会创建本地仓库,根据配置和需要,从远程仓库下载构件至本地仓库

中央仓库

Maven必须知道至少一个可用的远程仓库

中央仓库是一个默认的远程仓库,Maven安装文件自带了中央仓库的位置

%M2_HOME%/lib/maven-model-builder-3.0.5.jar中

org\apache\maven\model\pom-4.0.0.xml

 

  <repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

 包含这段配置的文件是所有Maven项目都会继承的超级POM

 

私服

一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用

优点:节省自己的外网带宽、加速Maven构建、部署第三方构件、提高稳定性,增强控制、降低中央仓库的负荷

4.远程仓库的配置

配置JBoss Maven仓库,在POM中配置

 

<project>
	<repositories>
		<repository>
			<id>jboss</id>
			<name>JBoss Repository</name>
			<url>http://repository.jboss.com/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
		</repository>
		<snapshots>
			<enabled>false</enabled>
			<updatePolicy>daily</updatePolicy>
			<checksumPolicy>ignore</checksumPolicy>
		</snapshots>
		<layout>default</layout>
	</repositories>
</project>

 

 

如上配置:Maven只会从JBoss仓库下载发布版的构件,而不会下载快照版的构件

default表示仓库的布局是Maven2及Maven3的默认布局,而不是Maven1的布局(不明白)

updatePolicy:daily(默认),never,always,interval:X(每隔X分钟检查一次更新)

checksumPolicy:warn(默认),fail,ignore

远程仓库的认证

配置仓库信息可以直接配置在POM文件中,认证信息必须配置在settings.xml中(POM往往被提交到代码仓库中供所有成员访问的,而settings.xml一般只放在本机)

demo,编辑settings.xml

 

<settings>
	<servers>
		<server>
			<id>my-proj</id>
			<username>admin</username>
			<password>password</password>
		</server>
	</servers>
</settings>

 

 

部署至远程仓库

Maven对项目进行编译、测试、打包外,还能将项目生成的构建部署到仓库中

编辑项目的pom.xml文件

 

<project>
	<distributionManagement>
		<repository>
			<id>proj-releases</id>
			<name>Proj Release Repopsitory</name>
			<url>http://192.168.1.100/content/repositories/proj-releases/</url>
		</repository>
		<snapshotRepository>
			<id>proj-snapshots</id>
			<name>Proj Snapshot Repopsitory</name>
			<url>http://192.168.1.100/content/repositories/proj-snapshots/</url>
		</snapshotRepository>
	</distributionManagement>
</project>

需要认证时,需配置认证信息

 

配置正确后,运行命令

mvn clean deploy

 

 

5.快照版本

为什么区分发布版和快照版?例小张开发模块A的2.1版本,小季开发模块B,B依赖于A,小张需要将最新的构建输出,交给小季,供其开发和集成高度,工作如何进行?

Maven的快照版本机制:

小张将模块A的版本设定为2.1-SNAPSHOT,然后发布到私服中,在发布过程中,Maven会自动为构件打上时间戳。如2.1-20130309.233559-12表示2013年03月09日23点35分59秒的第12次快照;小季配置对于模块A的2.1-SNAPSHOT的最新构件,当发现有更新时便进行下载。默认情况下,Maven每天检查一次更新(由仓库配置的upldatePolicy控制),用户也可以使用命令行-U参数强制让Maven检查更新,如

mvn clean install -U

 当项目需要发布时,将快照版本更改为发布版本。例如将2.1-SNAPSHOT更改为2.1,表示该版本已经稳定且对应了唯一的构件;2.1-SNAPSHOT往往对应了大量的带有不同时间戳的构件,这也决定了其不稳定性

 

快照版本只应该在组织内部的项目或模块间依赖使用(组织对于这些快照版本的依赖具有完全的理解及控制权)

项目不应该依赖于任何组织外部的快照版本依赖(快照版本的不稳定性,造成潜在危险)

6.从仓库解析依赖的机制

仓库元数据groupId/artifactId/versionmaven-metadata.xml

RELEASE:最新发布版本

LATEST:最新版本(包含快照)

依赖声明中使用LATEST和RELEASE是不推荐的做法(因为Maven随时都可能解析到不同的构件)

7.镜像

如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像

如:http://maven.net.cn/content/groups/public/是中央仓库http://repo1.maven.org/maven2/在中国的镜像,由于地理位置的因素,该镜像往往能够提供比中央仓库更快的服务

编辑settings.xml

 

<settings>
	<mirrors>
		<mirror>
			<id>maven.net.cn</id>
			<name>one of the central mirrors in China</name>
			<url>http://maven.net.cn/content/groups/public</url>
			<mirrorOf>central</mirrorOf>
		</mirror>
	</mirrors>
</settings>

 <mirrorOf>值为central表示该配置为中央仓库的镜像

注:http://maven.net.cn/content/groups/public/这个镜像现在好像不能用了

 

如镜像需要认证,也可以基于该id配置仓库认证

镜像的一个常见应用:结合私服

如:

<settings>
	<mirrors>
		<mirror>
			<id>internal-repository</id>
			<name>Internal Repository Manager</name>
			<url>http://192.168.1.100/maven2/</url>
			<mirrorOf>*</mirrorOf>
		</mirror>
	</mirrors>
</settings>

 <mirrorOf>值为星号,表示该配置是所有Maven仓库的镜像,任何远程仓库的请求都会被转至http://192.168.1.100/maven2/。

 

如果该镜像仓库需要认证,则配置一个id为internal-repository的<server>即可

更高级的镜像配置:

 

<mirrorOf>*</mirrorOf>			匹配所有远程仓库
<mirrorOf>external:*</mirrorOf>		匹配所有远程仓库,使用localhost、file://协议的除外,即匹配所有不在本机上的远程仓库
<mirrorOf>repo1,repo2</mirrorOf>	匹配仓库repo1和repo2
<mirrorOf>*,!repo1</mirrorOf>		匹配所有远程仓库,repo1除外

 

 

注意:由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库出问题时,Maven仍将无法访问被被镜像仓库,因而将无法下载构件

8.仓库的搜索服务

Sonatype Nexus    http://repository.sonatype.org/

Jarvana                  http://www.jarvana.com/jarvana/

MVNbrowser         http://mvnbrowser.com/

MVNrepository      http://mvnrepository.com/

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

@author Free Coding http://ln-ydc.iteye.com/

 

 

你可能感兴趣的:(maven)