java - 管理软件版本

标签 java version

我计划根据现有代码库使用 Java 创建 3 个版本的软件。最好的做法是什么?我应该为每个版本创建 3 个不同的项目吗?还有管理版本的工具吗?

最佳答案

我的第一个想法是尽可能保留单个代码库,并使用某种标志进行切换。

如果不可能,我会尝试尽可能保持相同,并让较大的项目使用较小的项目作为子项目,如果可能的话自动启用某些功能 - 例如,每个项目都可以有自己的主线,不同的版本可能只是调用不同的主线,设置标志来启用功能。

如果您的标志是最终的,它甚至应该避免将不必要的代码拉入您的项目中。

最后,最坏的情况,Subversion 中有 3 个分支。

编辑:

你让我对此有了更多的思考,我想我找到了更好的解决方案。

我想我会把它分成四个项目,将所有“常见”的东西组合到一个基础项目中,而不同的东西,我会分散到其他三个项目中——所以假设你有基础项目、演示、付费和商业项目..

如果这三者可能有所不同,您将拥有来自演示/支付/业务类之一的对象来提供该功能。例如,如果付费版本有新的菜单项,您的对象之一中可能有一个 getMenuItems。它将返回一个菜单树,您可以将其放置在菜单栏中。演示版本的项目会更少。

通过这种方式,你的“Base”永远不知道它正在运行哪个版本,它只使用对象。

为了获得这些元素,我需要一个工厂。工厂看起来像这样:

private String[] availablePackages={"business", "pay", "demo"};

public getMenuClass() {
    Class c;
    for(String package : availablePackages) {
        try {
            c=Class.forName("com.meh.myapp."+package+".MenuClass");
        } catch... {
            // No package by that name
        }
        if(c != null) {
            return c.newInstance();
        }
    }
    // Something went wrong, no instance found.

上升趋势是您应该首先尝试实例化 com.meh.myapp.business.MenuClass,然后尝试 ...pay.MenuClass 最后 ...demo.MenuClass。

这应该允许您通过简单地发送不同的 jar 来更改配置 - 如果您决定仅发送演示和主 jar,您将获得一个演示应用程序。通过运送支付 jar ,您将获得支付应用程序。

请注意,您很可能希望业务将大部分工作委托(delegate)给“付费”,而“付费”则将大量工作委托(delegate)给“演示”,但演示对业务或付费一无所知,而“main”只知道其他三个。

这将是一个很好的解决方案,因为不需要配置 - 事实上,您只需要发送付费 jar 即可从演示升级到付费,主 jar 和演示 jar 被重复使用并保持在原来的位置.

关于java - 管理软件版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2496188/

相关文章:

java - 输入5个数字,然后显示您输入的所有正数和负数

java - 分析 Java Spring 应用程序

ios - 在 iOS swift 中更新应用程序时通过 CFBundleShortVersionString 获取以前的版本而不是最新版本

java - 从代码中检查 Java 版本/类型

android - 我可以只安装最新的 Android API 以针对较低的 API 版本吗?

python - 版本无关的 python 库应该去哪里?

java - Hibernate OneToMany 关系是 PersistentBag 而不是 List

java - 如何使用为服务器定义的相同接口(interface)编写 Restful 客户端

java - Android/Java - 在执行下一个函数之前等待 AsyncTask 结束

java - 在 Ubuntu Linux 中将 Java 1.6 默认设置为 1.7