Upload
johnnybai
View
1.718
Download
0
Embed Size (px)
DESCRIPTION
Maven – 项目管理利器
Citation preview
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>
…What is it ?
Maven 是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model - pom.xml) ,一组标准集合,一个项目生命周期(Project Lifecycle) ,一个依赖管理系统 (Dependency Management System) ,和用来运行定义在生命周期阶段(phase) 中插件 (plugin) 目标 (goal) 的逻辑。
Maven Features
• 依赖管理 ( Dependcy Management )– 清晰的依赖关系管理– 最大程度的实现代码重用
• 约定优先于配置 ( Convention Over Configuration )
• 丰富插件资源 ( plugins )
Summary Of Tools
• Builds• Documentation• Reporting• Dependencies• SCMs• Releases• Distribution• ……
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>
Maven Plugins and Goals
mvn archetype:create -DgroupId=com.kaiqi - DarticleId=example
• 插件( Plugin ) archetype• 目标 ( Goals ) create
Maven Lifecycle
Mvn package
mvn resources:resources \ compiler:compile \ resources:testResources \ compiler:testCompile \ surefire:test \ jar:jar
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>
坐标
Maven Repositories
• 本地仓库 ( Local repository )– setting.xml 可配置路径– Maven install 可安装本地仓库
• 远程仓库 ( Remote repository)– Maven deploy– Maven release : perform
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
Version Management
Tag 1.0 2.0
branch 1.0.1
Trunk
1.0.1
branch 1.0.2
1.0.2
Maven 版本规则 < 主版本 >.< 次版本 >.< 增量版本 >Maven 版本规则 < 主版本 >.< 次版本 >.< 增量版本 >
Why using SNAPSHOT?
TMD ,用的不是我最新代码,当然不行。
靠,你的程序编译不过去啊!
Fighting
BeforeNow
每次代码更新都
mvn deploy 。
现在用的快照版本,肯定是最新代码。
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>
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 中
KaiQi-WAP Tech Team
1. 项目模块化,减少重复劳动2. 做好版本控制,每次 release 记录版本变化3. 充分利用分支,避免旧版本有 bug 无法修复4. 全程自动化,减少人为错误操作5. 确保数据一致性,提高服务质量
Just Do It!
1. 创建工程2. 打包3. Install4. Deploy5. Release6. Branch
Q&A