3,maven使用入门

一. 概述

    开始mavenhello world项目。

二. pom

    就像MakeMakefile Antbuild.xml一样,Maven项目的核心是pom.xmlPOMProject Object Model)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

    现在先为Hello World项目编写一个最简单的pom.xml

    首先创建一个名为hello-world的文件夹,在该文件夹中新建一个pom.xml的文件,文件内容如下:

<?xml version=”1.0” encoding=”UTF-8”?>  
 <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>com.juvenxu.mvnbook</grouId>  
         <artifactId>hello-world</artifactId>  
         <version>1.0-SNAPSHOT</version>  
         <name>Maven Hello World Project</name>  
</project>

    project 元素是所有pom.xml的根元素,它还声明了一些POM相关的命名空间及xsd元素,虽然这些属性不是必须的,但使用这些属性能够让第三方工具(如IDE中的XML编辑器)帮助我们快速编辑POM

    modelVersion指定了当前POM模型的版本,对于Maven2Maven3来说,它只能是4.0.0

    groupIdartifactIdversion三个元素定义了一个项目基本的坐标,在Maven的世界,任何的jarpom或者war都是以基于这些基本的坐标进行区分的。groupId定义了项目属于哪个组,这个组往往和项目所在组织或公司关联。如com.googlecode.myapp com.mycom.myappartifactId定义了当前Maven项目在组中唯一的的ID,如myapp-utilmyapp-domain等等。Version是定了项目的当前版本,如1.0-SHNAPSHOTSNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。

三. 编写主代码

    项目主代码和测试代码不同,项目的主代码会被打包到最终的构建中(如jar

    默认情况下,Maven假设项目主代码位于src/main/java目录。Maven会自动搜寻该目录找到项目主代码。一般来说,项目中Java类的包都应该基于项目的groupIdartifactId,这样更加清晰,更加符合逻辑,也方便搜索。

四. 编译源代码

    在项目根目录下运行 mvn clean compile 可以执行项目的清理和编译任务。Maven会先执行clean:clean任务(clean插件的clean目标),删除target/目录,默认情况下Maven构建的所有输出都在target/目录中;接着执行resources:resources任务;最后执行compiler:compile任务,将项目主代码编译至target/classes目录。

五. 编写测试代码

    Maven项目中默认的测试代码目录是src/test/java。要使用Junit,需要在POM中添加相关依赖:

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

    有了这段声明,Maven就能自动从中央仓库(http://repo1.maven.org/maven2)下载junit-4.7.jar了。

       scope 指定了依赖范围。test表示该依赖只对测试有效(只有测试代码可以import JUnit)。scope默认值是compile表示对主代码和测试代码都有效。

六. 执行测试

      mvn clean test 会执行clean:cleanresources:resourcescompiler:compileresources:testResourcescompiler:testCompile以及surefire:test Maven会在执行test之前执行resources:resourcescompiler:compileresources:testResources以及compiler:testCompile(项目主资源处理,主代码编译,测试资源处理,测试代码编译等工作)

    Maven的核心插件之一compiler插件默认只支持编译Java1.3,因此我们需要在POM中配置该插件使其支持Java 5

<build>  
   <plugins>  
     <plugin>  
       <groupId>org.apache.maven.plugins</groupId>  
       <artifactId>maven-compiler-plugin</artifactId>  
       <configuration>  
         <source>1.5</source>  
         <target>1.5</target>  
       </configuration>  
     </plugin>  
   </plugins>  
</build>

    测试代码通过编译之后会在target/test-classes下生成二进制文件。surefireMaven世界中负责执行测试的插件。

七. 打包和运行

    我们可以执行mvn clean package进行打包,如果不指定打包类型,使用默认的jarjar:jar会将项目主代码的二进制文件夹打成包以artifact-version.jar的命名规范出现在target/输出目录中。

    执行mvn clean install将项目输出的jar安装到Maven本地仓库中,在此之前会执行jar:jar,然后再执行install:install

    默认打包生成的jar是不能直接运行的,因为带有main方法的类信息不会添加到manifest中(打开jar文件中的META-INF/MANIFEST.MF文件,将无法看到Main-Class一行)。为了生成可执行的jar包,我们需要借助maven-shade-plugin,在POM中配置如下:

<plugin>  
   <groupId>org.apache.maven.plugins</groupId>  
   <artifactId>maven-shade-plugin</artifactId>  
   <version>1.2.1</version>  
   <executions>  
     <execution>  
       <phase>package</phase>  
       <goals>  
         <goal>shade</goal>  
       </goals>  
       <configuration>  
       <transformers>  
         <transformer implementation=”org.apache.maven.plugins.shade.resource.ManifestResourceTransformer”>            
            <mainClass>com.juvenxu.mvnbook.helloworld.HelloWorld</mainClass>  
         </transformer>  
       </transformers>  
       </configuration>  
   </executions>  
</plugin>

八. 使用Archetype生成项目骨架

    我们称项目的基本目录结构(主代码目录、测试代码目录等)和pom.xml文件内容为项目的骨架。我们可以用mvn archetype:generate来生成项目的骨架。该命令在Maven 2中是不安全的,因为它会自动下载最新的archetype插件版本,可能得到不稳定的SNAPSHOT版。然而在Maven 3中,即使用户没有指定版本,Maven也只会解析最新的稳定版本。Maven 2中建议使用
mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate 
冒号的分隔格式为:groupId:artifactId:version:goal org.apache.maven.pluginsMaven官方插件的groupId

    创建普通java项目:

            mvn archetype:create DgroupId=com.heimar DartifactId=JavaPro

    创建web项目:

            mvn archetype:create DgroupId=com.heimar DartifactId=WebPro DarchetypeAtrifactId=mave-archetype=webapp

九. m2eclipse简单使用

1. 导入maven项目

2. 创建maven项目

3. 运行mvn命令

你可能感兴趣的:(3,maven使用入门)