- 浏览: 791798 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (651)
- Java (39)
- Java 初学者小问题 (66)
- 设计模式 (7)
- 项目管理 (3)
- 数据库 (1)
- 算法 (2)
- Java practices (6)
- Effective Java2读书笔记 (78)
- Linux (2)
- programming ruby 读书笔记 (5)
- Core Java Ninth Edition Volume I 读书笔记 (15)
- Pro Git 读书笔记 (12)
- Git (3)
- Maven in Action 读书笔记 (20)
- Web (12)
- 非技术类书籍 (11)
- 电影 (40)
- Web Cache (1)
- jquery (0)
- 历史 (4)
- Dive Into HTML5 读书笔记 (13)
- 三国演义小学毕业考 (79)
- 高效能人士的7个习惯 读书笔记 (12)
- Java Performance 读书笔记 (3)
- Protocol Buffer 学习笔记 (6)
- Mongo DB 学习笔记 (7)
- Morphia 学习笔记 (7)
- Algorithms -- Princeton 学习笔记 (13)
- String研究 (10)
- Hadoop: The Definitive Guide 读书笔记 (3)
- Java与模式读书笔记 (5)
- Date研究 (3)
- The Roman Empire 听课笔记 (4)
- Algorithms -- Standford 学习笔记 (16)
- Core Java Ninth Edition Volume II 读书笔记 (9)
- Thinking in Java 4th Edition 读书笔记 (21)
- Node : Up and Running 学习笔记 (5)
- Eloquent Javascript (8)
- Smashing Node.js 读书笔记 (1)
- Algorithms II -- Standford 学习笔记 (19)
- Algorithm II -- Princeton 学习笔记 (14)
- 网络安全 (2)
- Javascript (4)
- 正则表达式 (1)
- JAVA 7/8 (15)
- JVM (10)
- NodeJS (1)
- 鸟哥的linux私房菜读书笔记 (14)
- Web Service (1)
- The art of programming (9)
- Introduction to Algorithm 读书笔记 (4)
- Java 源码阅读 (0)
- Spring in Action 读书笔记 (2)
- Java Network Programming 读书笔记 (2)
最新评论
-
心存高远:
谢谢作者分享,刚好看到这里不太明白,现在茅塞顿开。不过runt ...
关于 Maven的传递依赖的理解 -
sxlkk:
851228082 写道甚至在某次技术会议现场遇到《Maven ...
关于 Maven的传递依赖的理解 -
851228082:
851228082 写道a----compile----b-- ...
第五章 坐标和依赖 -
851228082:
a----compile----b-----provided- ...
第五章 坐标和依赖 -
851228082:
甚至在某次技术会议现场遇到《Maven in action》的 ...
关于 Maven的传递依赖的理解
1. 就像Make的Makefile, Ant的build.xml一样,Maven项目的核心是pom.xml。POM(Project Object Model)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
2. pom.xml举例:
<?xml version=”1.0” encoding=”UTF-8”?> <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/maven-v4_0_0.xsd”> <modelVersion>4.0.0</modelVersion> <groupId>com.juvenxu.mvnbook</grouId> <artifactId>hello-world</artifactId> <version>1.0-SNAPSHOT</version> <name>Maven Hello World Project</name> </project>
project 元素是所有pom.xml的根元素,它还声明了一些POM相关的命名空间及xsd元素,虽然这些属性不是必须的,但使用这些属性能够让第三方工具(如IDE中的XML编辑器)帮助我们快速编辑POM。modelVersion指定了当前POM模型的版本,对于Maven2及Maven3来说,它只能是4.0.0。
3. groupId,artifactId和version三个元素定义了一个项目基本的坐标,在Maven的世界,任何的jar、pom或者war都是以基于这些基本的坐标进行区分的。groupId定义了项目属于哪个组,这个组往往和项目所在组织或公司关联。如com.googlecode.myapp或 com.mycom.myapp。artifactId定义了当前Maven项目在组中唯一的的ID,如myapp-util或myapp-domain等等。Version是定了项目的当前版本,如1.0-SHNAPSHOT。SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。
4. 默认情况下,Maven假设项目主代码位于src/main/java目录。Maven会自动搜寻该目录找到项目主代码。一般来说,项目中Java类的包都应该基于项目的groupId和artifactId,这样更加清晰,更加符合逻辑,也方便搜索。
5. 在项目根目录下运行 mvn clean compile 可以执行项目的清理和编译任务。Maven会先执行clean:clean任务(clean插件的clean目标),删除target/目录,默认情况下Maven构建的所有输出都在target/目录中;接着执行resources:resources任务;最后执行compiler:compile任务,将项目主代码编译至target/classes目录。
6. Maven项目中默认的测试代码目录是src/test/java。要使用Junit,需要在POM中添加相关依赖:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency> </dependencies>
有了这段声明,Maven就能自动从中央仓库(http://repo1.maven.org/maven2)下载junit-4.7.jar了。scope 指定了依赖范围。Test表示该依赖只对测试有效(只有测试代码可以import JUnit)。scope默认值是compile表示对主代码和测试代码都有效。
7. mvn clean test 会执行clean:clean、resources:resources、compiler:compile、resources:testResources、compiler:testCompile以及surefire:test。 Maven会在执行test之前执行
resources:resources、compiler:compile、resources:testResources以及compiler:testCompile。(项目主资源处理,主代码编译,测试资源处理,测试代码编译等工作)
8. Maven的核心插件之一compiler插件默认只支持编译Java1.3,因此我们需要在POM中配置该插件使其支持Java 5:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </build>
9. 测试代码通过编译之后会在target/test-classes下生成二进制文件。surefire是Maven世界中负责执行测试的插件。
10. 我们可以执行mvn clean package进行打包,如果不指定打包类型,使用默认的jar。jar:jar会将项目主代码的二进制文件夹打成包以artifact-version.jar的命名规范出现在target/输出目录中。
11. 执行mvn clean install将项目输出的jar安装到Maven本地仓库中,在此之前会执行jar:jar,然后再执行install:install。
12. 执行test之前会先执行compile, 执行package之前会先执行test,执行install之前会先执行package。
13. 为了生成可执行的jar包,我们需要借助maven-shade-plugin,在POM中配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation=”org.apache.maven.plugins.shade.resource.ManifestResourceTransformer”> <mainClass>com.juvenxu.mvnbook.helloworld.HelloWorld</mainClass> </transformer> </transformers> </configuration> </executions> </plugin>
14. 我们称项目的基本目录结构(主代码目录、测试代码目录等)和pom.xml文件内容为项目的骨架。我们可以用mvn archetype:generate来生成项目的骨架。该命令在Maven 2中是不安全的,因为它会自动下载最新的archetype插件版本,可能得到不稳定的SNAPSHOT版。然而在Maven 3中,即使用户没有指定版本,Maven也只会解析最新的稳定版本。Maven 2中建议使用
mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate
冒号的分隔格式为:groupId:artifactId:version:goal。 org.apache.maven.plugins是Maven官方插件的groupId。
发表评论
-
关于 Maven的传递依赖的理解
2012-09-30 09:50 13979今天又回顾了一下 《Maven in Action》的读书笔记 ... -
《Maven in Action》读后感
2012-02-23 23:48 2205今天终于读完了《Maven in Action》一书,真所谓书 ... -
第十八章 Archetype
2012-02-23 23:30 50691. Archetype 是 Maven ... -
第十七章 编写Maven插件
2012-02-23 19:42 44841. 编写 Maven 插件的主要步骤 ... -
第十六章 m2eclipse
2012-02-23 15:44 23721. m2eclipse ( http: ... -
第十五章 生成项目站点
2012-02-21 09:27 22831. Maven 社区提供了大量插件,能让用户 ... -
第十四章 灵活的构建
2012-02-20 16:21 18661. 通过 <propertie ... -
第十三章 版本管理
2012-02-20 15:57 21141. 版本管理( Version Manage ... -
第十二章 使用Maven构建Web应用
2012-02-15 18:38 60371. Web 项目的 POM ... -
第十一章 使用Hudson进行持续集成
2012-02-09 17:09 23051. 持续集成就是快速 且高频率 ... -
第十章 使用Maven进行测试
2012-02-05 22:17 213961. com.google.code. ... -
第九章 使用Nexus创建私服
2011-12-06 23:17 107871. Nexus 分为开源版和企业版,开源 ... -
第八章 聚合与继承
2011-12-06 09:55 20401. 为了能用一条命令来构建一个实际 ... -
第七章 生命周期和插件
2011-12-05 13:36 22961. Maven 的生命周期就是为了对所有的构 ... -
第六章 仓库
2011-12-03 18:44 24031. Maven 在一个工作站上的某个位置统一 ... -
第五章 坐标和依赖
2011-12-03 15:14 20771. Maven 定义了这样一组规则:世界上任 ... -
第四章 背景案例
2011-12-02 21:20 14151. 主要场景: 1) 用户访问注册页面 2) ... -
第二章 Maven的安装和配置
2011-12-01 10:01 62281. 设置JAVA_HOME, Path中加入%JAVA_H ... -
第一章 Maven 简介
2011-12-01 09:48 22831. Maven 是优秀的构建工 ...
相关推荐
从给定的文件信息来看,标题为“maven 使用入门第三章”,这表明文档主要聚焦于Maven这一开源项目管理工具的使用指南,且重点在第三章的内容上。Maven是一个用于Java项目的自动化构建工具,它通过提供统一的项目信息...
第3章 Maven使用入门16.3.1 编写POM17.3.2 编写主代码18.3.3 编写测试代码19.3.4 打包和运行20.3.5 使用Archetype生成项目骨架21.3.6 m2eclipse简单使用22.3.7 NetBeans Maven插件简单使用23.3.8 小结
xml2.7.3 不要使用ide内嵌的maven2.8 小结第3章 maven使用入门3.1 编写pom3.2 编写主代码3.3 编写测试代码3.4 打包和运行3.5 使用archetype生成项目骨架3.6 m2eclipse简单使用3.6.1 导入maven项目3.6.2 ...
### Maven 使用入门详解 #### Maven 介绍与优势 Maven 是一款流行的 Java 项目管理和构建工具,它通过一套标准化的方法来简化项目的构建过程。Maven 的核心价值在于它能够简化项目构建过程,使得开发者能够更加...
### Maven 入门使用 #### 一、Maven 安装与配置 Maven 是一款自动化构建工具,它可以帮助开发者简化 Java 项目的构建过程。在使用 Maven 之前,首先需要安装并配置好 Maven 环境。 **1. Maven 安装** - 下载 ...
第3章:Maven使用入门/3.1 编写POM 第3章:Maven使用入门/3.2 编写源代码 第3章:Maven使用入门/3.3 编写测试代码 第3章:Maven使用入门/3.4 打包 第3章:Maven使用入门/3.5 发布 第5章:坐标和依赖/5.2 坐标详解 第...
Maven 3 入门 -- HelloWorld Maven 是一个强大的项目管理工具,主要用于构建、管理和部署Java项目。在Java开发领域,Maven 已经成为标准的构建工具,它通过简化项目构建过程,使得开发者能够专注于代码本身,而不是...
1. **Maven入门** Maven的安装与配置是学习的第一步。它使用POM(Project Object Model)文件来管理项目依赖,使得项目构建标准化。通过`mvn install`等命令,开发者可以快速完成编译、测试、打包、部署等任务。...
Maven3是Maven系列的第三个主要版本,它在Maven2的基础上进行了改进,提供了更高效、更稳定、更易用的功能,帮助开发者更加便捷地管理项目的构建、依赖和生命周期。 ### Maven的核心概念 1. **项目对象模型...
- **私有仓库(Private Repository)**: 企业通常会设置私有仓库,用于存储内部项目和不允许公开的第三方依赖。 ### Maven的父POM与继承 - 父POM可以定义共用的配置,子项目通过继承父POM,可以减少重复的配置。 -...
本地仓库是项目运行时存放依赖的地方,远程仓库通常为公司的内部仓库或第三方库,中央仓库是公开的、全球共享的Maven资源库,包含了大量开源组件。 **3. Maven的安装配置** - 下载Maven:访问官方网址...
Maven的最新版本为2.0.9,但需要注意的是,Maven2与早期的Maven1在很多方面存在显著差异,因此在查阅第三方文档时需明确区分这两个版本。 1. Maven资源: - Maven官方网站:获取最新版本、文档和社区支持。 - The...
同时,为了提高依赖的下载速度,还可能会介绍如何配置Maven镜像,通常会指向使用快速的第三方镜像服务,如阿里云、华为云等提供的镜像。 2.2.5 Eclipse 考虑到Eclipse是Java开发者广泛使用的IDE工具,文档会专门...
** Maven2 快速入门教程 ** Maven是Apache软件基金会开发的一款项目管理和集成工具,主要应用于Java项目。Maven2是Maven的第一个稳定版本,它极大地简化了项目的构建、依赖管理和文档生成过程。本教程将带你一步步...
Maven的强大之处在于其能够自动下载所需的依赖包,这在使用大量第三方库的Java项目中尤为有用。Maven通过中央仓库管理所有依赖,它能够解决依赖冲突、版本冲突等问题,并且能够维护项目依赖的清晰和简洁。此外,...
3. **依赖管理**:自动解决和管理项目所需的第三方库,避免了手动添加和版本冲突的问题。 4. **无限扩展**:通过插件机制,Maven可以扩展实现各种功能,如Tomcat和Jetty插件用于服务器管理。 5. **持续集成**:鼓励...