您的位置:首页 > 其它

Maven 入门使用

2015-12-27 21:59 253 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  maven