本文只对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一定要首先弄明白项目的生命周期。