简介
在前一篇文章里已经介绍了怎么安装和配置maven。在安装好之后我们这里来看看怎么通过maven来构建一个工程并详细的了解一下maven的配置文件里各配置项是什么意思。只有理解清楚这些之后我们才能够更好的运用好这个工具。
创建一个示例工程
首先我们尝试创建一个普通的工程。在命令行的情况下,我们输入如下命令:
mvn archetype:generate -DgroupId=com.yunzero -DartifactId=SampleProject -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
系统会显示如下的输出:
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom >>> [INFO] [INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom <<< [INFO] [INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom --- [INFO] Generating project in Batch mode [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0 [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: groupId, Value: com.yunzero [INFO] Parameter: packageName, Value: com.yunzero [INFO] Parameter: package, Value: com.yunzero [INFO] Parameter: artifactId, Value: SampleProject [INFO] Parameter: basedir, Value: /home/frank/programcode/spring [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: /home/frank/programcode/spring/SampleProject [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 13.278s [INFO] Finished at: Sun Dec 14 22:32:31 CST 2014 [INFO] Final Memory: 12M/239M [INFO] ------------------------------------------------------------------------
这表示一个工程已经建立好了。那么我们前面的这个命令表示什么意思呢?它究竟做了什么?我们又创建了一个什么样的工程呢?我们一点点详细的分析过来。
先看我们建立的这个工程的结构:
如上图所示,这里表示一个普通的java console工程结构。这是我们用命令行建立的。如果我们考虑用IDE工具来建立工程呢?也可以用类似的方式。我们以eclipse为例。
1. 首先选择新建一个maven project:
2. 然后选择Next, 在这里选择工程所在的目录,我们选择默认的位置,如下图:
3. 选择next之后再继续选择archetype
这里,也选择默认的maven-archetype-quickstart。然后继续选择Next。如果我们留意的话会发现这个类型的archetypeid也就是我们前面命令行创建工程里指定的。
4. 在这一步选择Group Id和Artifact Id:
在这一步,设置的Group Id和artifact Id也就是我们前面命令行里指定的那样。这样,我们就建立了一个简单的maven示例工程了。它的结构如下图:
这样,我们通过命令行和IDE两种方式创建了一个示例工程。下面我们针对命令行的参数和pom.xml文件里的一些项进行详细的讨论。
参数解释
我们在最开始创建maven工程的时候指定了archetype参数。然后在后面的参数里又指定了archetypeartifactId。
archetype: 指的是我们如果要通过maven创建一个项目工程的话,因为具体针对不同类型的项目它的结构组织不一样,于是maven就提供了一个项目创建的模板。这些模板包含了一些最佳实践,这样可以使得我们在构建项目的时候节约不少实践。比如说,我们需要创建一个普通的console应用,那么它的结构模板必然是一种样式,而如果要构建一个JavaEE的项目,它的结构则不一样。既然我们需要针对不同项目提供不同的模板,于是就有了一个需要怎么来定义和区分它们的问题。这样就有了archetypeArtifactId。
archetypeArtifactId: 指的是针对archetype的具体模板。比如说maven-archetype-quickstart表示的是一个创建的普通maven工程。针对不同类型的工程,我们可以在maven的官网上查找对应的类型,也可以在通过IDE创建工程的时候去筛选 。
除了上述的两个之外,还要两个比较重要的参数:
groupId: 相当于一个对应项目的唯一区分标识。这样说起来还是有点模糊。如果考虑到我们做java项目的时候,要对一些包命名,而且一些包的命名需要具有唯一性。所以这个groupId就是我们创建的项目里最高层包的命名。
artifactId: 表示生成的包的名字。当我们将一个项目编译后打包的时候,需要确定一个打包名字并部署到实际测试或者生产环境中,所以在这个地方来确定最后包的名字。
上述的几个参数就是我们创建maven工程用到的。在前面的参数里,我们还设置了 -DinteractiveMode=false。它表示禁用交互的模式来创建工程。这表示什么意思呢?因为我们在命令行里已经指定了项目的类型和包名以及结构。如果我们想省略这一点的话,可以直接运行:
mvn archetype:generate
这个时候系统会显示所有的archetype类型,然后交互的提示我们输入对应的archetype,以及groupId和artifact Id。
pom.xml文件
我们再来看看通过命令行自动生成的pom.xml文件:
<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.yunzero</groupId> <artifactId>SampleProject</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>SampleProject</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和artifactId也定义在这里。<version>部分表示我们常用版本管理中定义的版本号,比如我们常用的RC, alpha, beta, SNAPSHOT。在这里SNAPSHOT表示当前项目处在一个开发的阶段。当一个工程使用SNAPSHOT的依赖时,Maven会每次去获取最新的SNAPSHOT版本。
还有一个是<packaging>,它表示对于这个工程,需要创建一个JAR包。
在下面的<properties>里面,我们通常用来定义一些自定义的变量,方便他们重用。比如说我们需要使用某些版本的jar组件,它们有多个组件,但是是同样的版本,我们就可以这样来定义,比如说:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <jdk.version>1.6</jdk.version> <spring.version>4.1.2.RELEASE</spring.version> </properties> <!-- Spring Core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency>
这里我们用到了spring-core, spring-context等几个artifact,于是可以直接引用同样的版本信息变量。
除了这些以外,刚才我们看到很重要的一个就是依赖信息的定义,比如这里我们项目中需要使用到spring-core, spring-context,于是我们就需要在<dependencys>里面定义一个<dependency>的子元素。一个dependency里面指定一个组件的groupId, artifactId和version。可能我们有时候会有点疑惑,这些jar包到哪里去找呢?一般如果我们知道需要使用哪些组件的话,可以去:http://search.maven.org/来搜索需要的组件,在那里可以将需要的maven依赖定义信息直接拷过来。比如下图的spring依赖信息:
这样,一个基本的maven工程所需要的信息就配置好了。在后续的文章里,我们再讨论maven的生命周期和一些plugin的使用情况。
相关推荐
** Maven 概念详解 ** Maven 是一个强大的项目管理和构建工具,主要用于Java应用程序的开发。它通过提供一套标准化的项目对象...在"Maven-study"项目中,你可以深入学习并实践这些概念,进一步提升自己的专业技能。
Maven 的核心概念是 POM,它是一个 XML 文件,包含了项目的基本信息、构建配置、依赖关系、插件配置等。通过 POM,Maven 可以理解项目的需求并据此执行相应的构建任务。 【 Maven 安装与配置】 - **下载 Maven**:...
** Maven学习记录(一):安装与环境配置 ** Maven是Java开发中不可或缺的构建工具,它通过统一的项目对象模型(Project Object Model,POM)管理项目的构建、报告和依赖关系,极大地简化了项目的构建流程。这篇...
总结,"Maven学习极品"的资料是初学者入门的宝贵资源,它将帮助你理解Maven的核心概念,掌握依赖管理、构建生命周期和插件机制,进而提升开发效率和项目管理水平。通过深入学习和实践,你可以充分利用Maven的强大...
### Maven学习总结 #### Maven坐标概念 Maven坐标是一个重要的概念,它可以帮助开发者精确地定位一个项目的特定组件,比如JAR包或者WAR包。Maven坐标由三个关键部分组成:`GroupId`、`ArtifactId` 和 `Version`。 ...
**Maven学习笔记** 在Java开发领域,Maven是一个不可或缺的构建工具,它极大地简化了项目的构建、管理和依赖管理过程。Maven通过使用一个项目对象模型(Project Object Model,POM),XML格式的配置文件,定义了...
**Maven学习笔记** 在Java开发领域,Maven是一个不可或缺的构建工具,它极大地简化了项目的构建、管理和依赖管理过程...这份"Maven学习笔记"将是你探索Maven世界的宝贵资源,涵盖了从基本概念到高级特性的全方位知识。
1. Maven 的核心概念: - POM:POM是Maven项目的基本单位,它包含了项目的信息,如项目名称、版本、开发者信息、依赖关系等,并定义了构建过程。 - 仓库:Maven使用本地仓库存储下载的依赖,同时连接到远程中央...
在本文中,我们将深入探讨Maven的核心概念、使用方法以及如何通过学习Maven提升开发效率。 **一、Maven简介** Maven,一个由Apache软件基金会开发的项目管理工具,主要功能在于项目构建、依赖管理和项目信息管理。...
6. **Maven安装细节**:学习如何配置用户特定的设置和本地仓库位置,以及如何升级Maven安装版本。 7. **获取Maven帮助**:通过Maven帮助插件获取关于其他插件的描述和帮助信息。 ### Maven的示例项目 在本书的示例...
### Maven详解 #### Maven概述 Maven是一款由Apache组织维护的跨平台项目管理工具,主要用于基于Java...通过对Maven的学习和实践,开发者能够更好地管理项目依赖,规范项目结构,从而提升软件项目的质量和稳定性。
总结来说,Maven-example是一个展示Maven基本用法和配置的实例。通过这个例子,开发者可以学习如何设置POM,管理项目依赖,配置生命周期和插件,以及如何构建一个多模块的Java项目。了解并熟练掌握Maven,对于提升...
### Maven 学习与命令详解 #### 一、Maven简介 Maven 是一个 Java 项目的构建工具,它提供了一套完整的项目信息管理和构建方法,能够帮助开发者更方便地进行项目构建、依赖管理以及文档生成等工作。Maven 的核心...
Maven_Demo项目是一个学习Maven如何工作的实例,它涵盖了Maven的核心概念和常用操作。通过这个项目,开发者可以了解如何配置POM,管理依赖,以及执行构建生命周期中的各种任务。熟悉并掌握Maven对于提升Java开发效率...
1. 项目对象模型(Project Object Model,POM):Maven通过POM.xml文件来描述项目的基本信息,包括项目依赖、构建过程、插件配置等,它是Maven工作的基础。 2. 仓库:Maven使用本地仓库存储下载的依赖库,同时会...
本学习资料旨在帮助初学者理解 Maven 的基本概念、配置以及在实际开发中的应用。 ### Maven 的核心概念 1. **项目对象模型 (Project Object Model, POM)**:Maven 的核心是 POM,它是 Maven 项目配置的 XML 文件,...