Moven管理项目

 

项目目录

项目名称/  
	README.md  
	.git/  
	pom.xml
	Test.java                       // 测试类
	src/  
		main/
			java/                    // java源代码
			resources/               // 资源,比如说property文件,springmvc.xml
			webapp/WEB-INF/          // web应用文件目录,比如存放web.xml、本地图片、jsp视图页面
		test/
			java/                    // 测试类,比如说Junit代码
			resources/               // 测试用的资源
	target/                         // 打包输出目录
		classes/                     // 编译输出目录
		test-classes/                // 测试编译输出目录

构建生命周期

```构建生命周期```由```构建阶段```构成。执行某个阶段则该阶段及之前的所有阶段都会执行。  
根据打包类型不同(JAR / WAR / EAR),各阶段默认执行的插件就不同。    

// 命令行执行构建阶段,格式为:mvn 阶段名1 阶段名2 … mvn clean package


#### Clean

```pre-clean```:执行一些需要在clean之前完成的工作。  
```clean```:移除所有上一次构建生成的文件。  
```post-clean```:执行一些需要在clean之后立刻完成的工作。  

#### Default

```validate```校验项目是否正确并且所有必要的信息可以完成项目的构建过程。  
```initialize```:初始化构建状态,比如设置属性值。  
```generate-sources```:生成包含在编译阶段中的任何源代码。  
```process-sources```:处理源代码,比如说,过滤任意值。  
```generate-resources```:生成将会包含在项目包中的资源文件。  
```process-resources```:复制和处理资源到目标目录,为打包阶段最好准备。  
```compile```:编译项目的源代码。  
```process-classes```:处理编译生成的文件,比如说对Java class文件做字节码改善优化。  
```generate-test-sources```:生成包含在编译阶段中的任何测试源代码。  
```process-test-sources```:处理测试源代码,比如说,过滤任意值。  
```generate-test-resources```:为测试创建资源文件。  
```process-test-resources```:复制和处理测试资源到目标目录。  
```test-compile```:编译测试源代码到测试目标目录.  
```process-test-classes```:处理测试源码编译生成的文件。  
```test```:使用合适的单元测试框架运行测试(Juint是其中之一)。  
```prepare-package```:在实际打包之前,执行任何的必要的操作为打包做准备。  
```package```:将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。  
```pre-integration-test```:在执行集成测试前进行必要的动作。比如说,搭建需要的环境。  
```integration-test```:处理和部署项目到可以运行集成测试环境中。  
```post-integration-test```:在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。  
```verify```:运行任意的检查来验证项目包有效且达到质量标准。  
```install```:	安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。  
```deploy```:将最终的项目包复制到远程仓库中与其他开发者和项目共享。  

#### Site

```pre-site```:执行一些需要在生成站点文档之前完成的工作。  
```site```:生成项目的站点文档。  
```post-site```:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备。  
```site-deploy```:将生成的站点文档部署到特定的服务器上。  

#### 构建信息\<build>

可以通过在```POM```中配置```构建信息<build>```指定相关路径、资源和插件。

...资源列表 ...测试资源列表 ...插件列表 ...插件管理列表

#### 插件列表\<plugins>

可以通过在```POM```中配置```插件列表<plugins>```在指定阶段执行额外的插件。

...依赖列表

## 构建配置文件

```构建配置文件```是一系列的配置项的值,可以用来设置或者覆盖 Maven 构建默认值。  
使用```构建配置文件```,你可以为不同的环境,比如说生产环境和开发环境,定制构建方式。  

#### 配置文件\<profiles>

...其它激活方式 mavenVersion 2.0.3 ...构建信息 ...仓库列表 ...插件仓库列表 ...依赖列表 ...依赖管理列表

#### 命令台激活profile

// 指定id为xxx

xxx // 命令行激活,格式为:mvn 阶段名 -P id mvn test -P xxx ``` #### JDK激活profile ``` ``` #### 操作系统激活profile ``` Windows XP Windows x86 5.1.2600 ``` #### 文件的存在或缺失激活profile ``` /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/ /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/ ``` ## Maven仓库 当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库: 1. 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。 2. 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。 3. 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。 4. 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。 #### 本地仓库 ```本地仓库```在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。 运行 Maven 的时候,Maven 所需要的任何构件都是直接从```本地仓库```获取的。如果```本地仓库```没有,它会首先尝试从```远程仓库```下载构件至```本地仓库```,然后再使用```本地仓库```的构件。 默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为```.m2/respository/```的仓库目录。 ```本地仓库```默认被创建在```%USER_HOME%```目录下。要修改默认位置,在```%M2_HOME%/conf/```中的```settings.xml```中定义另一个路径。 ``` C:/MyLocalRepository ``` #### 中央仓库 ```中央仓库```是由 Maven 社区提供的仓库,其中包含了大量常用的库。 ```中央仓库```包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。 #### 远程仓库 ```远程仓库```是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。 ```远程仓库```通过```POM```中的``````配置。 ``` banseon-repository-proxy banseon-repository-proxy http://192.168.1.169:9999/repository/ default ``` ## 依赖管理 #### 父POM 通常情况下,在一个共通的项目下,有一系列的项目。在这种情况下,我们可以创建一个公共依赖的```POM```,该```POM```包含所有的公共的依赖关系,我们称其为其他```子项目POM```的```父POM```。 子项目要使用```父POM```,可通过```POM```中的``````配置。 ``` ``` #### 可传递性依赖发现 ```依赖调节 ```:决定当多个手动创建的版本同时出现时,哪个依赖版本将会被使用。依赖路径越短越优先,路径长度相同的话越先声明的越优先。 ```依赖管理```:直接的指定手动创建的某个版本被使用。例如当一个工程 C 在自己的依赖管理模块包含工程 B,即 B 依赖于 A, 那么 A 即可指定在 B 被引用时所使用的版本。 ```依赖范围```:包含在构建过程每个阶段的依赖。 ```依赖排除```:任何可传递的依赖都可以通过 "exclusion" 元素被排除在外。举例说明,A 依赖 B, B 依赖 C,因此 A 可以标记 C 为 "被排除的"。 ```依赖可选 ```:任何可传递的依赖可以被标记为可选的,通过使用 "optional" 元素。例如:A 依赖 B, B 依赖 C。因此,B 可以标记 C 为可选的, 这样 A 就可以不再使用 C。 ###### 依赖范围 ```编译阶段 ```:该范围表明相关依赖是只在项目的类路径下有效。默认取值。 ```供应阶段```:该范围表明相关依赖是由运行时的 JDK 或者 网络服务器提供的。 ```运行阶段 ```:该范围表明相关依赖在编译阶段不是必须的,但是在执行阶段是必须的。 ```测试阶段 ```:该范围表明相关依赖只在测试编译阶段和执行阶段。 ```系统阶段 ```:该范围表明你需要提供一个系统路径。 ```导入阶段```:该范围只在依赖是一个 pom 里定义的依赖时使用。同时,当前项目的POM 文件的 部分定义的依赖关系可以取代某特定的 POM。 #### 依赖列表\ ``` org.apache.maven maven-artifact 3.8.1 jar test spring-core org.springframework true ``` ## POM ``` 4.0.0 ...父POM ...项目相关描述 ...构建信息 ...profile列表 ...仓库列表 ...插件仓库列表 ...依赖列表 ...依赖管理列表 ``` ###### 项目相关描述 ``` asia.banseon banseon-maven2 jar 1.0-SNAPSHOT banseon-maven http://www.baidu.com/banseon A maven project to study maven. ``` ###### 资源列表 ``` ``` ###### 测试资源列表 ``` 资源列表 ``` ###### 插件管理列表 ``` 插件列表 ``` ###### 依赖管理列表 ``` 依赖列表 ``` ###### 插件仓库列表 ``` 仓库列表 ``` ## 创建Java项目 Maven 使用```archetype插件```创建项目。 ``` /** * -DgourpId: 组织名,公司网址的反写 + 项目名称 * -DartifactId: 项目名-模块名 * -DarchetypeArtifactId: 模板名 * -DinteractiveMode: 是否使用交互模式 */ mvn archetype:generate "-DgroupId=..." "-DartifactId=..." "-DarchetypeArtifactId=..." "-DinteractiveMode=..." ``` #### 常用模版 ```maven-archetype-quickstart```:一个简单的 Java 应用。