Maven 学习笔记

1. 在windows上安装Maven.
    设置环境变量:
        c:\users\jeffrey>set M2_HOME=C:\Apache-Maven-2.2.1
        c:\users\jeffrey>set PATH=%PATH%;%M2_HOME%\bin
       
2. Maven Help插件
    help:active-profiles : 列出当前构建中活动的Profile(项目的,用户的,全局的)
    help:effective-pom: 显示当前构件的实际pom,包含活动的profile
    help:effective-settings: 打印出项目的实际setting,包括从全局的setting和用户级别settings继承的配置
    help:describe:描述插件的属性。它不需要在项目目录下运行。但是你必须提供你想要描述插件的groupId和artifactId

3. 创建简单项目
    $mvn archetype:create -DgroupId=com.trendmicro.demo -DartifactId=simple -DpackageName=com.trendmicro
   
4. pom.xml文件是Maven项目中最基础的POM.
    --groupId,artifactId,packaging,version是Maven的坐标,他们唯一标识了项目。
   
5. 最简单的POM
    <project>
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.trendmicro.demo</groupId>
        <artifactId>simple-project</artifactId>
        <version>1</version>
    </project>
    验证项目是否有效,在pom.xml文件所在的目录执行命令$mvn help:effective-pom
   
6. 项目的版本号构成
    主版本.次版本.增量版本-限定版本(如: 1.0.0-beta-01,1.2.4-alpha-09)
    SNAPSHOT版本:表示项目正处于活动的开发状态,Maven会在安装或发布这个组件的时候将该符号展开为一个日期和时间值
    LATEST和RELEASE版本:LATEST是指某个特定构件最新的发布版或者快照版,最近被部署到某个特定仓库的构件。RELEASE是指仓库中最后的一个非快照版本。
   
7. 属性引用
    一个POM可以通过一对大括号和前面一个美元符号来包含对属性的引用。
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysqlVersion}</version>
        </dependency>
    </dependencies>
    <properties>
        <mysqlVersion>(5.1,)</mysqlVersion>
    </properties>
   
8. 项目依赖
    <project>
    ...
        <dependencies>
            <dependency>
                <groupId>org.codehaus.xfire</groupId>
                <artifactId>xfire-java5</artifactId>
                <version>1.2.5</version>
                <scope>compile</scope>
            </dependency>
            ...
        </dependencies>
    ...
    </project>
    依赖范围:
        compile(编译范围):编译范围依赖在所有的classpath中可用,同时它们也会被打包
        provided(以提供范围):provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。它们不是传递性的,也不会被打包。
        runtime(运行时范围):runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。
        test(测试范围):test范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
        system(系统范围):system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,
            Maven也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的Maven仓库中引用依赖)。
    可选依赖:
        在POM中用<option>true</option>表示。编译这个项目的时候你需要两个依赖类库,但是你不希望在使用你类库的项目中,这两个依赖类库同时作为传递性运行时依赖出现。
    依赖版本界限:
        (,)不包含量词。[,]包含量词 如:
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>[3.8,4.0)</version>
            <scope>test</scope>
        </dependency>
    依赖管理:
        Maven在dependencyManagement元素中为你提供了一种方式来统一依赖版本号。你经常会在一个组织或者项目的最顶层的父POM中看到dependencyManagement元素。
        如定义MySQL-Driver,子项目没有显式的列出mysql-connector-java依赖的版本。由于这个依赖在顶层POM的dependencyManagement元素中定义了,该版本号就会传播到所有子项目的mysql-connector-java依赖中。
            注意如果子项目定义了一个版本,它将覆盖顶层POM的dependencyManagement元素中的版本。那就是:只有在子项目没有直接声明一个版本的时候,dependencyManagement定义的版本才会被使用.

9. Maven坐标详解
    groupId:一个归类了一组相关构件。组定义符基本上类似于一个java包名。
    artifactId:是项目的主要定义符。当你生成一个构件,这个构件将由artifactId命名。当你引用一个项目,你就需要使用artifactId来引用它。artifactId和groupId的组合必须是唯一的。
    versionId:当一个构件发布的时候,它是使用一个版本号发布的。该版本号是一个数字定义。
    classifier:(最少使用的):如果你要发布同样的代码,但是由于技术原因需要生成两个单独的构件,你就要使用一个分类器。例如,你想要构建两个单独的构件成jar,一个使用java 1.4编译器,另一个使用java 1.6编译器。
   
10. Maven Surefire插件是负责运行单元测试的插件。

11. 如果想跳过整个测试后进行打包
    $mvn install -Dmaven.test.skip=true

12. 通过Maven Profiles实现可移植性
    Maven中的profile是一组可选的配置,可以用来设置或者覆盖默认值。有了profile,你就可以为不同的环境定制构建。profile可以在pom.xml中配置,并给定一个id。然后你就可以在运行Maven的时候使用的命令告诉Maven运行特定profile中的目标。以下pom.xml使用production profile覆盖了默认的Compiler插件设置。
    <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/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.sonatype.mavenbook</groupId>
        <artifactId>simple</artifactId>
        <packaging>jar</packaging>
        <version>1.0-SNAPSHOT</version>
        <name>simple</name>
        <url>http://maven.apache.org</url>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.1</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <profiles>#
            <profile>
                <id>production</id>#
                <build>#
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-compiler-plugin</artifactId>
                            <configuration>
                            <debug>false</debug>#
                            <optimize>true</optimize>
                            </configuration>
                        </plugin>
                    </plugins>
                </build>
            </profile>
        </profiles>
    </project>
    激活profile配置
    <profiles>
        <profile>
            <id>jdk16</id>
            <activation>#
            <jdk>1.6</jdk>
            </activation>
            <modules>#
                <module>simple-script</module>
            </modules>
        </profile>
    </profiles>

13. 使用Maven构建项目站点
    $mvn site:run




   
   
   
   
   
   
   
   
   
   
   

猜你喜欢

转载自jeffrey-zhang.iteye.com/blog/528868