- 浏览: 1068680 次
- 性别:
- 来自: 广州
-
文章分类
- 全部博客 (1355)
- test (75)
- 红茶和绿茶 (1)
- Jave SE (206)
- Oracle (19)
- English (177)
- Log4j (5)
- RIA(Rich Internet Applications) (9)
- Ext Js (6)
- Android (14)
- Logo (0)
- 文字采撷 (287)
- 使用技巧 (92)
- Project Management (22)
- Hibernate (12)
- Struts (5)
- 规则引擎 (1)
- Html & Javasctipt (56)
- Spring MVC (10)
- Maven (17)
- Java Test (17)
- Linux (16)
- Tools (1)
- CV (0)
- Middleware (2)
- HTML5 (2)
- Algorithms (4)
- Web Service (15)
- 留学 (15)
- LADP (5)
- PXCOA (0)
- SysLog (6)
- SSO (3)
- Spring Security (4)
- Spring Batch (1)
- Jmail (1)
- Bible (4)
- Java Thread (5)
- Architect (6)
- github (2)
- Java Swing (12)
- NoSQL (7)
- UML (2)
- 敏捷(Agile) (7)
- Hudson+Maven+SVN (15)
- cloud computing (2)
- Bahasa Indonesia (1)
- jBPM (6)
- 民俗知识 (3)
- Consulting (1)
- Mysql (5)
- SAP (1)
- 微信公众平台接口开发 (3)
- 做生意 (1)
- 西餐 (1)
- Banking (1)
- Flex (0)
- 黄金投资 (1)
- Apache Tomcat 集群 (3)
- Hadoop (7)
- 需求分析 (1)
- 银行知识 (3)
- 产品管理 (2)
- 钢琴Music (3)
- 设计 (3)
- Marketing (2)
- US Life (3)
- 算法 (14)
- BigData (4)
- test红茶和绿茶Jave SEOracleEnglishLog4jRIA(Rich Internet Applications)Ext JsAndroidLogo文字采撷 (0)
- Design Pattern (5)
- NodeJS&AngularJS (9)
- Python (1)
- Spring boot (0)
- ACM (3)
最新评论
-
心往圣城:
微时代-最专业的微信第三方平台。LBS定位导航,微网站,自定义 ...
微信公众平台 /微信公众平台怎么用 -
zhaojiafan:
return ReverseStr1(str.substrin ...
逆转字符串 Write a String Reverser (and use Recursion!) -
zhaojiafan:
public class StringUtils {
p ...
逆转字符串 Write a String Reverser (and use Recursion!)
最近在做maven plugin自定义开发方面的研究,顺带把maven相对较系统的回顾了一遍,这个系列的笔记算是一些对maven2.0在软件开发各个生命周期中的使用小结吧。
所谓“万事开头难”,开发一个java application一开始最难的部分就是开始,如此多的逻辑概念的堆积,java代码,资源文件,应用依赖.jar应该如何组织存放?unit testing应该在什么时候执行?项目应该如何build?documented?tested?deployed?
很多工具可以提供项目的build,比如众所周知的ant。这边不做具体说明和对比,我只罗列出maven能给我们带来什么,官方网站给出的benefits list如下:
and you need to get started fast, Maven 2.0 will have you up an running in minutes.
The following are some of the advantages of Maven 2.0:
Standardized project layout and project structure generator.
Standardized dependency-management mechanism.
Multiple project support.
Instant downloads of new plugins and features as the developer needs them.
Website generation for up-to-date project information.
Integration with source control: CVS and Subversion.
maven带来了标准工程组织结构,标准工程发布管理机制,多重项目支持(模块化规划工程),插件的自主开发接口及可插拔安装,website生成及实时项目信息同步更新,通过与与svn或cvs的集成实现代码版本控制。下面开始介绍maven的使用介绍。
Getting Started:
假设现在开始一个java application的开发,我们可以应用maven来快速构建应用的程序结构,而不需要按以往的习惯在ide中手动进行层级创建,(maven的安装不做介绍)在命令窗口输入命令:
执行,你会发现maven已经为我们创建了名称为my-app的项目,其中项目结构如下:
2 |----src
3 |----main
4 |------java
5 |--------com
6 |----------as
7 |----test
8 |------java
9 |--------com
10 |----------as
这个结构包含了两个资源目录树:java application code和unit test code。在工程根目录下maven创建了pom.xml文件,是项目的最基本部分(the meat and potatoes )。 pom.xml是一系列的操作集合,用来告诉maven怎么build项目和引入项目build所需要的外部依赖及执行其他特殊操作。默认的,maven会加载junit依赖,来鼓励开发人员对程序代码测试实现。
2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3
4 <modelVersion>4.0.0</modelVersion>
5 <groupId>com.as</groupId>
6 <artifactId>my-app</artifactId>
7 <packaging>jar</packaging>
8 <version>1.0-SNAPSHOT</version>
9 <name>Maven Quick Start Archetype</name>
10 <url>http://maven.apache.org</url>
11 <dependencies>
12 <dependency>
13 <groupId>junit</groupId>
14 <artifactId>junit</artifactId>
15 <version>3.8.1</version>
16 <scope>test</scope>
17 </dependency>
18 </dependencies>
19 </project>
之前的操作已经创建了一个新的项目,并按maven提供的标准程序结构组织各个层次的代码存放目录。还是在命令窗口,切入到工程目录,以下罗列出maven的基本操作命令及说明:
2 mvn package: 创建打包应用的.jar文件.(pom.xml文件配置为packaging操作为jar操作)
3 mvn install: 安装工程生成jar文件到maven仓库,以提供其他应用依赖应用。
4 mvn site: 生成项目信息网站。
5 mvn clean: 清除应用编译存放目录。
6 mvn eclipse:eclipse: 将应用功能转化为eclipse可以直接导入的工程。
现在我们来创建一个基于java语言的web应用,在命令窗口输入:
|----src
|------main
|----resources
|----webapp
|----WEB-INF
和之前创建的项目有所不同的是创建一些将被打包到war中的资源目录,并且pom.xml文件中,packaging操作被指定为war而不是之前的jar。而且我们不用去担心在打包成war的时候如何将所有依赖拷贝到WEB-INF/lib目录下,maven会自动的处理这一切。另外,通过修改pom.xml中的build元素的finalName元素值,可以修改打包的war的名称。
Dependency Management :
之前的创建操作,让我们快速拥有了程序架构,那么回过头来关心下maven是如何来管理应用所用到的依赖。应用添加一个依赖是通过在pom.xml中新增dependencies元素的子元素dependency来实现。maven在下次build的时候会读取新增的dependency信息并从远程或本地仓库中下载并加载到工程的build path.比如我们要新增个依赖:quartz ,那么我们只需要在dependencies中增加如下格式的依赖定义:
2 <groupId>quartz</groupId>
3 <artifactId>quartz</artifactId>
4 <version>1.5.1</version>
5 <scope>compile</scope>
6 </dependency>
可以不用去关心quartz本身会再用到什么依赖,maven会自动把依赖所用的所有依赖都一起下载到你的本地仓库,并配置到你的工程build path。另外,在之前的junit依赖中,maven设置了其scope为test,那么意味着,maven只会在test phase中加载junit这个依赖。下面罗列出依赖的scope在各个阶段的定义:
2 test: 只在test阶段加载。
3 runtime: 依赖资源只在运行时加载。
4 provided: 依赖在运行时加载,但是不会出现在打出的包里。类似你要把某个依赖当作jdk的一个部分或者application server classpath.
Configuring Repositories:
项目中的每个开发人员各自定义项目依赖仓库,貌似不是很方便且有点繁琐,为此,maven提供了在同个pom.xml文件中同时定义多个依赖仓库的功能。在下面的pom.xml文件配置片段中,设置了两个依赖仓库配置,默认的仓库依赖路径为Ibiblio,另外添加了个镜像仓库路径作为备选,比如设置为本地局域网内的某个服务器地址,详细配置如下:
<repository>
<id>Ibiblio</id>
<name>Ibiblio</name>
<url>http://www.ibiblio.org/maven/</url>
</repository>
<repository>
<id>intranet</id>
<name>intranet mirror</name>
<url>http://192.168.1.120/maven2</url>
</repository>
</repositories>
Building Multiple Projects using a Parent pom.xml:
当一个项目分成多个模块子项目进行开发规划的时候,maven提供了通过parent pom.xml文件来进行多样工程配置绑定。 maven的依赖检查机制将分析检查各个子项目所用到的依赖并按互相依赖的顺序build各个子项目。下面举个例子来说明:
parent pom.xml:
2 <modelVersion>4.0.0</modelVersion>
3 <groupId>com.as</groupId>
4 <version>1.0-SNAPSHOT</version>
5 <artifactId>my-app</artifactId>
6 <packaging>pom</packaging>
7 <modules>
8 <module>Common</module>
9 <module>Utilities</module>
10 <module>Application</module>
11 <module>WebApplication</module>
12 </modules>
13 </project>
在这里,假设WebApplication需要确定是否包含了其他三个子项目的所有依赖,所以,把其他三个子项目按依赖的形式进行配置到WebApplication中;并且Utilities依赖于Common, Application依赖于Common,Utilities。即体现开发中遇到的各个子模块项目存在相互依赖的情况。接下来,对各个子项目的pom.xml进行配置如下:
Utilities:
<dependency>
<groupId>com.as</groupId>
<artifactId>Common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
Application:
<dependency>
<groupId>com.as</groupId>
<artifactId>Common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.as</groupId>
<artifactId>Utilities</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<dependency>
<groupId>com.as</groupId>
<artifactId>Common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.as</groupId>
<artifactId>Utilities</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.as</groupId>
<artifactId>Application</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
这样,只需要在parent pom.xml中添加各个模块项目的配置,来说明它们是当前build的一部分。
<groupId>com.as</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
Common, Utilities, Application, 和WebApplication目录于parent pom.xml文件存在于同个目录下。在parent pom.xml同级目录下执行maven package命令的时候,各个子模块项目就会按顺序进行build任务了。
Plugins and Reports:
maven2.0提供了方便的plugin注册入口。有点遗憾的是,很多maven1.x 的plugin不能在maven2.0上运行,不过,现在maven2.0的plugin已经很丰富了,所以,这个问题也就不再是问题了。下面是配置jdk 5的编译参数的plugin配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
另外一个使用比较频繁的maven plugin就是maven reporting plugin了,当执行mvn site命令时,这个plugin将发挥它的作用,配置使用如下:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
</plugins>
</reporting>
Maven Plugin Matrix(http://docs.codehaus.org/display/MAVEN/Maven+Plugin+Matrix) ,可以搜索到相关plugin可以在说明版本的maven上使用的详细信息。
Maven and Eclipse:
如果你按之前的说明操作,创建了一个新的项目,生成了项目的程序目录结构,你只要在项目的根目录路径下,在命令窗口中执行mvn eclipse:eclipse,就能把当前项目转化为在eclipse ide中可以import到workspace的项目了,这样,在eclipse ide中,就可以很方便的进行进一步的代码实现了。
Conclusion:
maven2.0提供了很多有用且高效的功能,特别是提供程序标准目录结构,这样,在开发的时候就不但可以很方便的把一个项目移动到另个项目,而且可以不用太关心程序目录结构和项目编译说明,maven已经提供了标准 :)
实际应用中,maven也提供了各种build system的自定义扩展,maven可以方便的进行 run nightly,deploy,并分布发送通知信息,从文档方面来说,maven提供了实时的项目信息site生成,每次build完毕,配置自动进行 site信息和项目实际开发进程更新同步.
maven2.0带来的可升级的build配置,方面使用,项目管理,在今后,更多的maven给出的build技术方面的标准的采用,意味着更多的效率,更多的方便。
更详细的信息可以在maven的官方网站得到。
推荐学习maven的书籍: better builds with maven (虽然个人感觉文笔不怎么样,但是,算是市面上唯一比较全面的maven使用介绍比较全的书吧)
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明.
Link: http://www.blogjava.net/alex0927/archive/2008/07/04/212639.html
发表评论
-
mvnw on mac
2017-10-01 07:43 911mvnw Like gradlew but for Mav ... -
Maven构建并管理Flex项目入门
2014-06-20 15:40 557Maven构建并管理Flex项 ... -
Maven3实战笔记11Maven集成Hudson进行持续集成
2014-06-20 15:40 564Maven3实战笔记11Mav ... -
开发者应该了解的 12 款 Eclipse 插件
2013-05-10 18:50 667Eclipse 成为最流行的集成开发环境,在很大 ... -
常用Maven插件介绍
2013-03-22 13:41 805我们都知道Maven本质上 ... -
Maven POM.xml
2012-10-26 17:36 0<project xmlns="http:// ... -
Maven in action
2012-09-14 17:50 735Maven in action.pdf is a g ... -
Cargo 主要用来自动部署
2012-09-14 11:31 867The usage of Cargo for executin ... -
Jetty Maven Plugin( Very useful for rapid development and testing)
2012-09-14 11:23 774主要用来自动侦测开发时修改的文件,如,页面,java类(会自动 ... -
体验maven插件功能,同时打包jar和war
2012-04-17 10:46 2051体验maven插件功能,同时打包jar和war maven ... -
maven 简单用法_东征岁月
2012-04-17 10:24 922maven 简单用法_东征岁 ... -
(来自IBM) JUnit4 与 JMock 之双剑合璧
2012-02-03 15:29 1225引言 单元测试可以保证代码的质量,最大程度降低修复系统 bu ... -
Maven常用命令
2012-02-03 00:16 752Maven库: http://repo2.maven ... -
maven+jmock
2012-02-03 13:50 970Maven + jmock + dependency +rep ... -
Maven 插件
2012-02-05 23:10 727Maven 插件 -
Maven构建Web项目 .
2012-01-20 15:41 1022一、直接建立Maven项目方法 1、建立Maven项目 ... -
maven学习总结
2012-01-20 15:14 8931、关于Maven 最近学了一些maven方面的知识 ...
相关推荐
maven-deploy-plugin-2.8.2.jar
Maven更新问题 今天Maven在更新的时候发现一直更新不成功,总结下解决方法。 在apache-maven-3.5.2/conf/setting.xml中加入以下配置即可解决 alimaven aliyun maven ...
maven-deploy-plugin-2.7.jar
2. **构建项目**: 使用 `mvn clean compile` 清理并编译项目,`mvn test` 运行测试,`mvn package` 打包项目。 3. **依赖管理**: 在 POM.xml 文件中声明依赖,Maven 会自动下载并管理这些依赖。 4. **发布到远程仓库...
对于"HelloMM"项目,我们首先要确保Maven环境已安装,然后在命令行或IDE中运行`mvn compile`命令,这会编译源代码。接着,`mvn test`将运行任何配置的单元测试,确保代码正确无误。最后,`mvn package`会将编译后的...
**Maven教程:基础篇——尚硅谷学习笔记 2022年** Maven是一个强大的Java项目管理和构建工具,由Apache软件基金会开发。它通过提供一个标准的项目对象模型(Project Object Model,POM)来简化项目的构建过程,并...
2. **一键运行与调试**:用户可以通过简单的点击操作,执行Maven的各种生命周期阶段,如`clean`、`compile`、`test`、`install`和`deploy`,无需记住复杂的命令行语法。 3. **依赖管理**:MavenRunHelper支持添加、...
使用Maven,开发者可以利用命令行工具进行各种操作,如初始化项目(`mvn archetype:create`)、编译源代码(`mvn compile`)、运行测试(`mvn test`)、打包应用(`mvn package`)、安装到本地仓库(`mvn install`)...
`mvn`命令支持各种生命周期阶段,如`clean`(清理项目)、`compile`(编译源代码)、`test`(运行测试)、`package`(打包项目)、`install`(将项目安装到本地仓库)和`deploy`(部署到远程仓库)。 此外,Maven的...
compile 'homhomlin.lib:psv-library:1.0.1' or Maven dependency: homhomlin.lib psv-library 1.0.1 API v12 : Gradle dependency: compile 'homhomlin.lib.v12:psv-library:1.0.1' or Maven dependency: ...
3. **构建生命周期管理**:Maven定义了一系列的构建生命周期阶段(如`clean`、`compile`、`test`、`package`、`install`、`deploy`等),开发者可以通过命令行工具执行这些阶段,自动化构建流程。 4. **插件和目标*...
Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project
Maven deploy 配置方法详解 Maven deploy 是 Maven 生命周期的一部分,负责将项目的构件部署到远程仓库中,以便其他开发者和工程共享。下面将详细介绍 Maven deploy 配置方法。 pom.xml 配置 在 pom.xml 文件中,...
maven-plugin-testing-harness-2.1.jar
Maven是一个软件项目管理和构建自动化工具,主要服务于基于Java的项目管理。它由Apache软件基金会提供支持,使用一种名为Project Object Model (POM) 的XML文件格式来描述项目的构建过程、依赖关系和其他配置信息。 ...
### Apache Maven 2 有效实施知识点详解 #### 一、Apache Maven 2 概述 Apache Maven 是一个项目管理和理解工具。它包含了构建过程(build process)、软件项目信息和最佳实践指南。Maven 的主要目标是让构建过程...
例如,`maven-compiler-plugin`插件包含了`compile`目标,用于编译Java源代码。通过这种方式,Maven提供了一个灵活且强大的构建系统。 #### 4. 依赖管理 Maven的一大特色是其依赖管理系统,它可以自动下载项目所需...
在使用maven时,修改插件tomcat启动端口。一开始我在pom.xml配置文件里面修改,如下面所示: <groupId>org.apache.tomcat.maven <artifactId>tomcat7-maven-plugin <version>2.2 <port>9999 <uriEncoding>UTF-8 ...
Chapter 2: IDE Integration with Maven Chapter 3: Maven Lifecycle Chapter 4: Essential Maven Plugins Chapter 5: Dependency Management Chapter 6: Code Quality Plugins Chapter 7: Reporting and ...
软件介绍: idea Maven Helper的本地离线安装包,这个能够解决idea插件无法在线安装的问题。IDEA在线安装Maven Helper插件有时候会很慢,需要先将下载的ZIP压缩包解压后再使用。