首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Maven札记(一)

2013-07-01 
Maven笔记(一)一,MVN常用命令1)mvn clean --表示运行清理操作(会默认把target文件夹中的数据清理)2)mvn c

Maven笔记(一)
一,MVN常用命令
1)mvn clean -->表示运行清理操作(会默认把target文件夹中的数据清理)
2)mvn clean compile-->表示先运行清理之后运行编译,会见代码编译到target文件夹中
3)mvn clean test-->运行清理和测试
4)mvn clean package-->运行清理和打包
5)mvn clean install-->运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用
6)mvn clean deploy-->运行清理和发布(发布到私服上面)

二,文件结构
1) Project是所有pom.xml的根元素,并且在里面定义了命名空间和xsd元素
<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">

2)ModelVersion 当前pom模型的版本
<modelVersion>4.0.0</modelVersion>

3)GroupId定义当前maven项目隶属的实际项目
<groupId>com.test.mvn</groupId>

4)ArtifactId定义项目中的某个模块名称
<artifactId>MavenTest</artifactId>

5)Version 定义maven项目当前所处的版本号
<version>0.0.1-SNAPSHOT</version>

6)Packaging定义maven项目的打包方式。
<packaging>jar</packaging>

7)Dependencies 元素底下就是加入依赖包的地方,那么我们从哪里查询依赖包呢,可以
查询的地方比较多,参考http://blog.csdn.net/lifxue/article/details/7517299。

8)每个dependency都是一个依赖包,依赖包也就是在dependency里面定义各个依赖包的坐标,这样maven就会从网上下载依赖包到你本地仓库中,有所不同的是dependency元素包含了一个子元素,这个就是对maven生命周期的一个说明,当然除了上面四个子元素外,还包含几个其他的元素:
(1)?type说明依赖的类型?
(2)?optional标记依赖是否可选?
(3)?exclusions?用来排斥传递依赖

<dependency>
<groupId>实际项目</groupId>
<artifactId>模块</artifactId>
<version>版本</version>
<type>依赖类型</type>
<scope>依赖范围</scope>
<optional>依赖是否可选</optional> <!—主要用于排除传递性依赖-->
<exclusions>
  <exclusion>
   <groupId>…</groupId>
   <artifactId>…</artifactId>
  </exclusion>
</exclusions>
</dependency>

三,传递依赖规则
1) 最短路径原则:如果A对于依赖路径中有两个相同的jar包,那么选择路径短的那个包;
2) 第一声明优先原则:如果A对于依赖路径中有两个相同的jar包,路径也相同,那么依赖写在前面的优先;
3)可选依赖不会传递,如A->B,B->C,B->D,A对B直接依赖,B对C和D是可选依赖,那么在A中不会引入C和D;

四,依赖范围(<scope>)
1) test范围指的是测试范围有效,在编译和打包时都不会使用这个依赖
2)compile范围指的是编译范围有效,在编译和打包时都会将依赖存储进去
3)provided依赖:在编译和测试的过程有效,最后生成war包时不会加入,诸如:servlet-api,因为servlet-api,tomcat等web服务器已经存在了,如果再打包会冲突
4)runtime在运行的时候依赖,在编译的时候不依赖

五,聚合
<modelVersion>4.0.0</modelVersion>
<groupId>org.pango.user</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<modules>
<module>../user-core</module>
<module>../user-log</module>
<module>../user-dao</module>
<module>../user-service</module>
</modules>

六,继承
假设前面已经有写好的一个父pom.xml, 可以用过这样来继承
<parent>
<groupId>org.pango.user</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../user-parent/pom.xml</relativePath>
</parent>

选择继承:
将依赖放入dependencyManagement
<dependencyManagement>
<dependencies>
  <dependency>
    ...
  </dependency>
</dependencies>
</dependencyManagement>
把继承的配置加入到dependencyManagement中,对于继承的项目,我需要引入依赖的声明,不需要进行版本声明,如下:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>

可继承的POM元素:
1.groupId :项目组ID ,项目坐标的核心元素;
2.version :项目版本,项目坐标的核心元素;
3.description :项目的描述信息;
4.organization :项目的组织信息;
5.inceptionYear :项目的创始年份;
6.url :项目的url 地址
7.developers :项目的开发者信息;
8.contributors :项目的贡献者信息;
9.distributionManagerment :项目的部署信息;
10.issueManagement :缺陷跟踪系统信息;
11.ciManagement :项目的持续继承信息;
12.scm:项目的版本控制信息;
13.mailingListserv :项目的邮件列表信息;
14.properties :自定义的Maven 属性;
15.dependencies :项目的依赖配置;
16.dependencyManagement:醒目的依赖管理配置;
17.repositories :项目的仓库配置;
18.build :包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等;
19.reporting :包括项目的报告输出目录配置、报告插件配置等。

七, 生命周期
生命周期包含项目的清理、初始化、编译、测试、打包、集成测试、验证、部署、站点生成等几乎所有的过程。
maven包括三套生命周期,分别是:
- Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
- Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
- Site Lifecycle 生成项目报告,站点,发布站点。

1,Clean生命周期一共包含了三个阶段:
- pre-clean 执行一些需要在clean之前完成的工作
- clean 移除所有上一次构建生成的文件
- post-clean  执行一些需要在clean之后立刻完成的工作
如果我们运行mvn post-clean,那么 pre-clean,clean 都会被运行 (向前包含)。

2,Site生命周期的各个阶段:
- pre-site 执行一些需要在生成站点文档之前完成的工作
- site 生成项目的站点文档
- post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
- site-deploy 将生成的站点文档部署到特定的服务器上

3,Default生命周期:
- validate
- generate-sources
- process-sources
- generate-resources
- process-resources 复制并处理资源文件,至目标目录,准备打包。
- compile 编译项目的源代码。
- process-classes
- generate-test-sources 
- process-test-sources
- enerate-test-resources
- process-test-resources 复制并处理资源文件,至目标测试目录。
- test-compile 编译测试源代码。
- process-test-classes
- test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
- prepare-package
- package 接受编译好的代码,打包成可发布的格式,如JAR。
- pre-integration-test
- integration-test
- post-integration-test
- verify
- install 将包安装至本地仓库,以让其它项目依赖。
- deploy

八,插件(以测试插件surefire为例)
http://maven.apache.org/plugins/index.html 插件地址。
对于匹配测试类,maven会去src/test/java 下面去寻找类,此文件下面的类需要符合以下
的规则:
- Test*.java:任何目录以Test开头的类
- *Test.java:任何以Test结尾的类
- *TestCase.java:任何以TestCase结尾的类

配置surefire插件:

<build>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.15</version>
    <configuration>
<testFailureIgnore>true</testFailureIgnore>
    </configuration>
<executions>        //executions用于将测试分阶段
           <execution>
              <id>default-test</id>
              <phase>test</phase>
              <goals>
                 <goal>test</goal>
              </goals>
            <!-- Disable unit test execution by setting skip=true -->           
              <configuration>
                <skip>true</skip>
              </configuration>
           </execution>

           <execution>
              <id>unit-tests</id>
              <phase>test</phase>
              <goals>
                 <goal>test</goal>
              </goals>
              <configuration>
                <skip>true</skip>
                <includes>
                  <include>**/UnitTests/*.java</include>
                </includes>
              </configuration>
            </execution>

            <execution>
               <id>default-cli</id>
               <phase>integration-test</phase>
               <goals>
                  <goal>test</goal>
               </goals>
               <configuration>
                  <skip>false</skip>
                  <systemPropertyVariables>
                    <webdriver.port>${webdriver.port}</webdriver.port>
                    <webdriver.driver>${webdriver.driver}</webdriver.driver>
                    <webdriver.url>${webdriver.url}</webdriver.url>
                  </systemPropertyVariables>
                  <includes>
                    <include>**/CC/AA/*.java</include>
                    <include>**/BB/*.java</include>
                  </includes>
                </configuration>
              </execution>
    </executions>
   </plugin>
<plugins>
</build>


热点排行