原文地址:http://flyer2010.iteye.com/blog/1296593
让我们从开发一个十分简单的例子开始探究Maven的核心概念。通过学习,你将会对构建生命周期 (buildlifecycle),Maven仓库 (repositories),依赖管理 (dependency management)和项目对象模型 (Project Object Model)有一个基本的理解。
1.mvn创建项目
(1) JAVA项目 mvn archetype:create - DgroupId=net.bwda -DartifactId=common
(2) web 项目 mvn archetype:create - DgroupId=net.bwda -DartifactId=web-app - DarchetypeArtifactId=maven-archetype- webapp
默认情况下:
源代码在{basedir}/src/main/java
资源文件在{basedir}/src/main/resources
测试代码是在 {basedir}/src/test
2.创建一个简单的项目
mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch03 -DartifactId=simple -DpackageName=org.sonatype.mavenbook
mvn 是Maven2的命令。archetype:create称为一个Maven目标 (goal),像-Dname=value这样的对是将会被传到目标中
的参数,它们使用-D属性这样的形式,类似于你通过命令行向Java虚拟机传递系统属性。archetype:create这个目标的目的通过archetype快速创建一个项目。在这里,一个archetype被定义为“一个原始的模型或者类型,在它之后其它类似的东西与之匹配;一个原型(prototype)”。Maven有许多可用的archetype,从生成一个简单的Swing应用,到一个复杂的Web应用。本章我们用最基本的archetype来创建一个入门项目的骨架。这个插件的前缀是“archetype”,目标为”create”。
通过上面,我们已经创建了一个基本的mvn项目。查看simple文件夹,目录层次如下:
simple/
simple/pom.xml
/src/
/src/main/
/main/java
/src/test/
/test/java
以上的目录层次为mvn的标准目录布局
(1) maven Archtype插件创建了一个与artifactId匹配的目录——simple
(2) pom.xml:每个项目都有一个pom.xml,里面有它的项目对象模型 (POM)。这个文件描述了这个项目,配置了插件,声明了依赖。也就是说配置jar包依赖关系,仓库地址等都是通过这个文件配置。
(3) src/main目录:用于存放项目的源码了资源文件。这个目录包含了一下java类和一些配置文件。在其它的项目中,它
可能是web应用的文档根目录,或者还放一些应用服务器的配置文件。在一个Java项目中,Java类放在src/main/java下面,而classpath资源文件放在src/main/resources下面。
(4) src/test:存放项目的测试用例。在这个目录下面,src/test/java存放像使用JUnit这样的Java测试类。目录src/test/resources下存放测试classpath资源文件。
3.构建项目
(1) 进入控制台,cmd进入simple目录,
(2) 输入 mvn install命令,执行构建。
(3)生成eclipse工程项目,输入: mvn eclipse:eclipse,然后将工程导入到eclipse工程即可。
3.mvn基础概念介绍
任何您想build的事物,Maven都可以认为它们是工程。 这些工程被定义为工程对象模型(POM,Poject Object Model)。 一个工程可以依赖其它的工程;一个工程也可以由多个子工程构成。
(1)Maven坐标
Archetype插件通过名字为pom.xml的文件创建了一个项目。这就是项目对象模型(POM),一个项目的声明性描述。当Maven运行一个目标的时候,每个目标都会访问定义在项目POM里的信息。当jar:jar目标需要创建一个JAR文件的时候,它通过观察POM来找出这个Jar文件的名字。当compiler:compile任务编译Java源代码为字节码的时候,它通过观察POM来看是否有编译目标的参数。目标在POM的上下文中运行。目标是我们希望针对项目运行的动作,而项目是通过POM定义的。POM为项目命名,提供了项目的一组唯一标识符(坐标),并且通过依赖 (dependencies) ,父 (parents) 和先决条件
(prerequisite) 来定义和其它项目的关系。POM也可以自定义插件行为,提供项目相关的社区和开发人员的信息。
Maven坐标定义了一组标识,它们可以用来唯一标识一个项目,一个依赖,或者MavenPOM里的一个插件。下面,我们通过查看pom.xml来了解mvn包含的一些元素的定义说明。
<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>org.sonatype.mavenbook.ch03</groupId>
<artifactId>simple</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>simple</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>
GroupId:团体,公司,小组,组织,项目,或者其它团体。groupId是一个工程的在全局中唯一的标识符,一般 地,它就是工程名。groupId有利于使用一个完全的包名,将一个工程从其它有类似名称的工程里区别出来。
Artifact:在groupId下的表示一个单独项目的唯一标识符。artifact是工程将要产生或需要使用的文件,它可以是 jar文件,源文件,二进制文件,war文件,甚至是pom文件。每 个artifact都由groupId和artifactId组合的标识符唯一识别。需要 被使用(依赖)的artifact都要放在仓库(见Repository)中,否则 Maven无法找到(识别)它们。
version:一个项目的特定版本。发布的项目有一个固定的版本标识来指向该项目的某一个特定的版本。而正在开发中的项目可以用一个特殊的标识,这种标识给版本加上一个“SNAPSHOT”的标记。
项目的打包格式也是Maven坐标的重要组成部分,但是它不是项目唯一标识符的一个部
分。一个项目的groupId:artifactId:version使之成为一个独一无二的项目;你不能同
时有一个拥有同样的groupId, artifactId和version标识的项目。
packaging项目的类型,默认是jar,描述了项目打包后的输出。类型为jar的项目产生一个JAR文件,类型为war的项目产生一个web应用。包括EAR、WAR、JAR、ZIP、EJB几种类型。
Dependency:为了能够build或运行,一个典型的Java工程会 依赖其它的包。在Maven中,这些被依赖的包就被称为
dependency。dependency一般是其它工程的artifact。
Plug-in:Maven是由插件组织的,它的每一个功能都是由插件 提供的。插件提供goal(类似于Ant中的target),并根据在POM中 找到的元数据去完成工作。主要的Maven插件要是由Java写成 的,但它也支持用Beanshell或Ant脚本写成的插件。
Repository:仓库用于存放artifact,它可以是本地仓库,也可 以是远程仓库。Maven有一个默认的远程仓库--central,可以下载其中的artifact。在Windows 平台上,本地仓库的默认地址是User_Home.m2 epository。
Snapshot:工程中可以(也应该)有一个特殊版本,它的版本号 包括SNAPSHOT字样。该版本可以告诉Maven,该工程正处于开发阶段,会经常更新(但还未发布)。当其它工程使用此类型版本的artifact时,Maven会在仓库中寻找该artifact的最新版本,并自动下载、使用该最新版。
(2)Maven仓库(Repositories)
当你第一次运行Maven的时候,你会注意到Maven从一个远程的Maven仓库下载了许多文件。如果这个简单的项目是你第一次运行Maven,它首先会做的事情是去下载最新版本的Resources插件。在Maven中,构件和插件是在它们被需要的时候从远程的仓库取来的。Maven自带了一个用来下载Maven核心插件和依赖的远程仓库地址(http://repo1.maven.org/maven2),现已变更到http://search.maven.org/。
Maven仓库是通过结构来定义的在一个Maven仓库中,所有的东西存储在一个与Maven项目坐标十分匹配的目录结构中。
你可以访问Maven仓库http://search.maven.org/,搜索commons-io,你能在结果中找到相应的commons-io所对应的pom.xml,将该配置拷贝到你本地的pom即可在Windows XP上,你的本地仓库在C:\Documents and Settings\USERNAME\.m2\repository,在Unix系统上,你的本地仓库在~/.m2/repository。
当你执行mvn install时,把你项目的构件安装到你的本地仓库。Maven会从远程仓库下载构件和插件到你本机上,存储在你的本地Maven仓库里。一旦Maven已经从远程仓库下载了一个构件,它将永远不需要再下载一次,因为maven会首先在本地仓库查找插件,然后才从其他设置的仓库获取。
(3)Maven依赖管理
上面的例子中,Maven处理了JUnit依赖的坐标——junit:junit:3.8.1,指向本地Maven仓库中的/junit/junit/3.8.1/junit-3.8.1.jar。这种基于Maven坐标的定位构件的能力能让我们在项目的POM中定义依赖。如果你检查simple项目的pom.xml文件,你会看到有一个文件中有一个段专门处理dependencies,那里面包含了一个单独的依赖——JUnit。
一个复杂的项目将会包含很多依赖,也有可能包含依赖于其它构件的依赖。这是Maven最强大的特征之一,它支持了传递性依赖(transitive dependencies)。假如你的项目依赖于一个库,而这个库又依赖于五个或者十个其它的库(就像Spring或者
Hibernate那样)。你不必找出所有这些依赖然后把它们写在你的pom.xml里,你只需要加上你直接依赖的那些库,Maven会隐式的把这些库间接依赖的库也加入到你的项目中。Maven也会处理这些依赖中的冲突,同时能让你自定义默认行为,或者排除一些特定的传递性依赖。
1.mvn创建项目
(1) JAVA项目 mvn archetype:create - DgroupId=net.bwda -DartifactId=common
(2) web 项目 mvn archetype:create - DgroupId=net.bwda -DartifactId=web-app - DarchetypeArtifactId=maven-archetype- webapp
默认情况下:
源代码在{basedir}/src/main/java
资源文件在{basedir}/src/main/resources
测试代码是在 {basedir}/src/test
2.创建一个简单的项目
mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch03 -DartifactId=simple -DpackageName=org.sonatype.mavenbook
mvn 是Maven2的命令。archetype:create称为一个Maven目标 (goal),像-Dname=value这样的对是将会被传到目标中
的参数,它们使用-D属性这样的形式,类似于你通过命令行向Java虚拟机传递系统属性。archetype:create这个目标的目的通过archetype快速创建一个项目。在这里,一个archetype被定义为“一个原始的模型或者类型,在它之后其它类似的东西与之匹配;一个原型(prototype)”。Maven有许多可用的archetype,从生成一个简单的Swing应用,到一个复杂的Web应用。本章我们用最基本的archetype来创建一个入门项目的骨架。这个插件的前缀是“archetype”,目标为”create”。
通过上面,我们已经创建了一个基本的mvn项目。查看simple文件夹,目录层次如下:
simple/
simple/pom.xml
/src/
/src/main/
/main/java
/src/test/
/test/java
以上的目录层次为mvn的标准目录布局
(1) maven Archtype插件创建了一个与artifactId匹配的目录——simple
(2) pom.xml:每个项目都有一个pom.xml,里面有它的项目对象模型 (POM)。这个文件描述了这个项目,配置了插件,声明了依赖。也就是说配置jar包依赖关系,仓库地址等都是通过这个文件配置。
(3) src/main目录:用于存放项目的源码了资源文件。这个目录包含了一下java类和一些配置文件。在其它的项目中,它
可能是web应用的文档根目录,或者还放一些应用服务器的配置文件。在一个Java项目中,Java类放在src/main/java下面,而classpath资源文件放在src/main/resources下面。
(4) src/test:存放项目的测试用例。在这个目录下面,src/test/java存放像使用JUnit这样的Java测试类。目录src/test/resources下存放测试classpath资源文件。
3.构建项目
(1) 进入控制台,cmd进入simple目录,
(2) 输入 mvn install命令,执行构建。
(3)生成eclipse工程项目,输入: mvn eclipse:eclipse,然后将工程导入到eclipse工程即可。
3.mvn基础概念介绍
任何您想build的事物,Maven都可以认为它们是工程。 这些工程被定义为工程对象模型(POM,Poject Object Model)。 一个工程可以依赖其它的工程;一个工程也可以由多个子工程构成。
(1)Maven坐标
Archetype插件通过名字为pom.xml的文件创建了一个项目。这就是项目对象模型(POM),一个项目的声明性描述。当Maven运行一个目标的时候,每个目标都会访问定义在项目POM里的信息。当jar:jar目标需要创建一个JAR文件的时候,它通过观察POM来找出这个Jar文件的名字。当compiler:compile任务编译Java源代码为字节码的时候,它通过观察POM来看是否有编译目标的参数。目标在POM的上下文中运行。目标是我们希望针对项目运行的动作,而项目是通过POM定义的。POM为项目命名,提供了项目的一组唯一标识符(坐标),并且通过依赖 (dependencies) ,父 (parents) 和先决条件
(prerequisite) 来定义和其它项目的关系。POM也可以自定义插件行为,提供项目相关的社区和开发人员的信息。
Maven坐标定义了一组标识,它们可以用来唯一标识一个项目,一个依赖,或者MavenPOM里的一个插件。下面,我们通过查看pom.xml来了解mvn包含的一些元素的定义说明。
<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>org.sonatype.mavenbook.ch03</groupId>
<artifactId>simple</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>simple</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>
GroupId:团体,公司,小组,组织,项目,或者其它团体。groupId是一个工程的在全局中唯一的标识符,一般 地,它就是工程名。groupId有利于使用一个完全的包名,将一个工程从其它有类似名称的工程里区别出来。
Artifact:在groupId下的表示一个单独项目的唯一标识符。artifact是工程将要产生或需要使用的文件,它可以是 jar文件,源文件,二进制文件,war文件,甚至是pom文件。每 个artifact都由groupId和artifactId组合的标识符唯一识别。需要 被使用(依赖)的artifact都要放在仓库(见Repository)中,否则 Maven无法找到(识别)它们。
version:一个项目的特定版本。发布的项目有一个固定的版本标识来指向该项目的某一个特定的版本。而正在开发中的项目可以用一个特殊的标识,这种标识给版本加上一个“SNAPSHOT”的标记。
项目的打包格式也是Maven坐标的重要组成部分,但是它不是项目唯一标识符的一个部
分。一个项目的groupId:artifactId:version使之成为一个独一无二的项目;你不能同
时有一个拥有同样的groupId, artifactId和version标识的项目。
packaging项目的类型,默认是jar,描述了项目打包后的输出。类型为jar的项目产生一个JAR文件,类型为war的项目产生一个web应用。包括EAR、WAR、JAR、ZIP、EJB几种类型。
Dependency:为了能够build或运行,一个典型的Java工程会 依赖其它的包。在Maven中,这些被依赖的包就被称为
dependency。dependency一般是其它工程的artifact。
Plug-in:Maven是由插件组织的,它的每一个功能都是由插件 提供的。插件提供goal(类似于Ant中的target),并根据在POM中 找到的元数据去完成工作。主要的Maven插件要是由Java写成 的,但它也支持用Beanshell或Ant脚本写成的插件。
Repository:仓库用于存放artifact,它可以是本地仓库,也可 以是远程仓库。Maven有一个默认的远程仓库--central,可以下载其中的artifact。在Windows 平台上,本地仓库的默认地址是User_Home.m2 epository。
Snapshot:工程中可以(也应该)有一个特殊版本,它的版本号 包括SNAPSHOT字样。该版本可以告诉Maven,该工程正处于开发阶段,会经常更新(但还未发布)。当其它工程使用此类型版本的artifact时,Maven会在仓库中寻找该artifact的最新版本,并自动下载、使用该最新版。
(2)Maven仓库(Repositories)
当你第一次运行Maven的时候,你会注意到Maven从一个远程的Maven仓库下载了许多文件。如果这个简单的项目是你第一次运行Maven,它首先会做的事情是去下载最新版本的Resources插件。在Maven中,构件和插件是在它们被需要的时候从远程的仓库取来的。Maven自带了一个用来下载Maven核心插件和依赖的远程仓库地址(http://repo1.maven.org/maven2),现已变更到http://search.maven.org/。
Maven仓库是通过结构来定义的在一个Maven仓库中,所有的东西存储在一个与Maven项目坐标十分匹配的目录结构中。
你可以访问Maven仓库http://search.maven.org/,搜索commons-io,你能在结果中找到相应的commons-io所对应的pom.xml,将该配置拷贝到你本地的pom即可在Windows XP上,你的本地仓库在C:\Documents and Settings\USERNAME\.m2\repository,在Unix系统上,你的本地仓库在~/.m2/repository。
当你执行mvn install时,把你项目的构件安装到你的本地仓库。Maven会从远程仓库下载构件和插件到你本机上,存储在你的本地Maven仓库里。一旦Maven已经从远程仓库下载了一个构件,它将永远不需要再下载一次,因为maven会首先在本地仓库查找插件,然后才从其他设置的仓库获取。
(3)Maven依赖管理
上面的例子中,Maven处理了JUnit依赖的坐标——junit:junit:3.8.1,指向本地Maven仓库中的/junit/junit/3.8.1/junit-3.8.1.jar。这种基于Maven坐标的定位构件的能力能让我们在项目的POM中定义依赖。如果你检查simple项目的pom.xml文件,你会看到有一个文件中有一个段专门处理dependencies,那里面包含了一个单独的依赖——JUnit。
一个复杂的项目将会包含很多依赖,也有可能包含依赖于其它构件的依赖。这是Maven最强大的特征之一,它支持了传递性依赖(transitive dependencies)。假如你的项目依赖于一个库,而这个库又依赖于五个或者十个其它的库(就像Spring或者
Hibernate那样)。你不必找出所有这些依赖然后把它们写在你的pom.xml里,你只需要加上你直接依赖的那些库,Maven会隐式的把这些库间接依赖的库也加入到你的项目中。Maven也会处理这些依赖中的冲突,同时能让你自定义默认行为,或者排除一些特定的传递性依赖。
相关推荐
基于maven创建web项目 ...本文介绍了基于maven创建web项目的步骤,包括搭建maven环境、集成maven到Myeclipse2013和创建maven架构下的WEB工程。通过这篇文章,读者可以学习到如何使用maven来构建和管理web项目。
在本文中,我们将深入探讨如何使用IntelliJ IDEA创建一个基于Maven的Spring MVC项目。首先,我们需要了解几个核心概念: 1. **IntelliJ IDEA**:这是一款强大的Java集成开发环境(IDE),广泛用于Java应用程序的...
1. **初始化项目**:创建一个新的Maven项目,设置POM.xml文件,这是Maven项目的配置中心,包含项目的基本信息和依赖。 2. **添加SSH框架依赖**:在POM.xml中,你需要指定SSH框架的版本号,并添加相应的依赖。 3. *...
5. **理解和使用生命周期**:Maven有一套预定义的构建生命周期,包括clean、default和site三个阶段。每个阶段包含多个目标(phase),如compile、test、install等,这些目标按照特定顺序执行。 6. **插件管理**:...
**Maven项目学习笔记记录** 在软件开发领域,Maven是一个强大的项目管理和构建工具,尤其在Java开发中广泛使用。本笔记将深入探讨Maven的核心概念、主要功能以及实际应用场景,帮助你更好地理解和掌握这一重要工具...
Maven的生命周期包括三个主要阶段:`clean`、`default`和`site`。`clean`阶段用于清理项目,`default`阶段用于构建项目,包括编译、测试、打包和部署等步骤,`site`阶段则用于生成项目报告和网站。 ### 4. Maven...
- 创建Maven项目:使用IDEA或Eclipse等开发工具,选择Maven项目模板,生成基本的Maven项目结构。 - pom.xml配置:添加项目依赖,包括SpringMVC、Spring、MyBatis、Oracle驱动等。确保每个依赖的版本号与项目兼容。...
【标题】"用idea创建的maven web项目"是一个基于IntelliJ IDEA(简称idea)开发工具构建的Maven Web应用程序。Maven是Java领域的一个项目管理和构建工具,它通过提供一套规范化的项目结构和自动化的构建流程,帮助...
在创建Maven Web项目时,我们需要创建一个名为`pom.xml`的POM文件,它是Maven项目的核心。 创建Maven Web项目的第一步是设定项目的基本信息,包括项目groupId、artifactId和version。例如: ```xml ...
NULL 博文链接:https://bing-zz.iteye.com/blog/1460546
1. **依赖管理**:Maven 提供了一个中心化的仓库系统,用于存储和管理 Java 项目的依赖库。 2. **项目构建**:Maven 支持自动化的构建过程,包括编译、测试、打包等步骤。 3. **项目信息管理**:Maven 可以帮助维护...
"一个空的maven工程"指的是一个基础的Maven项目配置,它尚未包含任何具体的业务代码或依赖。这个项目提供了一个起点,开发者可以在此基础上添加自己的源代码、配置文件以及依赖库,来构建和管理自己的Java应用程序。...
接着,你可以创建一个简单的Maven项目,通过编写POM.xml文件来定义项目依赖和构建目标。随着对Maven的深入学习,你会掌握如何管理项目依赖、配置构建插件、自定义构建生命周期等高级功能。 Maven的学习是一个逐步的...
1. **创建Maven项目**:通过Eclipse的New Project向导选择Maven Project,然后指定项目的基本信息(如Group ID、Artifact ID等)。 - **知识点**:项目ID的命名规则和意义(Group ID通常表示公司域名反向,Artifact...
在IDE中创建一个新的Web项目,并指定项目的类型为WAR。 ##### 9.2 在pom.xml中添加依赖包 在`pom.xml`文件中添加项目所需的依赖库。 ##### 9.3 项目部署 使用`mvn tomcat7:deploy`等命令将项目部署到服务器上。 ...
- **背景**:创建一个简单的天气查询程序,展示如何使用Maven定制项目信息和依赖。 - **步骤**: - 定义项目结构。 - 添加项目信息。 - 引入依赖库。 - 编写源代码。 - 添加资源文件。 - 运行程序。 2. **...
Maven 是一个广泛使用的 Java 项目管理和构建工具,它简化了构建过程,自动处理依赖管理和构建生命周期。要安装 Maven,首先你需要访问 Maven 的官方网站(https://maven.apache.org/)来下载最新版本的二进制包。...
本项目是一个基于SSM的简单Maven项目,采用JDK 1.8和Tomcat 7服务器,旨在提供一个快速开发的基础架构。 首先,我们来详细了解一下SSM框架的核心组件: 1. **Spring**:Spring是整个应用的基石,它提供了一个全面...
在这个“简单ssm+maven项目”中,开发者利用了这三个框架的优势来实现一个可运行的应用。下面将详细解释这些框架以及它们在项目中的作用。 **Spring框架**: Spring是Java企业级应用的核心框架,它提供了全面的编程...