`
gdwrx_winson
  • 浏览: 131578 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Maven关键名词

阅读更多
转自:http://www.wujianrong.com/archives/2006/12/maven_3.html 最近由于工作原因在研究、应用Maven,有了一些体会就写成了此文。本文虽然是Maven2的入门文章,但并不涉及 Maven的历史、下载与安装,这些内容可以到Maven的官方网站上了解。本文主要是关注Maven中的重要概念,并以一个实例来阐述使用Maven的 基本方法。文末有例子代码下载的链接。 1 关键名词 Project:任何您想build的事物,Maven都可以认为它们是工程。这些工程被定义为工程对象模型(POM,Poject Object Model)。一个工程可以依赖其它的工程;一个工程也可以由多个子工程构成。 POM:POM(pom.xml)是Maven的核心文件,它是指示Maven如何工作的元数据文件,类似于Ant中的build.xml文件。POM文件位于每个工程的根目录中。 GroupId:groupId是一个工程的在全局中唯一的标识符,一般地,它就是工程名。groupId有利于使用一个完全的包名,将一个工程从其它有类似名称的工程里区别出来。 Artifact:artifact 是工程将要产生或需要使用的文件,它可以是jar文件,源文件,二进制文件,war文件,甚至是pom文件。每个artifact都由groupId和 artifactId组合的标识符唯一识别。需要被使用(依赖)的artifact都要放在仓库(见Repository)中,否则Maven无法找到 (识别)它们。 Dependency:为了能够build或运行,一个典型的Java工程会依赖其它的包。在Maven中,这些被依赖的包就被称为dependency。dependency一般是其它工程的artifact。 Plug-in:Maven是由插件组织的,它的每一个功能都是由插件提供的。插件提供goal(类似于Ant中的target),并根据在POM中找到的元数据去完成工作。主要的Maven插件要是由Java写成的,但它也支持用Beanshell或Ant脚本写成的插件。 Repository:仓库用于存放artifact,它可以是本地仓库,也可以是远程仓库。Maven有一个默认的远程仓库--central,可以从http://www.ibiblio.org/maven/下载其中的artifact。在Windows平台上,本地仓库的默认地址是User_Home\.m2\repository。 Snapshot:工程中可以(也应该)有一个特殊版本,它的版本号包括SNAPSHOT字样。该版本可以告诉Maven,该工程正处于开发阶段,会经常更新(但还未发布)。当其它工程使用此类型版本的artifact时,Maven会在仓库中寻找该artifact的最新版本,并自动下载、使用该最新版。 2 Maven Build Life Cycle 软件项目一般都有相似的开发过程:准备,编译,测试,打包和部署,Maven将上述过程称为Build Life Cycle。在Maven中,这些生命周期由一系列的短语组成,每个短语对应着一个(或多个)操作;或对应着一个(或多个)goal(类似于Ant中的 target)。 如编译源文件的命令mvn compile中的compile是一个生命周期短语。同时该命令也可以等价于mvn compiler:compile,其中的compiler是一个插件,它提供了compile(此compile与mvn compile中的compile意义不同)goal;compiler还可提供另一个goal--testCompile,该goal用于编译junit测试类。 在执行某一个生命周期时,Maven会首先执行该生命周期之前的其它周期。如要执行compile,那么将首先执行validate,generate- source,process-source和generate-resources,最后再执行compile本身。关于Maven中默认的生命周期短语,请见参考资源[6]中的附录B.3。 3 标准目录布局 Maven为工程中的源文件,资源文件,配置文件,生成的输出和文档都制定了一个标准的目录结构。Maven鼓励使用标准目录布局,这样就不需要进行额外 的配置,而且有助于各个不同工程之间的联接。当然,Maven也允许定制个性的目录布局,这就需要进行更多的配置。关于Maven的标准目录布局,请见参考资源[6]中的附录B.1。 4 Maven的优点 [1]build逻辑可以被重用。在Ant中可能需要多次重复地写相同的语句,但由于POM的继承性,可以复用其它的POM文件中的语句。这样既可以写出清晰的build语句,又可以构造出层次关系良好的build工程。 [2]不必关注build工作的实现细节。我们只需要使用一些build生命周期短语就可以达到我们的目标,而不必管Maven是如何做到这些的。如,只需要告诉Maven要安装(install),那么它自然就会验证,编译,打包,及安装。 [3]Maven会递归加载工程依赖的artifact所依赖的其它artifact,而不用显示的将这些artifact全部写到dependency中。 [4]如果完全使用Maven的标准目录布局,那么可以极大地减少配置细节。 5 实例 5.1 构想 由于只是阐述Maven的基本使用方法,所以本文将要设计的实例,只是一个简单的Maven demo。该实例包含两个工程:普通应用程序工程(app)和Web应用工程(webapp)。app工程提供一个简单的Java类;webapp工程只 包含一个Servlet,并将使用app中的Java类。 该Demo的目标是能够正确地将webapp制成war包,以供部署时使用。要能够正确制作war,自然首先就必须要能够正确的编译源代码,且要将App模块制成jar包。本文创建的工程所在的目录是D:\maven\demo。 5.2 App工程 可以使用Maven的archetype插件来创建新工程,命令如下: D:\maven\demo>mvn archetype:create -DgroupId=ce.demo.mvn -DartifactId=app 该工程的groupId是ce.demo.mvn,那么该工程的源文件将放在Java包ce.demo.mvn中。artifactId是app,那么该工程根目录的名称将为app。 当第一次执行该命令时,Maven会从central仓库中下载一些文件。这些文件包含插件archetype,以及它所依赖的其它包。该命令执行完毕后,在目录D:\maven\demo下会出现如下目录布局: app |-- pom.xml `-- src |-- main | `-- java | `-- ce | `-- demo | `-- mvn | `-- App.java `-- test `-- java `-- ce `-- demo `-- mvn `-- AppTest.java 因本文暂时不涉及JUnit测试,故请将目录app\src\test目录删除。然后再修改App.java文件,其完全内容如下: package ce.demo.mvn; public class App { public String getStr(String str) { return str; } } 其实,如果我们能够清楚地知道Maven的标准目录布局,就可以不使用archetype插件来创建工程原型;如果我们要定制个性的目录布局,那么就更没有必要使用archetype插件了。 5.3 WebApp工程 我们仍然如创建app工程一样使用archetype插件来创建webapp工程,命令如下: D:\maven\demo>mvn archetype:create -DgroupId=ce.demo.mvn -DartifactId=webapp -DarchetypeArtifactId=maven-archetype-webapp 第一次运行此命令时,也会从central仓库中下载一些与Web应用相关的artifact(如javax.servlet)。此命令与创建app的命 令的不同之处是,多设置了一个属性archetypeArtifacttId,该属性的值为maven-archetype-webapp。即告诉 Maven,将要创建的工程是一个Web应用工程。创建app工程时没有使用该属性值,是由于archetype默认创建的是应用程序工程。同样的,执行 完该命令之后,会出现如下标准目录布局: webapp |-- pom.xml `-- src `-- main `-- webapp |-- index.jsp |-- WEB-INF `-- web.xml 根据5.1节的构想,webapp工程将只包含一个Servlet,所以我们不需要index.jsp文件,请将其删除。此时大家可以发现,目前的目录布 局中并没有放Servlet,即Java源文件的地方。根据参考资源[6]中的附录B.1,以及app工程中Java源文件的布局,可以知道 Servlet(它仍然是一个Java类文件)仍然是放在webapp\src\main\java目录中,请新建该目录。此处的Servlet是一个简单HelloServlet,其完整代码如下: package hello; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import ce.demo.mvn.App; // 引用app工程中的App类 public class HelloServlet extends HttpServlet { private static final long serialVersionUID = -3696470690560528247L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { App app = new App(); String str = app.getStr("CE Maven Demo"); PrintWriter out = response.getWriter(); out.print(""); out.print("

" + str); out.print("

分享到:
评论

相关推荐

    paranamer-maven-plugin-2.5.zip

    综合上述信息,我们可以了解到两个关键的开源项目:一是用于Java开发的Paranamer Maven插件,帮助开发者获取方法参数名称;二是Scala Inflector,一个在Scala中实现的文本操作库,提供丰富的字符串处理功能。这两个...

    confit-api-model-0.17.0.zip

    Apache Solr Maven插件的使用通常涉及到以下几个关键知识点: 1. **Apache Solr**: Solr提供了索引和搜索大量文本数据的能力,支持丰富的查询语法和结果排序。它还允许自定义处理数据,如分词、同义词处理等,以...

    收集与Java开发相关的文档,包括基础系统服务(大数据、流计算、NoSQL等)、专业名词、jar包、开发工具等文档

    以下是对这些关键领域的一些详细解释: 1. **Java基础**:Java是一种多平台的、面向对象的编程语言,由Sun Microsystems(现为Oracle公司)开发。它的“Write Once, Run Anywhere”(WORA)理念使得开发者可以在...

    java中文分词

    1. **字典分词**:ikanalyzer使用词典进行分词,词典中包含了大量常用词汇和专有名词,能够快速准确地识别出词语。 2. **动态词典**:ikanalyzer支持动态加载和更新词典,可以在运行时增加或修改词典内容,适应不同...

    solr5的中文分词器ik-analyzer-solr5-master.zip

    IK Analyzer是一个广泛使用的开源中文分词器,尤其在搜索引擎领域,如Apache Solr和Elasticsearch中,它扮演着关键的角色。本项目"ik-analyzer-solr5-master.zip"是IK Analyzer针对Solr5的特别修正版,确保与该版本...

    Jenkins使用指引文档

    ### Jenkins使用指引文档知识点 #### 1. Jenkins简介 **1.1.... Jenkins是一款开源持续集成工具,旨在提供一种自动化的方式来...以上就是从给定的文件信息中提取的关键知识点,希望能帮助您更好地理解和使用Jenkins。

    opennlp最新工具包

    OpenNLP包含预训练的模型,可以快速有效地进行词性标注,这对于理解句子结构和含义非常关键。 **4. 名称抽取(Name Entity Recognition, NER)** 名称抽取是识别文本中具有特定意义的实体,如人名、地名、组织名等...

    IKAnalyzer2012_u6.zip

    IK Analyzer是一个基于Maven构建的项目,它旨在提供高效、灵活的中文分词解决方案。 IK Analyzer的核心功能是对中文句子进行分词处理,即将连续的汉字序列切分成具有实际意义的词汇单元,这是中文自然语言处理的...

    IKAnalyzer中文分词器 v3.2.0 源码包

    词典通常包含了大量的常用词汇、专有名词和短语,是分词器性能的关键。在源码中,开发者可以找到词典的格式和更新方法。 3. **配置文件**:这些文件允许用户自定义分词器的行为,例如设置停用词表、选择分词模式...

    solr5的ik中文分词器源码

    在处理中文文本时,一个关键的组件就是中文分词器,而IK(Intelligent Chinese)分词器是Solr中常用的中文分词工具之一。本文将深入探讨"solr5的ik中文分词器源码"的相关知识点。 1. **IK分词器概述**: IK分词器...

    IKAnalyzer3[1].2.3Stable_bin

    对于Maven或Gradle项目,可以在pom.xml或build.gradle文件中添加相应的依赖。 4. **使用API**:在代码中,通过创建Analyzer实例,如`IKAnalyzer analyzer = new IKAnalyzer(new FileInputStream("path_to_dict"));`...

    后院分词系统(yard)源代码下载

    同时,词性标注是中文分词的另一个重要环节,它标识出每个词语在句子中的语法角色,如名词、动词、形容词等,对于后续的句法分析和语义理解起到关键作用。 在实际应用中,Yard可以用于新闻分析、社交媒体监测、搜索...

    IMFRestDemo:这是IMF的其余API

    【IMFRestDemo项目概述】 IMFRestDemo是一个基于Java技术栈开发的RESTful API示例,...开发者可以通过分析和运行此项目,深入了解如何构建基于Java的Web服务,并学习如何使用这些关键技术来处理数据持久化和接口设计。

    分词工具 IKAnalyzer2012_SRC

    - **词典管理**:IKAnalyzer内置了丰富的中文词汇库,包括常用词、专有名词、网络词汇等。词典的加载和更新是分词过程中的关键部分。 - **分词器**:实现分词算法,根据输入的文本流进行分词操作,返回分词结果。 ...

    阿里巴巴Java编码规范

    类和接口的命名应采用名词,方法名使用动词。 2. **异常日志**:在异常处理中,规范强调了正确捕获和处理异常的重要性,以及如何记录详尽的错误日志。这包括使用try-catch-finally结构,避免使用空catch块,以及在...

    IK分词器-供分词使用

    在自然语言处理(NLP)领域,分词是基础且关键的一环,因为正确的分词直接影响后续的文本分析、信息检索、情感分析等任务的效果。 IK分词器的主要特点包括: 1. 高性能:IK分词器采用高效的算法和数据结构,能够...

    java开发的 文档

    4. **使用指南**:这份文档会指导开发者如何搭建开发环境、运行项目、进行单元测试等,通常包括依赖管理(如Maven或Gradle)、数据库配置、服务器部署等步骤。 5. **服务层(service)**:在Java开发中,服务层是业务...

    阿里巴巴Java开发手册(终极版).pdf

    例如,类名通常用名词或名词短语,方法名用动词或动宾短语。 2. **注释规范**:注释应当简洁明了,描述代码功能和用途,避免过于琐碎。Javadoc的使用能提高代码文档化程度,方便API的使用和理解。 3. **异常处理**...

Global site tag (gtag.js) - Google Analytics