Maven 一般用户配置

来源:互联网 发布:nga 删淘宝 编辑:程序博客网 时间:2024/06/10 07:38

1.坐标
2.依赖
2.1依赖定义
2.2依赖传递
2.3依赖调解
2.4依赖优化
3.仓库
3.1本地仓库
3.2配置远程仓库
3.3远程仓库的认证
3.4部署到远程仓库
3.5镜像

一、坐标
1. groupId : 定义当前的实际项目,不应该对应组织或公司。
2.artifactId : 定义项目的一个模块,推荐做法是使用实际项目名称为前缀。如nexus-core,nexus为实际项目,core为模块
3.version: 版本
4.packaging : 定义打包方式,默认为jar

 <groupId>com.battlesky.qqphoto</groupId> <artifactId>qqphoto-transprotocol</artifactId> <version>0.0.1-SNAPSHOT</version>


二、依赖:

    <dependencies>          <dependency>              <groupId>junit</groupId>              <artifactId>junit</artifactId>              <version>4.10</version>              <type>jar</type>              <scope>test</scope>          </dependency>    </dependencies>

 1. 依赖定义(参考上面的demo)

1) 组件坐标(groupId,artifactId,version)
2) type :  依赖的类型,对应坐标中的packaging, 一般不用声明,默认为jar
3) scope:依赖范围 , Maven 项目在编译、测试、运行 分别用不同的classpath。依赖范围就是制定依赖的组件在哪个classpath 起作用。

a) complie: 对3种classpath都有效
b) test :  只对测试的calsspath有效
c) provided: 对编译测试 的classpath有效. 如servlet-api。运行时容器已提供,故只需对编译和测试有效。
d) runtime: 对运行和测试有效。 如 JDBC驱动
e) system:对编译测试的classpath有效,同 provided 。由于和本机系统绑定,不可移植, 一般不推荐使用

4) optional: 是否可选依赖。项目中用到2个相互排斥的依赖时用到,对依赖传递有影响。

5) exclusions: 用来排除传递性依赖,例如 A 依赖于B , B依赖于C的一般不稳定版本,则可以排除这个C,然后重定义对C稳定版本的依赖。

<dependencies>   <dependency>       ....       <exclusions>          <exclusion>             <groupId>...</groupId>             <artifactId>...</artifactId>       </exclusion>    </exclusions>  </dependency></dependencies>


 2.依赖传递
:主要针对依赖范围。

   A 依赖于B , B依赖于C , 则 A 对C的依赖范围为传递性依赖。这个有个表,一般不必太关心

   可选依赖不被传递

 3.依赖调解

   问题: 如 A -> B->C(1.0), A->D->C(2.0) ,那A依赖于C 1.0 or 2.0 ?

   原则 : 1) 短路径优先:谁依赖路劲短用谁 2) 当依赖路径长度一样,则第一声明优先:谁先声明用谁。( 这个纯粹是规定,没什么逻辑可言)

4. 依赖优化

1) 属性预定义: 相对于C里面的 #define。 对于多个依赖有相同的属性(比如版本),则可以:

<project>...<properties>   <springframework.version>2.5.6</springframework.version></properties><dependencies>    <dependency>        <groupId>A</groupId>        <version>${springframework.version}</version>    </dependency>    <dependency>        <groupId>B</groupId>        <version>${springframework.version}</version>    </dependency>    <dependency>        <groupId>C</groupId>        <version>${springframework.version}</version>    </dependency></dependencies></project>
这样有助于统一修改。(说白了 还是和#define作用一样)

2 ) 进一步优化,可以通过下面2个命令查看当前项目的依赖关系。

a)mvn dependency:list   列出所有依赖

b)mvn dependency:tree 列出依赖树

可以根据上面的信息进一步手动优化依赖。

三、仓库

仓库分本地仓库和远程仓库,其中最重要的远程仓库为中央仓库即maven的官方仓库。

1.本地仓库
本地仓库一般位于: 用户路径\.m2\repository\ 。可以通过修改用户路径\.m2\settings.xml 文件来改变本地仓库位置

<settings>    <localRepository>d:\myRepository</localRepository></settings>

2.配置远程仓库

<project>  ...  <repositories>    <repository>      <id>jboss</id>                                            <!----ID------>      <name>JBoss Repository</name>                             <!----名称---- >      <url>http://repository.jboss.com/maven2/</url>            <!----URL----->      <releases>        <enabled>true</enabled>                                 <!----开启发布版本的下载----->      </releases>    </repository>    <snapshots>      <enabled>false</enabled>                                  <!----关闭快照版本的下载----->      <updatePolicy>daily</updatePolicy>                        <!----可选,检查更新频率----->                        <checksumPolicy>ignore</checksumPoliy>                    <!----可选,检查检验和----->    </snapshots>    <layout>default</layout>  </repositories>  ...</project>

 1)updatePolicy : 检查更新的频率,可选值有:

daily :  每天检查一次
never: 从不检查
always: 每次构建都检查
interval:X : 每隔 X 分钟检查一次

2)checkssumPolicy : 检查检验和 失败时如何处理, 可选值有:

warn : 输出警告信息
fail : 让构建失败
ignore : 忽略检验失败

3.远程仓库的认证
仓库信息可以直接配置在POM文件中,但是认证信息必须配置在settings.xml文件中.

<settings>        ...     <servers>      <server>        <id>my-proj</id>                      <!--id必须与POM文件中的远程仓库id一致 --->      <username>repo-user</username>        <!---用户名--->      <password>repo-pwd</password>         <!---密码--->    </server>    </servers>    ...  </settings>  

4.部署到远程仓库

需要编辑项目的POM文件。添加distributionManagement元素. 对应快照版本和发布版本分别有不同的配置。

    <project>        ...        <destributionManagement>                        <repository>                             <!--发布版本的配置--->          <id>proj-releases</id>            <name>Proj Release Repository</name>            <url>http://192.168.1.100/content/repositories/proj-releases</url>          </repository>          <snapshotRepository>                     <!--快照版本的配置-->          <id>proj-snapshots</id>            <name>Proj Snapshot Repository</name>            <url>http://192.168.1.100/content/repositories/proj-snapshots</url>          </snapshotRepository>        </destributionManagement>        ...      </project>  

3.5镜像

镜像一般用途: 1.设置中央服务器的镜像,以便更快的的获得服务 2. 结合私服,让配置更简单,因为私服可以作为其他所有远程服务器的镜像。

镜像需要配置到setting.xml中

<settings>....
<mirrors>    <mirror> <!--给定仓库的下载镜像。 -->       <id>planetmirror.com</id>                                <!--该镜像的唯一标识符。id用来区分不同的mirror元素。 -->      <name>PlanetMirror Australia</name>                      <!--镜像名称 -->     <url>http://downloads.planetmirror.com/pub/maven2</url>  <!--该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 -->     <mirrorOf>central</mirrorOf>                             <!--被镜像的服务器的id。例如,如果我们要设置了一个Maven中央仓库(http://repo1.maven.org/maven2)的镜像,就需要将该元素设置成central。这必须和中央仓库的id central完全一致。-->    </mirror>   </mirrors>..... </settings>
其中mirrorOf  还可以如下配置

<mirrorOf>*</mirrorOf>     作为所有远程仓库的镜像,一般配置私服<mirrorOf>external:*</mirrorOf>     作为所有非本机的远程仓库的镜像<mirrorOf>repo1,repo2</mirrorOf>    作为repo1和repo2的镜像,可以有任意多个<mirrorOf>*,!repo1</mirrorOf>       作为除repo1之外的其他所有远程仓库的镜像,!表示排除。


	
				
		
原创粉丝点击