Maven 笔记二 摘录

很多笔记及实例摘录自《Maven权威指南》

依赖范围

compile(编译范围)
    compile是默认的范围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。   
provided(已提供范围)
    已提供范围的依赖在编译classpath(不是运行时)可用。它们不是传递性的,也不会被打包。如servlet-api
runtime(运行时范围)
    runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。
test(测试范围)
    test范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
system(系统范围)
    system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。注意该范围是不推荐使用的。如tools.jar

关于版本的定义
    主版本,次版本,增量版本,和限定版本号
    <major version>.<minor version>.<incremental version>-<qualifier>
    例如:版本“1.3.5”由一个主版本1,一个次版本3,和一个增量版本5。而一个版本“5”只有主版本5,没有次版本和增量版本。限定版本用来标识里程碑构建:alpha和beta发布,限定版本通过连字符与主版本,次版本或增量版本隔离。例如,版本“1.3-beta-01”有一个主版本1,次版本3,和一个限定版本“beta-01”。
    需要对版本号的限定版本进行排序。以版本号“1.2.3-alpha-2”和“1.2.3-alpha-10”为例,这里“alpha-2”对应了第二次alpha构建,而“alpha-10”对应了第十次alpha构建。后者比前者排序靠前,因排序按字符串排   
    SNAPSHOT    表示项目正处于活动的开发状态,快照版本。很不稳定,它随时可能变化。作为一个默认设置,Maven不会从远程仓库检查SNAPSHOT版本,要依赖于SNAPSHOT版本,用户必须在POM中使用repository和pluginRepository元素显式的开启下载snapshot的功能。
    LATEST是指某个特定构件最新的发布版或者快照版(snapshot),最近被部署到某个特定仓库的构件。
    RELEASE是指仓库中最后的一个非快照版本
   
Maven属性
    project.*
        可使用该project.*前缀来引用任何在MavenPOM中的值,如果在Maven中引用输出目录,应该使用属性来引用这些目录。
            • project.build.sourceDirectory
            • project.build.scriptSourceDirectory
            • project.build.testSourceDirectory
            • project.build.outputDirectory
            • project.build.testOutputDirectory
            • project.build.directory
            sourceDirectory,scriptSourceDirectory,和testSourceDirectory提供了项目源码目录的访问方式。
            outputDirectory和testOutputDirectory则能让你访问Maven放置字节码和其它构建输出的目录。
            directory引用的目录就是包含上述两个输出目录的父目录。
    settings.*
        Maven Settings。你使用该settings.*前缀来引用~/.m2/settings.xml文件中Maven Settings的值。如本地仓库的位置,以及由某个特定用户配置的服务器,profile,和镜像。
    env.*
        环境变量如PATH和M2_HOME可以使用env.*前缀来引用。
        env.PATH 包含了Maven运行的当前PATH。该PATH包含了一个用来查找可运行脚本和程序的 目录列表,
        env.HOME (在*nix系统中)这个变量指向了用户的home目录。但你更应该使用/home/ hudson,而非这个变量。
        env.JAVA_HOME 指向了Java安装目录。它要么指向JDK安装目录,要么或者JRE目录。但你更应该 考虑使用/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre而非这个属性。
        env.M2_HOME 指向了Maven2安装目录。
         
    系统属性
        任何可以通过System.getProperty()方法获取的属性都可以作为Maven属性被引用。
            java.version Java运行环境版本
            java.vendor Java运行环境供应商
            java.vendor.url Java供应商URL
            java.home Java安装目录
            java.vm.specification.version Java虚拟机规格说明版本
            java.vm.specification.vendor Java虚拟机规格说明供应商
            java.vm.specification.name Java虚拟机规格说明名称
            java.vm.version Java虚拟机实现版本
            java.vm.vendor Java虚拟机实现供应商
            java.vm.name Java虚拟机实现名称
            java.specification.version Java运行环境规格说明版本
            java.specification.vendor Java运行环境规格说明供应商
            java.specification.name Java运行环境规格说明名称
            java.class.version Java类格式版本号
            java.class.path Java类路径
            java.ext.dirs 扩展目录的路径
            os.name 操作系统名称
            os.arch 操作系统架构
            os.version 操作系统版本
            file.separator 文件分隔符(UNIX上是"/",Windows上是"\")
            path.separator 路径分隔符(UNIX上是":",Windows上是";")
            line.separator 行分隔符(在UNIX和Windows上都是"\n")
            user.name 用户帐户名称
            user.home 用户home目录
            user.dir 用户当前工作目录
    用户定义的属性
        <properties>
            <hibernate.version>4.1</hibernate.version>
        </properties>

        <build>
             <finalName>content-test</finalName>
        </build>

settings.xml

     文件可位于两个地方
    1.Maven安装目录: $M2_HOME/conf/settings.xml
    2.用户特定的Settings文件: ~/.m2/settings.xml
   
    settings.xml中顶层元素的概览
    <settings 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/settings-1.0.0.xsd">
          <localRepository/>
          <interactiveMode/>
          <usePluginRegistry/>
          <offline/>
          <pluginGroups/>
          <servers/>
          <mirrors/>
          <proxies/>
          <profiles/>
          <activeProfiles/>
    </settings>
   
    localRepository
        该值表示构建系统本地仓库的路径。其默认值为~/.m2/repository 
    <offline>false</offline>
        构建系统需要在离线模式下运行,则为true,默认为false。
       
    settings.xml中的Server配置
    <servers>
        <server>
          <id>server001</id>
          <username>my_login</username>
          <password>my_password</password>
          <privateKey>${usr.home}/.ssh/id_dsa</privateKey>
          <passphrase>some_passphrase</passphrase>
          <filePermissions>664</filePermissions>
          <directoryPermissions>775</directoryPermissions>
          <configuration></configuration>
        </server>
      </servers>

构建生命周期
    Maven中有三种标准的生命周期:清理(clean),默认(default)(有时候也称为构建),和站点(site)
    mvn clean将调用清理生命周期,它包含了三个生命周期阶段:
         pre-clean
         clean
         post-clean
        自定义Clean插件的行为    maven-clean-plugin
    默认生命周期 (default)     第一个阶段是validate,最后一个阶段是deploy
        validate                 验证项目是否正确,以及所有为了完整构建必要 的信息是否可用
        generate-sources        生成所有需要包含在编译过程中的源代码
        process-sources         处理源代码,比如过滤一些值
        generate-resources         生成所有需要包含在打包过程中的资源文件
        process-resources         复制并处理资源文件至目标目录,准备打包
        compile                 编译项目的源代码
        process-classes         后处理编译生成的文件,例如对Java类进行字节码增强(bytecode enhancement)
        generate-test-sources     生成所有包含在测试编译过程中的测试源码
        process-test-sources     处理测试源码,比如过滤一些值
        generate-test-resources 生成测试需要的资源文件
        process-test-resources     复制并处理测试资源文件至测试目标目录
        test-compile             编译测试源码至测试目标目录
        test                    使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布
        prepare-package         在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本
        package                 将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR
        pre-integration-test     执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境
        integration-test         如果有必要的话,处理包并发布至集成测试可以运行的环境
        post-integration-test     执行一些在集成测试运行之后需要的动作。如清理集成测试环境。
        verify                     执行所有检查,验证包是有效的,符合质量规范
        install                 安装包至本地仓库,以备本地的其它项目作为依赖使用
        deploy                     复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)
    站点生命周期 (site)
        项目文档和站点生成有一个专有的生命周期,它包含了四个阶段:
        1. pre-site
        2. site
        3. post-site
        4. site-deploy
        默认绑定到站点生命周期的目标是:
        1. site - site:site
        2. site-deploy -site:deploy
   
    JAR打包默认的目标
        process-resources resources:resources
        compile compiler:compile
        process-test-resources resources:testResources
        test-compile compiler:testCompile
        test surefire:test
        package jar:jar
        install install:install
        deploy deploy:deploy
   
    POM是最简单的打包类型  
        它生成的构件只是它本身。没有代码需要测试或者编译,也没有资源需要处理。
        package site:attach-descriptor
        install install:install
        deploy deploy:deploy
   
    EJB打包默认的目标
        process-resources resources:resources
        compile compiler:compile
        process-test-resources resources:testResources
        test-compile compiler:testCompile
        test surefire:test
        package ejb:ejb
        install install:install
        deploy deploy:deploy
       
    WAR打包默认的目标
        process-resources resources:resources
        compile compiler:compile
        process-test-resources resources:testResources
        test-compile compiler:testCompile
        test surefire:test
        package war:war
        install install:install
        deploy deploy:deploy
       
    大部分生命周期将resources:resources目标绑定到process-resources阶段。process-resources阶段处理资源并将资源复制到输出目录

Compile
    大部分生命周期将Compiler插件的compile目标绑定到compile阶段。
    compile:compile将会编译src/main/java中的所有内容至target/classes。
    Compiler插件调用javac,使用的source设置为1.3,默认target设置为1.1。

<plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
</plugins>

     覆盖默认的源码和输出目录

<build>
      <sourceDirectory>src/java</sourceDirectory>
      <outputDirectory>classes</outputDirectory>
</build>

     覆盖测试源码和输出的位置

<build>
      <testSourceDirectory>src-test</testSourceDirectory>
      <testOutputDirectory>classes-test</testOutputDirectory>
</build>
mvn install -Dmaven.test.skip=true

猜你喜欢

转载自zhengchao123.iteye.com/blog/1864759