maven配置概要

本文只对maven的主要配置做说明,细节请查阅文档。

1 maven环境搭建

主要包括:环境变量配置、settings.xml文件、repository、eclipse-maven插件的概念以及说明

1.1 环境变量配置

Path中添加,指向“maven安装目录\bin”

1.2 settings.xml

该文件可能需要自己撰写,并放置在”C:\Users\电脑用户名.m2\settings.xml”下面,其具体内容后面章节详细描述。

1.3 repository

maven所下载的jar包以及plugin存放的位置

1.4 eclipse-maven插件

eclipse自带maven插件,不过需要注意的是确认下:Windows>Preferences>Maven>User Settings中确认下是否指向你实际配置的settings.xml的位置

2 pom.xml详解

pom.xml是maven项目配置管理的核心,其中描述了项目的整个生命周期,maven用xml的形式替我们定义项目的整个生命周期,具体如下:

2.1 项目基本信息

  • 项目的基本:包括命名、版本号、描述、打包形式
  <groupId>com.xxx.xxx</groupId>
  <artifactId>xxxx</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <description>xxx子系统</description>

2.2 项目的文件编码格式

<properties>
     <!-- 项目文件编码 -->
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     <!-- 编译编码 -->
     <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>

2.3 项目的依赖

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

2.4 项目的编译

2.4.1 jar编译

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
            <encoding>UTF-8</encoding>
        </configuration>
    </plugin>
</plugins>

2.4.2 war编译

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.2</version>
        <configuration>
             <warName>${project.artifactId}</warName>
             <packagingExcludes>WEB-INF/web.xml</packagingExcludes>
        </configuration>
    </plugin>
</plugins>

2.5 项目的运行(基于tomcat7)

<plugins>
  <plugin>
     <groupId>org.apache.tomcat.maven</groupId>
     <artifactId>tomcat7-maven-plugin</artifactId>
     <version>2.2</version>
     <configuration>
       <path>/testweb</path>
       <port>8080</port>
       <!-- 可选的 -->
       <contextFile>
            D:/tomcat/apache-tomcat-7.0.32-maven/conf/context.xml</contextFile>
       </configuration>
  </plugin>
</plugins>

2.6 项目版本的发布

<distributionManagement>
     <repository>
         <id>xxxx-releases</id>
         <name>xxxx Releases Repository</name>
         <url>http://localhost:8081/repository/xxxx-releases/</url>
     </repository>
     <snapshotRepository>
         <id>plantform-snapshots</id>
         <name>xxxx Snapshot Repository</name>
         <url>http://localhost:8081/repository/xxxx-snapshots/</url>
     </snapshotRepository>
</distributionManagement>

2.7 properties

properties中定义的element,可以在其他地方以${element}的形式访问,类似于语言中的变量定义

<properties>
   <servlet.version>2.5</servlet.version>
</properties>
<dependencies>
     <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>servlet-api</artifactId>
       <version>${servlet.version}</version>
       <scope>provided</scope>
     </dependency>
</dependencies>

3 简化

3.1 继承

继承意味着可以使用父项目配置中的内容,当然也可以重写。可以使用的项包括:

  • 基本信息中的version、groupdId
  • 文件编码格式
  • 依赖
  • 编译
  • 运行
  • 发布
  • properties
  • 等等
<parent>
    <groupId>com.gilight.plantform</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

3.2 聚合

聚合从某种程度上讲,就是为了打包方便。在存在多个项目的前提之下,我们不需要考虑依赖顺序,maven会自动计算依赖顺序,替我们按照依赖进行打包。如果一个项目为聚合项目的话,它的打包类型只能是pom。

<packaging>pom</packaging>
<modules>
    <module>../commons</module>
    <module>../plugins</module>
    <module>../page</module>
</modules>

3.3 私服

私服的存在,使得我们的依赖包、插件不必要每次都去外网访问下载,加快了我们的开发、编译、运行、测试的进度。
一般情况下我们使用nexus私服,具体私服的详细说明,我们一会在下面的章节中详细说明

3.4 依赖管理

maven可以通过dependencyManagement方式来简化我们的依赖过程,譬如
父pom

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>${servlet.version}</version>
                <scope>provided</scope>     
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>       
    </dependencies>
</dependencyManagement>

子pom

<dependencies>
     <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>servlet-api</artifactId>
     </dependency>
     <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
     </dependency>      
</dependencies>

看看,配置是不是简化不少。子pom使用父pom中的每一个dependency中的scope和version,如果不想使用父pom中的属性,重写即可。
dependencyManagement中的依赖,只是依赖配置,不会产生实际依赖

3.5 pluginManagement

父pom

<build>
    <finalName>${project.artifactId}-${project.version}</finalName>
    <pluginManagement>
        <plugins>
             <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <encoding>UTF-8</encoding>
                </configuration>
             </plugin>
        </plugins>
    </pluginManagement>             
</build>

子pom

<build>
    <plugins>
      <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
       </plugin>
    </plugins>
</build>

同样配置也简化了不少,pluginManagement只是插件配置,不会产生实际的依赖。同样,如果不想使用父pom中预定义的属性的话,请重写之

4 Nexus私服

下载地址:http://www.sonatype.org/nexus/go
下载完毕就安装,具体安装细节百度。、

4.1 仓库类型

这里只对respository的类型做个说明:
- hosted:本地仓库
- proxy:代理仓库,对外部仓库进行代理访问
- group:组,聚合仓库。聚合所有仓库后,对外提供统一访问路径。

4.2 本地仓库

构建本地仓库的目的是为了发布项目版本,具体前面2.6章节已经进行了pom配置的说明,我们只需要按照nexus的说明,创建两个对应的hosted仓库即可。

5 settings.xml详细说明

5.1 localRepository

定义本地仓库存储的位置

<localRepository>C:\Users\Administrator\.m2\repository</localRepository>

5.2 servers

定义服务的id、用户名、密码,在其他地方使用,譬如2.6章节里面的id和server中的id就是对应的。

    <servers>
        <server>
            <id>plantform-releases</id>
            <username>admin</username>
            <password>admin123</password>
        </server>
        <server>
            <id>plantform-snapshots</id>
            <username>admin</username>
            <password>admin123</password>
        </server>
        <server>
            <id>maven-releases</id>
            <username>admin</username>
            <password>admin123</password>
        </server>
    </servers>

5.3 mirrors

定义了maven的一个下载镜像

<!-- 镜像地址 -->
    <mirrors>
        <mirror>
            <id>nexus</id>
            <name>center repository</name>
            <url>http://192.168.30.30:8081/repository/maven-public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
    </mirrors>

5.4 profiles

可以预定义很多配置,跟pom中的dependencyManagement一样,预定义配置。
可以预定义的配置包括:

  • repositories
  • pluginRepositories
  • dependencies
  • plugins
  • properties
  • dependencyManagement
  • distributionManagement
  • build中的部分内容
<profiles>
        <profile>
            <id>nexus</id>
            <!--Enable snapshots for the built in central repo to direct -->
            <!--all requests to nexus via the mirror -->
            <repositories>
                <repository>
                    <id>nexus</id>
                    <name>local private nexus</name>
                    <url>http://localhost:8081/repository/maven-public/</url>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                        <checksumPolicy>warn</checksumPolicy>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
    </profiles>

如果想使用,可以通过如下配置:

<activeProfiles>
    <!--里面的nexus对应profile中的id-->
    <activeProfile>nexus</activeProfile>
</activeProfiles>

6 补充

6.1 细节补充说明

maven的依赖下载路径是这样的:首先本地仓库查找–>然后去私服查找–>然后去远程仓库上查找。
properties中的配置项
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
看上去没有使用的地方,实际上maven在项目管理中已经内置了很多插件并使用了这些属性,这些插件可以通过pom.xml中的Effective POM查看。

6.2 maven是什么

maven是帮我们进行项目各个生命周期的定义、执行、管理的工具,我们使用maven一定要首先弄明白项目的生命周期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值