通过版本排除,实现项目划分多个版本

    目前,一个游戏项目,分别在腾讯,UCWEB,斯凯等运营,不同的接入方有不同的“登录接口”、“付费充值接口”以及游戏中某些小模块也有细微的差别,整理下来下,公分为几十个平台,上百个区,这样的混乱局面,使用传统的方式,很难解决。比如,一个游戏的模块出现了bug,那么是不是需要修改所有的版本,所有的分区代码???

 

   简单的说,我们以2个类为例:

 

  User 和 Player:

 package cn.vicky.po; /** * * @author Vicky */ public class User { private Long id; private Player player; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Player getPlayer() { return player; } public void setPlayer(Player player) { this.player = player; } }

User与Player存在OneToOne的级联关系。但是Player类,由于不同平台拥有的数据有一部分不相同,导致差异,传统方式,可能需要在修改Player的基础上,将User一并修改,但使用Maven,可以在不修改User的基础上,通过依赖排除,在不同版本使用对应的Player。

 

1.首先,创建顶层父pom项目ch01。

<?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>cn.vicky</groupId> <artifactId>ch01</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <name>Ch01-Parent</name> <url>http://maven.apache.org</url> <modules> <module>model</module> <module>mainApp</module> <module>mainApp2</module> </modules> </project>

 

 

2.创建子父pom项目model。

<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>ch01</artifactId> <groupId>cn.vicky</groupId> <version>1.0-SNAPSHOT</version> </parent> <groupId>cn.vicky</groupId> <artifactId>model</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <name>Ch01-Model-Parent</name> <url>http://maven.apache.org</url> <modules> <module>po</module> <module>po1</module> <module>po2</module> </modules> </project>

 

3.创建model的3个子项目,分别为po(global)、po1(版本一)、po2(版本二)

 

3.1 po:

<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>model</artifactId> <groupId>cn.vicky</groupId> <version>1.0-SNAPSHOT</version> </parent> <groupId>cn.vicky</groupId> <artifactId>po</artifactId> <version>1.0-SNAPSHOT</version> <name>Ch01-PO-Global</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>cn.vicky</groupId> <artifactId>po1</artifactId> <version>1.0-SNAPSHOT</version> <optional>true</optional> </dependency> <dependency> <groupId>cn.vicky</groupId> <artifactId>po2</artifactId> <version>1.0-SNAPSHOT</version> <optional>true</optional> </dependency> </dependencies> </project>

 

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package cn.vicky.po; /** * * @author Vicky */ public class User { private Long id; private Player player; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Player getPlayer() { return player; } public void setPlayer(Player player) { this.player = player; } }

 

3.2 po1

 

 <?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>model</artifactId> <groupId>cn.vicky</groupId> <version>1.0-SNAPSHOT</version> </parent> <groupId>cn.vicky</groupId> <artifactId>po1</artifactId> <version>1.0-SNAPSHOT</version> <name>Ch01-PO-1</name> <url>http://maven.apache.org</url> </project>

 

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package cn.vicky.po; /** * * @author Vicky */ public class Player { private String name1; public String getName1() { return "name1 = " + name1; } public void setName1(String name1) { this.name1 = name1; } }

 

3.3 po2

 

<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>model</artifactId> <groupId>cn.vicky</groupId> <version>1.0-SNAPSHOT</version> </parent> <groupId>cn.vicky</groupId> <artifactId>po2</artifactId> <version>1.0-SNAPSHOT</version> <name>Ch01-PO-2</name> <url>http://maven.apache.org</url> </project>

 

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package cn.vicky.po; /** * * @author Vicky */ public class Player { private String name2; public String getName2() { return "name2 = " + name2; } public void setName2(String name2) { this.name2 = name2; } }

 

 

4.然后创建2个版本的项目。2个相同都使用到了以个相同的User,却对应不同的Player。

 

4.1

<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>ch01</artifactId> <groupId>cn.vicky</groupId> <version>1.0-SNAPSHOT</version> </parent> <groupId>cn.vicky</groupId> <artifactId>mainApp2</artifactId> <version>1.0-SNAPSHOT</version> <name>Ch01-MainApp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>cn.vicky</groupId> <artifactId>po</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>cn.vicky</groupId> <artifactId>po2</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration> </plugin> <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>cn.vicky.mainapp.App</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>

 

4.2

<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>ch01</artifactId> <groupId>cn.vicky</groupId> <version>1.0-SNAPSHOT</version> </parent> <groupId>cn.vicky</groupId> <artifactId>mainApp</artifactId> <version>1.0-SNAPSHOT</version> <name>Ch01-MainApp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>cn.vicky</groupId> <artifactId>po</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>cn.vicky</groupId> <artifactId>po1</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration> </plugin> <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>cn.vicky.mainapp.App</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>

 

 

4.3 其中4.1 与 4.1 公用调用代码:

package cn.vicky.mainapp; import cn.vicky.po.Player; import cn.vicky.po.User; /** * Hello world! * */ public class App { public static void main(String[] args) { Player player = new Player(); player.setName2("Vicky"); User user = new User(); user.setPlayer(player); System.out.println(user.getPlayer().getName2()); } }

 

5.分别执行2个项目打印内容:

name1 = Vicky

name2 = Vicky

 

 

 

 

 

 

 

你可能感兴趣的:(String,user,Class,plugins,dependencies,templates)