18
Maven – 项项项项项项

Maven – 项目管理利器

Embed Size (px)

DESCRIPTION

Maven – 项目管理利器

Citation preview

Page 1: Maven – 项目管理利器

Maven – 项目管理利器

Page 2: Maven – 项目管理利器

Comparation

…<property name="src" location="src/main/java"/><property name="build" location="target/classes"/>

<target name="compile" depends="init"description="compile the source " ><javac srcdir="${src}" destdir="${build}"/></target>…

…<property name="src" location="src/main/java"/><property name="build" location="target/classes"/>

<target name="compile" depends="init"description="compile the source " ><javac srcdir="${src}" destdir="${build}"/></target>…

<project><modelVersion>4.0.0</modelVersion><groupId>com.kaiqi</groupId><artifactId>wap</artifactId><version>1.0</version></project>

<project><modelVersion>4.0.0</modelVersion><groupId>com.kaiqi</groupId><artifactId>wap</artifactId><version>1.0</version></project>

Page 3: Maven – 项目管理利器

…What is it ?

Maven 是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model - pom.xml) ,一组标准集合,一个项目生命周期(Project Lifecycle) ,一个依赖管理系统 (Dependency Management System) ,和用来运行定义在生命周期阶段(phase) 中插件 (plugin) 目标 (goal) 的逻辑。

Page 4: Maven – 项目管理利器

Maven Features

• 依赖管理 ( Dependcy Management )– 清晰的依赖关系管理– 最大程度的实现代码重用

• 约定优先于配置 ( Convention Over Configuration )

• 丰富插件资源 ( plugins )

Page 5: Maven – 项目管理利器

Summary Of Tools

• Builds• Documentation• Reporting• Dependencies• SCMs• Releases• Distribution• ……

Page 6: Maven – 项目管理利器

POM – Project Of Model

1. <project >2. <modelVersion>4.0.0</modelVersion>3. <groupId>com.kaiqi</groupId>4. <artifactId>wap</artifactId>5. <packaging>jar</packaging>6. <version>1.0 SNAPSHOT</version>‐7. <name>simple</name>8. <url>http://maven.apache.org</url>9. <dependencies>10. <dependency>11. <groupId>junit</groupId>12. <artifactId>junit</artifactId>13. <version>3.8.1</version>14. <scope>test</scope>15. </dependency>16. </dependencies>17. </project>

1. <project >2. <modelVersion>4.0.0</modelVersion>3. <groupId>com.kaiqi</groupId>4. <artifactId>wap</artifactId>5. <packaging>jar</packaging>6. <version>1.0 SNAPSHOT</version>‐7. <name>simple</name>8. <url>http://maven.apache.org</url>9. <dependencies>10. <dependency>11. <groupId>junit</groupId>12. <artifactId>junit</artifactId>13. <version>3.8.1</version>14. <scope>test</scope>15. </dependency>16. </dependencies>17. </project>

Page 7: Maven – 项目管理利器

Maven Plugins and Goals

mvn archetype:create -DgroupId=com.kaiqi - DarticleId=example

• 插件( Plugin ) archetype• 目标 ( Goals ) create

Page 8: Maven – 项目管理利器

Maven Lifecycle

Mvn package

mvn resources:resources \ compiler:compile \ resources:testResources \ compiler:testCompile \ surefire:test \ jar:jar

Page 9: Maven – 项目管理利器

Maven Coordinates1. <project >2. <modelVersion>4.0.0</modelVersion>3. <groupId>com.kaiqi</groupId>4. <artifactId>wap</artifactId>5. <packaging>jar</packaging>6. <version>1.0 SNAPSHOT</version>‐7. <name>simple</name>8. <url>http://maven.apache.org</url>9. <dependencies>10. <dependency>11. <groupId>junit</groupId>12. <artifactId>junit</artifactId>13. <version>3.8.1</version>14. <scope>test</scope>15. </dependency>16. </dependencies>17. </project>

1. <project >2. <modelVersion>4.0.0</modelVersion>3. <groupId>com.kaiqi</groupId>4. <artifactId>wap</artifactId>5. <packaging>jar</packaging>6. <version>1.0 SNAPSHOT</version>‐7. <name>simple</name>8. <url>http://maven.apache.org</url>9. <dependencies>10. <dependency>11. <groupId>junit</groupId>12. <artifactId>junit</artifactId>13. <version>3.8.1</version>14. <scope>test</scope>15. </dependency>16. </dependencies>17. </project>

坐标

Page 10: Maven – 项目管理利器

Maven Repositories

• 本地仓库 ( Local repository )– setting.xml 可配置路径– Maven install 可安装本地仓库

• 远程仓库 ( Remote repository)– Maven deploy– Maven release : perform

Page 11: Maven – 项目管理利器

Maven Dependency Management

• 通过坐标依赖• 依赖具有传递性

[INFO] com.kaiqi:wap-game:war:1.1-SNAPSHOT[INFO] +- com.kaiqi:wap-service:jar:1.1-SNAPSHOT:compile[INFO] | +- com.kaiqi:wap-dao:jar:1.1-SNAPSHOT:compile[INFO] | | +- org.hibernate:hibernate-validator:jar:3.1.0.GA:compile[INFO] | | | +- org.hibernate:hibernate-core:jar:3.3.0.SP1:compile[INFO] | | | | +- antlr:antlr:jar:2.7.6:compile[INFO] | | | | \- javax.transaction:jta:jar:1.1:compile[INFO] | | | \- org.hibernate:hibernate-commons-annotations:jar:3.1.0.GA:compile[INFO] | | +- org.slf4j:slf4j-log4j12:jar:1.5.8:compile[INFO] | | +- org.slf4j:slf4j-api:jar:1.5.8:compile[INFO] | | +- javax.persistence:persistence-api:jar:1.0:compile[INFO] | | \- org.apache.ibatis:ibatis-sqlmap:jar:2.3.4.726:compile

[INFO] com.kaiqi:wap-game:war:1.1-SNAPSHOT[INFO] +- com.kaiqi:wap-service:jar:1.1-SNAPSHOT:compile[INFO] | +- com.kaiqi:wap-dao:jar:1.1-SNAPSHOT:compile[INFO] | | +- org.hibernate:hibernate-validator:jar:3.1.0.GA:compile[INFO] | | | +- org.hibernate:hibernate-core:jar:3.3.0.SP1:compile[INFO] | | | | +- antlr:antlr:jar:2.7.6:compile[INFO] | | | | \- javax.transaction:jta:jar:1.1:compile[INFO] | | | \- org.hibernate:hibernate-commons-annotations:jar:3.1.0.GA:compile[INFO] | | +- org.slf4j:slf4j-log4j12:jar:1.5.8:compile[INFO] | | +- org.slf4j:slf4j-api:jar:1.5.8:compile[INFO] | | +- javax.persistence:persistence-api:jar:1.0:compile[INFO] | | \- org.apache.ibatis:ibatis-sqlmap:jar:2.3.4.726:compile

Page 12: Maven – 项目管理利器

Version Management

Tag 1.0 2.0

branch 1.0.1

Trunk

1.0.1

branch 1.0.2

1.0.2

Maven 版本规则 < 主版本 >.< 次版本 >.< 增量版本 >Maven 版本规则 < 主版本 >.< 次版本 >.< 增量版本 >

Page 13: Maven – 项目管理利器

Why using SNAPSHOT?

TMD ,用的不是我最新代码,当然不行。

靠,你的程序编译不过去啊!

Fighting

BeforeNow

每次代码更新都

mvn deploy 。

现在用的快照版本,肯定是最新代码。

Page 14: Maven – 项目管理利器

SCMs with Maven

从 1.0-SNAPSHOT 到 1.1-SNAPSHOT 1. pom.xml 里添加 svn 地址

2. Mvn release:prepare ① 将 snapshot1.0 升级为正式版 1.0 ② 正式版 1.0 提交到 svn ,打 tag1.0③ 生成 snapshot1.1 开发版本④ 开发版本 snapshot1.1 提交到 trunk 中

3. Mvn relese:perform① 从 tag1.0 中 check 出代码② 打包发布到远程仓库中

<scm> <connection>scm:svn:http://svn.kaiqi.com/svn/wap/trunk/</connection> <developerConnection>scm:svn:https://svn.kaiqi.com/svn/wap/trunk/</

developerConnection> </scm>

<scm> <connection>scm:svn:http://svn.kaiqi.com/svn/wap/trunk/</connection> <developerConnection>scm:svn:https://svn.kaiqi.com/svn/wap/trunk/</

developerConnection> </scm>

Page 15: Maven – 项目管理利器

Make a branch with Maven

mvn release:branch -DbranchName=1.1.x -DupdateBranchVersions=true -DupdateWorkingCopyVersions=false① 1.0-SNAPSHOP 升级成 1.0.1-SNAPSHOT ② 开发版本 1.0.1-SNAPSHOT 提交到 Branches 中

Page 16: Maven – 项目管理利器

KaiQi-WAP Tech Team

1. 项目模块化,减少重复劳动2. 做好版本控制,每次 release 记录版本变化3. 充分利用分支,避免旧版本有 bug 无法修复4. 全程自动化,减少人为错误操作5. 确保数据一致性,提高服务质量

Page 17: Maven – 项目管理利器

Just Do It!

1. 创建工程2. 打包3. Install4. Deploy5. Release6. Branch

Page 18: Maven – 项目管理利器

Q&A