Maven 入门使用

来源:互联网 发布:taobaocom淘宝电脑版 编辑:程序博客网 时间:2024/05/21 17:27

maven安装

先去官方网站下载一个最新版本http://maven.apache.org/download.cgi. 下载后解压,使用之前最好先将maven的bin目录设置到path环境变量里面。

命令行运行mvn -version;看到版本信息即安装成功 。

(可选)自定义本机的maven库目录:apache-maven-3.0.3/conf/settings.xml 找到这一行:<localRepository>~/.m2/repository</localRepository>,这里默认表示C:\Users\Administrator.m2\repository,改成自己的路径:如d:/java/repository

创建project

maven无非也就是用来build一个project的,直接先上一个例子,在命令行下输入下面的命令:

mvn archetype:generate -DgroupId=cn.edu.sdau.neat -DartifactId=myapp -DarchetypeArtifactId=maven-archetype-webapp

其中,archetype是mvn内置的一个插件,create任务可以创建一个java项目骨架,DgroupId是软件包的名称,DartifactId是项目名,DarchetypeArtifactId是可用的mvn项目骨架,目前可以使用的骨架有:

{* maven-archetype-archetype
* maven-archetype-j2ee-simple
* maven-archetype-mojo
* maven-archetype-portlet
* maven-archetype-profiles (currently under development)
* maven-archetype-quickstart
* maven-archetype-simple (currently under development)
* maven-archetype-site
* maven-archetype-site-simple
* maven-archetype-webapp}

我只使用过最后一个骨架,每一个骨架都会建相应的目录结构和一些通用文件。至于mvn的完整目录结构定义,可参考:

http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
如果在项目中有servlet/jsp,推荐jetty容器,它可做为一个插件嵌入到mvn中,使用时,只需要在pom.xml中加入:
chenheng
org.mortbay.jetty
maven-jetty-plugin
使用:mvn jetty:run
就可以在浏览器中测试了,非常方便。

如果是第一次运行,这个过程会有点慢,maven需要下载一些依赖项,中间如果有输入提示信息,直接回车使用默认值就可以了。这条命令执行完后,会在你的当前目录下生成一个名为myapp的目录:

注意这个目录结构,src/main/java 和 src/test/java 是不能改动,不然maven会无法找到源文件。下面是maven一个标准的目录结构:

src/main/java Application/Library sources
src/main/resources Application/Library resources
src/main/filters Resource filter files
src/main/assembly Assembly descriptors
src/main/config Configuration files
src/main/scripts Application/Library scripts
src/main/webapp Web application sources
src/test/java Test sources
src/test/resources Test resources
src/test/filters Test resource filter files
src/site Site

另外maven还生成了一个重要的文件pom.xml,maven就是通过这个文件来来管理整个project,可以理解位类似于eclipse的.project文件。默认生成的pom.xml文件的内容如下:

/* 1-1 */<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">    <modelVersion>4.0.0</modelVersion>    <groupId>com.mycompany.app</groupId>    <artifactId>my-app</artifactId>    <version>1.1.0.1</version>    <packaging>jar</packaging>    <name>myapp</name>    <url>http://maven.apache.org</url>    <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    </properties>    <dependencies>    <dependency>    <groupId>junit</groupId>    <artifactId>junit</artifactId>    <version>3.8.1</version>    <scope>test</scope>    </dependency>    </dependencies></project>

解释一下这个xml文件的内容:

modelVersion: 这个XML文件所使用的POM格式的版本
groupId: 相当于这个project的所有者或者机构的一个标识,一般是com.company.xxx这种格式
artifactId: 这个project最后所生成的文档(jar、war)的名字,比如对于junit这个开源的project,它的artifactId就是junit
packaging: 这个project的打包的类型,一般是war、jar等值
version: project的版本
name: project的名字,生成文档等内容的时候会用的这个名字
这个project创建好后和普通的project没有什么不同,我们直接往里面放源代码进行开发就可以了,如果有目录想修改的也完全可以。

POM & archetype

archetype就是一个project的模板,上面我们生成的project就是用默认的archetype生成的。如果使用不同的archetype,生成的project结构会有所不同。 一个archetype指明了

1) 项目的目录结构以及什么目录是放source code,哪些是放test source code,哪些目录是放resource的。
2) 一个默认的pom.xml文件,这个默认的pom.xml文件中的groupId,artifactId,version用占位符表示,在创建project的时候通过参数传进来。
pom.xml文件的POM全称是Project Object Model,这个文件对于maven的使用者来说是一个和maven交互的渠道,pom.xml包含了一个maven project的配置,一个project该如何编译打包,project有哪些依赖项等等。

仔细看一下我们前面创建project的命令:mvn archetype:generate DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=myapp

1) archetype:generate, 这是一个maven的plugin,用来从一个archetype创建一个project,关于plugin后面再说。
2) DarchetypeGroupId,这个就是指的archetype的groupid,也就是说是用的哪个archetype,或者说用哪个项目模板。
3) 后面的两个参数,用来放大pom.xml文件里面,作为当前创建的project的描述信息。
Project创建好了,看如何去编译,直接进入的project的目录,在命令行下:

mvn compile

编译完后maven会创建一个target目录去保存编译结果。 我们需要编译成一个什么样的内容,以及要输出到什么地方等等,都是可以在pom.xml文件里面配置的,但是因为我们目前并没有指定这些内容,所以maven会使用默认值。

我们还可以用maven执行test:

mvn test

第一次执行时,maven会去下载一些依赖项。另外要注意的时,如果我们更改了默认的目录结构,maven会因为找bu到test而无法去执行test。如果只需要编译test可以执行:

mvn test-compile

要把项目打包,执行:

mvn package

mvn会根据pom.xml里面的packaging选项打包成相应的文件。

repository & dependency

maven里面有一个repository的概念,当我们的项目依赖于某个jar时,maven会去repository里面去找。repository分两种,一种是远程的,一种是本地的。如果有几个project都用到junit,我们可以把junit放在repository里面,几个project可以公用,节约存储空间而且方便管理,这个repository的位置可以在pom.xml里面设置。

本地的默认的路径是安装用户的目录下的 .m2\repository 文件夹。如果一个依赖项在本地的repository里面没有,那么maven会去他自己的远程的repository http://repo.maven.apache.org/maven2 去下载后放到本地的repository里面。

也就是说,我们如果我们的project需要要引用一个依赖项,我们只需要在pom.xml文件中进行配置,maven会自动帮我们去引用。 我们之前的创建project里面需要写单元测试,引用到了junit,看pom中的配置:

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

每一个需要为每一个 dependency 指明groupId,artifactId,version。scope很简单,意思是说我们需要怎么引用,比如我们上面的例子里面设置的是test,意思是说只在test里面引用junit。 但是我们如何知道groupId,artifactId和version呢? 比如我现在想引用log4j,这个几个值怎么填? 可以去http://mirrors.ibiblio.org/maven2/ 上去查找。比如log4j,我们就在上面这个地址加上log4j,也就是http://mirrors.ibiblio.org/maven2/junit/。进去后会有一个maven-metadata.xml,打开就可以知道这些值了然后添加这个dependency了。

如果要把一个project安装到本地的repository里面,可以执行下面的命令:

mvn install

到这里就说完了创建,编译,测试,打包以及安装,大部分的项目也就是做这些事情。

再介绍几个其它命令:

mvn site : 为你的project创建一个站点
mvn clean: 清除target目录下的所有文件
mvn eclipse:eclipse :为project生成eclipse的工程文件和classpath文件

注:这些命令在项目根目录下执行。

问题解决

在新建mvn项目时,使用原命令:

mvn archetype:create -DgroupId=cn.edu.sdau.neat -DartifactId=myapp -DarchetypeArtifactId=maven-archetype-webapp

会有报错:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2
.4:create (default-cli) on project standalone-pom: Execution default-cli of goal
org.apache.maven.plugins:maven-archetype-plugin:2.4:create failed: Plugin org.a
pache.maven.plugins:maven-archetype-plugin:2.4 or one of its dependencies could
not be resolved: Could not transfer artifact org.apache.maven.reporting:maven-re
porting-api:jar:2.2.1 from/to central (https://repo.maven.apache.org/maven2): Co
nnect to repo.maven.apache.org:443 [repo.maven.apache.org/185.31.18.215] failed:
Connection timed out: connect -[Help 1]

说是插件maven-archetype-plugin:2.4创建失败。通过网上查找,在http://maven.apache.org/archetype/maven-archetype-plugin/create-mojo.html上发现:

archetype:create
Full name:

org.apache.maven.plugins:maven-archetype-plugin:2.4:create

This plugin goal has been deprecated:(这个插件的目标已被弃用;)

Please use the generate mojo instead.(请使用generate mojo。)

所以需将archetype:create改为archetype:generate。

参考:
http://www.cnblogs.com/JeffreySun/archive/2013/03/14/2960573.html

0 0