二进制库.pdf

上传人:32 文档编号:1014363 上传时间:2018-03-25 格式:PDF 页数:26 大小:1.43MB
返回 下载 相关 举报
摘要
申请专利号:

CN200880110702.8

申请日:

2008.08.22

公开号:

CN101821711A

公开日:

2010.09.01

当前法律状态:

授权

有效性:

有权

法律详情:

专利权的转移IPC(主分类):G06F 9/00登记生效日:20160420变更事项:专利权人变更前权利人:埃森哲环球服务有限公司变更后权利人:爱克森特公司变更事项:地址变更前权利人:爱尔兰都柏林变更后权利人:美国伊利诺伊州|||专利权的转移IPC(主分类):G06F 9/00登记生效日:20160420变更事项:专利权人变更前权利人:爱克森特公司变更后权利人:维塔瑞有限责任公司变更事项:地址变更前权利人:美国伊利诺伊州变更后权利人:美国明尼苏达州|||授权|||专利申请权的转移IPC(主分类):G06F 9/00变更事项:申请人变更前权利人:埃森哲环球服务有限公司变更后权利人:埃森哲国际责任有限公司变更事项:地址变更前权利人:瑞士沙夫豪森变更后权利人:卢森堡卢森堡登记生效日:20101208|||专利申请权的转移IPC(主分类):G06F 9/00变更事项:申请人变更前权利人:埃森哲国际责任有限公司变更后权利人:埃森哲环球服务有限公司变更事项:地址变更前权利人:卢森堡卢森堡变更后权利人:爱尔兰都柏林登记生效日:20101208|||实质审查的生效IPC(主分类):G06F 9/00申请日:20080822|||公开

IPC分类号:

G06F9/00

主分类号:

G06F9/00

申请人:

埃森哲环球服务有限公司

发明人:

C·坎贝尔

地址:

瑞士沙夫豪森

优先权:

2007.08.23 US 11/844,143

专利代理机构:

北京市金杜律师事务所 11256

代理人:

酆迅;李峥宇

PDF下载: PDF下载
内容摘要

除其他之外,本说明书的主题可以实现为一种过程,该过程包括:在针对软件程序的计算机编程过程期间,接收对具有供该软件程序使用的已定义功能的软件模块的详细说明。该软件模块存储在具有该软件模块的不同版本的中央存储库中。该过程还包括编译该软件程序。编译启动步骤,包括:过滤不满足该详细说明的该软件模块的版本。该详细说明对应于该软件模块的不止一个版本。该步骤还包括:从未被滤除的版本中选择软件模块的版本。该选择基于一个或多个预定规则。该过程还包括:返回该软件模块的选定版本,以用于与该软件程序本地存储。

权利要求书

1: 一种对计算机可执行代码进行编程和编译的过程,所述过程包括: 在针对软件程序的计算机编程过程期间,接收对具有供所述软件程序使用的已定义功能的软件模块的详细说明,其中所述软件模块存储在具有所述软件模块的不同版本的中央存储库中; 编译所述软件程序,启动编译所述软件程序的步骤,包括: 过滤不满足所述详细说明的所述软件模块的版本,其中所述详细说明对应于所述软件模块的不止一个版本; 从未被滤除的版本中选择所述软件模块的版本,其中所述选择基于一个或多个预定规则;以及 返回所述软件模块的选定版本,以用于与所述软件程序本地存储。
2: 如权利要求1所述的方法,其中所述软件模块包括可执行指令。
3: 如权利要求1所述的方法,其中所述软件模块包括数据。
4: 如权利要求1所述的方法,其中一个或多个版本中的每一个在功能上彼此不同。
5: 如权利要求1所述的方法,其中所述软件模块的所述详细说明包括:指定所述软件模块的主要修订的标识符,指定所述软件模块的次要修订的标识符,指定针对所述软件模块的错误修正修订的标识符,指定所述软件模块的构建的标识符,或其组合。
6: 如权利要求5所述的方法,其中过滤不满足所述详细说明的所述软件模块的版本包括:将一个或多个所述标识符与指定不同版本的索引中的条目进行比较。
7: 如权利要求6所述的方法,其中所述过滤进一步包括:对所请求软件模块的、与一个或多个所述标识符所表达的标准不对应的一个或多个版本不予考虑。
8: 如权利要求1所述的方法,其中基于一个或多个预定规则的所述选择包括:从所述未被滤除的版本中选择最近的版本。
9: 如权利要求1所述的方法,其中基于一个或多个预定规则的所述选择包括:从所述未被滤除的版本中选择最近的且稳定的版本。
10: 如权利要求1所述的方法,其中所述中央存储库远程存储在服务器上。
11: 如权利要求10所述的方法,其中由所述编译启动的所述步骤进一步包括:由存储所述软件程序的客户端从所述服务器请求所述软件模块。
12: 如权利要求1所述的方法,其中接收对所述软件模块的所述详细说明以及返回所述软件模块的选定版本由所述编程过程中使用的软件开发应用的软件插件来执行。
13: 如权利要求12所述的方法,进一步包括:提供配置用于禁用所述插件的功能的用户接口。
14: 如权利要求1所述的方法,进一步包括:将所述中央存储库与具有所述软件模块的版本的第二中央存储库进行同步。
15: 如权利要求14所述的方法,其中所述中央存储库充当所述第二中央存储库的本地代理存储库。
16: 如权利要求1所述的方法,其中所述中央存储库包括多个存储库。
17: 如权利要求1所述的方法,进一步包括:在从所述中央存储库请求所述软件模块之前,针对所述软件模块检查本地高速缓存。
18: 如权利要求1所述的方法,进一步包括:在将所述软件模块的新版本存储在所述中央存储库之前,验证所述新版本。
19: 如权利要求18所述的方法,其中验证所述新版本包括:将一个或多个方法或变量签名与所述中央存储库中先前存储的对应方法或变量签名进行比较。
20: 如权利要求19所述的方法,其中验证所述新版本包括:在与所述中央存储库中先前存储的版本的所述对应方法或变量签名比较时,如果所述新版本的所述一个或多个方法或变量签名超过了阈值变化,则阻止将所述新版本存储在所述中央存储库中。
21: 如权利要求1所述的方法,进一步包括:选择与所述软件模块的所述选定版本相关联的对应调试文件,以及随同所述选定版本返回所述调试文件。
22: 一种在编译过程期间返回共享工件以供软件程序使用的计算机实现的方法,所述方法包括: 接收针对供软件程序使用的共享工件的请求,所述请求包括部分地指定所请求共享工件的一个或多个参数; 访问中央存储库,其存储可供使用的所述所请求共享工件的不同版本; 选择所述共享工件的版本,所述选择包括: 排除不满足由所述一个或多个参数提供的部分详细说明的所述共享工件的版本, 基于一个或多个预定规则,从所述共享工件的未被排除的版本中选择所述共享工件的版本;以及 输出所述共享工件的选定版本,以用于与所述软件程序本地存储。
23: 如权利要求22所述的方法,其中输出所述共享工件的所述选定版本在与所述软件程序的编译同时的时段期间发生。
24: 如权利要求22所述的方法,其中当所述共享工件的版本存储在所述中央存储库中时,所述共享工件的所述版本可用于选择。
25: 一种用于选择和返回供程序使用的软件模块的装置,包括: 用于接收针对供软件程序使用的共享工件的请求的装置,所述请求包括部分地指定所请求共享工件的一个或多个参数; 用于访问中央存储库的装置,其存储可供使用的所述所请求共享工件的不同版本; 用于选择所述共享工件的版本的装置,包括: 用于排除不满足由所述一个或多个参数提供的部分详细说明的所述共享工件的版本的装置, 用于基于一个或多个预定规则、从所述共享工件的未被排除的版本中选择所述共享工件的版本的装置;以及 用于输出所述共享工件的选定版本、以用于与所述软件程序本地存储的装置。

说明书


二进制库

     相关申请交叉引用

    本申请要求2007年8月23日提交的美国申请序列号11/844,143的优先权,在此通过引用并入该申请的内容。

    【技术领域】

    本说明书涉及编程和编译软件项目。

    背景技术

    软件应用可以依赖于外部可执行代码以用于其正确的运行。例如,某些应用使用动态链接库(DLL)来执行公共的功能。在对应用进行编程期间,用户在应用的源代码中包括对外部资源的特定引用。在对应用进行编译之后,应用在需要时使用这些引用来访问外部资源。

    【发明内容】

    总体上,本文描述用于对软件项目进行编程和编译从而自动获取软件项目的依赖性引用的方法和系统。

    在第一总体方面中,描述了对计算机可执行代码进行编程和编译的过程。该过程包括:在针对软件程序的计算机编程过程期间,接收对具有供软件程序使用的已定义功能的软件模块的详细说明。所述软件模块存储在具有软件模块的不同版本的中央存储库中。该过程还包括编译软件程序。编译启动步骤,包括:过滤不满足所述详细说明的软件模块版本。该步骤还包括:从未被滤除的版本中选择软件模块的版本。该选择基于一个或多个预定规则。该过程还包括:返回软件模块的选定版本,以用于与软件程序本地存储。

    在第二总体方面中,描述了一种在编译过程期间返回共享工件(artifact)以供软件程序使用的计算机实现的过程。该过程包括:接收针对供软件程序使用的共享工件的请求。该请求包括部分地指定所请求的共享工件的一个或多个参数。该过程还包括:访问中央存储库,其存储可供使用的所请求共享工件的不同版本;以及选择共享工件的版本。该选择包括:排除不满足由所述一个或多个参数提供的部分详细说明的共享工件版本,以及基于一个或多个预定规则从未被排除的共享工件版本中选择共享工件的版本。该过程还包括:输出共享工件的选定版本,以用于与软件程序本地存储。

    在此描述的系统和技术提供以下一个或多个优点。首先,该系统和方法允许在编译期间向软件项目并入所引用资源的最近版本。第二,可以使用掩码(mask)来确保与某些版本的兼容性,同时允许选择其他修订的最近版本。第三,可以使用中央存储库来允许在多个软件开发者之间方便地共享资源。第四,可以使用对标准开发环境的插件来管理引用资源的动态取回(fetching)。

    在附图和下文描述中记载了所描述特征的一个或多个实施方式的细节。根据该描述和附图并且根据权利要求,其他特征和优点将是易见的。

    【附图说明】

    图1是示出用于对计算机可执行代码进行编程和编译的示例系统的框图。

    图2是示出用于编译软件应用的示例过程的流程图。

    图3A‑图3C是示出用于请求软件模块的语法的示例的示意图。

    图4是示出用来标识软件模块的示例索引的示意图。

    图5是用于查询软件模块的本地和远程高速缓存的示例过程的流程图。

    图6是示出用于从本地存储位置请求软件模块的示例过程的流程图。

    图7是示出用于从存储库获取软件模块的示例过程的流程图。

    图8是示出用于向存储库发布软件模块的示例过程的流程图。

    图9是示出用于在存储库中存储软件模块的示例过程的流程图。

    图10是示出具有不止一个存储库的示例系统的示意图。

    各附图中的类似标号表示类似的元素。

    【具体实施方式】

    本文描述了用于使用中央存储库来编译软件应用的系统和技术。在示例软件开发系统中,计算机系统可以使用诸如可执行代码(例如,代码库)、图像和/或数据等各种软件模块来构建或测试软件项目。在一个实现中,计算机系统可以从中央存储库获取软件模块。例如,响应于查询,中央存储库可以返回所需的软件模块。在某些示例中,中央存储库可以向计算机系统返回所请求软件模块的最近版本。

    图1是示出用于对计算机可执行代码进行编程和编译的示例软件开发系统100的框图。软件开发系统100包括计算机系统102和远程服务器104。远程服务器104包括中央存储库106。在某些示例中,计算机系统102可以从中央存储库106获取各种软件模块,以开发软件项目。在某些实现中,中央存储库106可以向计算机系统102返回所需软件模块的最近版本。

    如图1所示,计算机系统102包括本地存储108和软件开发应用110。例如,本地存储108可以是磁性存储设备(例如,硬盘驱动)、半导体存储设备(例如,闪存)、光盘存储设备(例如,DVD‑RW)或其组合。在某些实现中,本地存储108中存储的数据可以组织在文件系统中。例如,可以在本地存储108中创建目录和子目录,并且数据可以存储在目录和/或子目录中。

    软件开发应用110可以用来创建软件项目。例如,用户可以使用软件开发应用110来设计、编码、调试、编译和/或构建软件项目。在某些实现中,软件开发应用110包括构建平台(例如,华盛顿州雷德蒙的微软公司的MSBuild),用以编译和构建使用软件开发应用110开发的软件项目。

    在一个实现中,软件开发应用110可以基于用户指定的代码来构建软件项目。例如,用户指定的代码(例如,可扩展标记语言(XML)语法、shell脚本或者其他项目构建实用语法)可以包括针对软件项目的编译指令。代码还可以引用在构建中将要包括的软件模块(例如,源代码文件、软件库、汇编和/或其他数据或媒体)。

    在某些实施方式中,软件开发应用110包括依赖性管理器插件112。例如,依赖性管理器插件112可以安装在软件开发应用110中,以获取由正在开发的软件应用的源代码所引用的软件模块。例如,依赖性管理器插件112可以处理源代码以标识所引用的软件模块,并且可以确定将要从远程服务器104取回哪些所引用的软件模块。例如,如果所引用的软件模块没有在本地存储,或者本地的版本比中央存储库106中存储的版本旧,则依赖性管理器插件112可以访问远程服务器104,并且将所引用的软件模块获取到计算机系统102。

    依赖性管理器插件112包括解析器114、掩码构造器116、接口118和文件管理器120。在某些实现中,解析器114可以在编译时解析源代码,以确定在软件项目中使用的所引用软件模块。例如,如果源代码为XML形式,则解析器114可以解析XML代码,以标识与指定正在编译的应用所使用的依赖软件模块的引用相关联的XML标签。例如,XML标签可以包括与所引用的软件模块相关联的名称、版本信息和/或其他元数据。

    在某些实现中,掩码构造器116使用来自解析器114的经解析源代码来生成一个或多个标识符,以请求瞄准所引用的软件模块。例如,每个标识符可以包括所引用软件模块的名称,以及用来完全或部分地指定软件模块版本的掩码。在一个实现中,掩码构造器116可以生成用来获取软件模块的最新版本的掩码。例如,由掩码构造器116生成的掩码可以指定与所引用软件模块的特定主要修订相对应的版本,而不指定特定的次要修订(例如,指定与主要修订“1.x”兼容的版本,但是不指定特定的次要修订,从而两个版本“1.1”和“1.5”都是可接受的)。因为次要版本未被指定,因此可以从中央存储库106获取最近的次要版本(例如,在上文的示例中为1.5),这将在下文更为全面地阐释。将参考图3A‑图3C来描述掩码的示例性格式。

    通过使用接口118,依赖性管理器插件112可以向远程服务器104传送软件模块请求122。在一个示例中,接口118可以使用来自掩码构造器116的标识符输出来生成软件模块请求122。在所描绘的示例中,软件模块请求122包括过滤标准124。例如,过滤标准124可以包括与所需软件模块的元数据相关的一组过滤要求。

    远程服务器104包括中央存储库索引126和过滤模块128。在某些实施方式中,远程服务器104可以使用中央存储库索引126和过滤模块128,基于接收到的软件模块请求122来过滤和选择所引用的软件模块。

    如图1所示,中央存储库106可以包括软件模块130和调试文件132。例如,中央存储库106可以包括软件模块的多个版本。在所描绘的示例中,中央存储库106存储软件模块X的四个版本134a、134b、134c、134d。在某些实现中,版本134a‑134d可以由计算机系统102或者由其他计算机系统(未示出)向中央存储库106发布。在某些实施方式中,调试文件132由软件开发应用110用来调试与软件相关联的错误。调试文件可以用作源代码的代理,用于调试与仅包括二进制代码(例如,没有源代码)的软件模块关联而出现的错误。

    在某些实现中,中央存储库索引126可以包括存储信息的查找文件或者编目,所述信息诸如包括软件模块标识符的目录路径、版本信息、时间戳(例如,软件模块何时被公告到中央存储库)、状态指示符(例如,稳定、拒绝或未决)或者与软件模块130相关的其他元数据。将参考图4来描述中央存储库索引126的一个示例。

    在某些实现中,远程服务器104可以使用中央存储库索引126和过滤标准124,来过滤中央存储库106中存储的软件模块130的版本。在一个示例中,远程服务器104可以将过滤标准124中包括的软件模块名称与中央存储库索引126中的软件模块名称进行比较,以选择软件模块130的版本。例如,远程服务器104可以接收针对命名为“GameEngine(游戏引擎)”的软件模块的请求。远程服务器104可以访问中央存储库索引126,以选择例如具有名称“Game Engine”的软件模块的所有版本。

    如上所述,与请求122中的名称相匹配的选定软件模块可以具有多个版本。远程服务器104可以使用过滤标准,以便不进一步考虑若干版本。例如,过滤标准122可以指定主要修订但是不指定次要修订、补丁和构建信息。远程服务器104可以对与所指定的主要修订不匹配的所有版本不予考虑。

    图1示出了远程服务器104基于过滤标准124选择返回单个版本的过程的示例。在此示例中,过滤标准124指定“软件模块X”作为所请求软件模块的名称,并且指定“1.0.x.x”作为所请求版本的掩码。在此实现中,掩码具有以下格式:Major.minor.Patch.Build(MmPB),其中“Major”表示主要修订,“minor”表示次要修订,“Patch”表示修补错误或缺陷的修订,而“Build”表示软件模块的特定编译。

    如图1所示,中央存储库106中存储有软件模块X的四个版本,即版本“0.9.1.2”134a、版本“1.0.1.1”134b、版本“1.0.2.4”134c和版本“1.5.1.3”134d。通过将掩码与软件模块版本号134a‑134d进行匹配,过滤模块128可以滤除具有版本号“0.9.1.2”134a和“1.5.1.3”134d的软件模块,因为版本“0.9.1.2”134a和“1.5.1.3”134d的“主要.次要”版本与所指定的“主要.次要”版本“1.0.”不匹配。

    在某些实现中,远程服务器104按照一个或多个预定规则从其余的版本134b‑134c中选择要返回的版本。例如,远程服务器104可以选择版本“1.0.2.4”134c,因为版本“1.0.2.4”134c比版本“1.0.1.1”134b要新,这由较高的补丁值“2”(与版本“1.0.1.1.1”134b中的补丁值“1”相比)指示。

    在另一示例中,远程服务器104可以接收过滤标准132,其包括所引用软件模块的名称,而没有指定任何特定的版本。例如,过滤标准124可以仅指定所需软件命名为“软件模块X”。在这样的示例中,远程服务器104可以选择返回版本“1.5.1.3”134d,因为版本“1.5.1.3”134d在版本134a‑134d中是最近的,这由主要修订值“1”和次要版本值“5”指示。

    在另一示例中,软件模块请求122可以指定要选择的软件模块X的精确版本。例如,过滤标准124可以指定:软件模块的名称为“软件模块X”,并且掩码是版本号“0.9.1.2”。在这样的示例中,过滤模块128可以将版本134b‑134d全部滤除,因为只有版本134a与过滤标准124精确匹配。远程服务器104继而选择版本“0.9.1.2”134a来向计算机系统102返回,因为版本“0.9.1.2”134a是其余的唯一版本。

    在图1描绘的示例中,远程服务器104向依赖性管理器插件112返回选定的软件模块140。例如,远程服务器104可以访问中央存储库106以获取所引用软件模块的选定版本。而且,远程服务器104可以标识和获取针对选定软件模块的一个或多个关联调试文件。通过网络(例如,因特网),远程服务器104可以向依赖性管理器插件112返回选定的软件模块140以及关联的调试文件142。在某些实现中,可以使用一个软件模块请求122来请求多个文件或者软件模块。而且,在某些实现中,远程服务器104可以向依赖性管理器插件112返回不止一个软件模块。

    在某些实现中,在接收到软件模块140和关联的调试文件142之后,依赖性管理器插件112可以使用文件管理器120将软件模块140和关联的调试文件142存储在本地存储108中。例如,文件管理器120可以在本地存储108中创建目录,以便将接收到的软件模块140和关联的调试文件142存储于其中。在某些实现中,文件管理器120可以在软件开发应用110用来存储与当前正在开发的软件项目或应用相关联的可执行代码和其他代码的输出目录中标识和存储软件。

    在某些示例中,软件开发应用110可以将输出目录中存储的软件模块用于软件项目的构建。按照某些实现,软件模块可以与使用接收到的软件模块的软件项目的编译基本上同时接收。

    图2和图5‑图9分别是用于对计算机可执行代码进行编程和编译的示例过程200、500、600、700、800和900的流程图。过程200、500、600、700、800和900例如可以由诸如软件开发系统100的系统来执行,并且为了说明的清楚,下文描述使用软件开发系统100作为描述所述过程的示例的基础。然而,可以使用其他系统或者系统的组合来执行过程200、500、600、700、800和900。

    如图2所示,过程200可以用来编译软件应用。例如,可以使用软件开发应用110来开发软件应用。过程200开始于在本地机上启动对软件应用的编译(202)。例如,软件开发应用110可以使用计算机系统102来启动对应用代码的编译,以生成软件应用。

    过程200包括获取由应用代码引用的软件模块(204)。例如,依赖性管理器插件112可以解析应用代码,以获得应用代码所引用的软件模块的标识符。在一个实现中,软件开发应用110可以按照XML格式来存储应用代码,并且依赖性管理器插件112可以解析XML标签,以获得所引用软件模块的标识符。

    接下来,过程200包括在中央存储库中搜索所引用的软件模块(206)。例如,过滤模块128可以使用与所引用软件模块相关联的过滤标准124,来访问和搜索中央存储库索引126。

    过程200包括确定是否找到所引用的软件模块(208)。在一个示例中,过滤组件128可以确定:基于所引用软件模块的名称是否找到了所引用的软件模块。例如,如果中央存储库索引126没有包括具有所引用软件模块的名称的任何条目,则过滤模块128可以确定所引用的软件模块未在中央存储库106中。

    如果没有找到所引用的软件模块,则过程200包括抛出异常(210),并且过程200结束。例如,远程服务器104可以向计算机系统102传送错误消息,指示没有找到所引用的软件模块。

    如果找到了所引用的软件模块,则过程200前进以确定存储在本地机的软件模块是否比存储在中央存储库的软件模块更新(212)。例如,依赖性管理器插件112可以确定本地存储108中的软件模块是否与存储在中央存储库106的软件模块更近的版本相关联。

    过程200包括:如果本地机中的软件模块比来自中央存储库的软件模块更新,则选择本地机中的软件模块(214)。例如,如果依赖性管理器插件112确定:本地存储108中的软件模块比存储在中央存储库106中的软件模块更近,则依赖性管理器插件112可以选择本地存储中的软件模块以用于软件应用的编译。

    过程200还包括:如果本地机中的软件模块不比来自中央存储库的软件模块更新,则基于过滤标准来选择中央存储库中的软件模块(216)。例如,远程服务器104可以使用在针对软件模块的请求中指定的标识符来标识所请求的软件名称。一旦已经选定了特定的软件模块,则远程服务器104对位于中央存储库106中的所标识软件模块的各个版本进行比较,并选择例如最近版本。

    过程200可以包括向本地机上的项目输出目录复制选定的软件模块(218)。例如,在从中央存储库106接收到软件模块之后,文件管理器120可以向项目输出目录复制选定的软件模块。在另一示例中,如果选定了本地存储108中的软件模块,则依赖性管理器插件112可以向项目输出目录复制本地存储108中的软件模块。

    在复制选定的软件模块之后,过程200包括完成软件应用的编译(220)。例如,如果项目输出目录中包括了所有引用的软件模块,则软件开发应用110可以完成软件应用的编译。

    接下来,过程200可选地包括向中央存储库发布软件应用(222),并且过程200结束。例如,依赖性管理器插件212可以向中央存储库106发布新编译的软件应用。在某些示例中,连接至远程服务器104的其他开发者可以使用新编译的软件应用来开发软件。将参考图8来描述用于向中央存储库106公布软件模块的某些示例过程。

    通过发布软件模块以及从中央存储库106获取软件模块,软件开发系统100可以允许软件开发者针对软件项目的独立软件模块独立地进行工作。使用中央存储库还允许对特定软件模块的最新版本的全局共享。版本可以向中央存储库上传,并由依赖性插件自动获取。使用掩码支持获取所引用软件模块的最新版本,即使正在编译的源代码中没有引用软件模块的具体版本。例如,引用软件模块的源代码可能仅需要与软件模块的主要修订“2”的兼容性。使用掩码允许由远程服务器返回与版本“2”兼容的最近更新版本(例如,针对主要修订“2”的所有次要、补丁和构建更新)。使用中央存储库允许自动获取与主要修订“2”相兼容的新版本,并将其集成到正在编译的应用中,只要该新版本被上传到了中央存储库。

    在某些示例中,协作软件开发者的团队可以使用中央存储库来共享软件模块,这些软件模块是功能性的,但是没有准备好在软件产品中发布。例如,软件开发者可以使用系统100来编译仍在活跃开发下的软件项目,并且可以向中央存储库106发布该项目,使得开发者可以访问它以用于测试或者其他目的。

    图3A‑图3C是示出针对软件模块的请求300、330、360的示例语法的示意图。如图3A中所示,请求300的语法包括名称和掩码。例如,名称可以是所引用软件模块的名称。在某些实现中,掩码可以按照上文讨论的MmPB格式来指定,其例如表示所引用软件模块的主要版本(M)、次要版本(m)、错误修正版本(P)以及特定构建(B)。在一个示例中,请求300的语法可以部分地或者完全地指定完整的版本号。过滤模块128例如可以使用所指定的名称和掩码来过滤软件模块。例如,掩码构造器116可以生成请求“请求(套接字库,3.x.x.x)”以请求与版本“3”兼容的“套接字库”模块的最新版本。

    在某些实现中,掩码可以是应用于完整版本号的一组标识符,以确定应当对什么进行掩码。如图3B所示,请求300的语法包括名称、版本和掩码。例如,掩码可以是指示应当将完整版本号的什么部分遮掩的一组标识符。作为示范性示例,所引用的软件模块可以是Foo.dll,其中应用的源代码中对Foo.dll的引用是针对版本1.0.0.2。在一个示例中,请求330的语法可以指定“请求(名称=“Foo”,版本=1.0.0.2,Mm)”。在此示例中,标识符“Mm”表示除了主要和次要版本号之外,没有指定版本号。在某些实现中,远程服务器104可以返回与指定的“主要.次要”版本相匹配的最新发布的软件模块。例如,远程服务器104可以返回具有版本1.0.2.79的“Foo.dll”(例如,1.0.2.79可以是针对该软件模块发布的最新版本)。

    如图3C所示,请求360的语法包括用于指定其他过滤标准的字段。语法360指定所引用软件模块的名称、掩码、稳定性指示符、时间戳、大小、文化(culture)、公钥以及其他元数据。语法中包括的每个参也可以保持为部分或完全未指定。例如,时间戳可以指示返回特定日期的版本,但是可以不指定特定的小时。

    图4是示出用来标识软件模块的示例索引400的示意图。在某些实现中,可以按照与索引400的格式类似的方式为中央存储库索引126设置格式。在所描绘的示例中,索引400包括列,其包括软件模块名称402、位置404、主要修订406、次要修订408、补丁410、构建412、稳定性指示符414、时间戳416、大小418、文化420、公钥422和其他元数据424。

    如图所示,索引400包括各软件模块的条目430a‑430d、440a‑440c、450a‑450b。例如,条目430a‑430d标识存储在中央存储库106中的可执行代码。例如,条目440a‑440c标识测试数据集,而条目450a‑450b标识存储在中央存储库106中的图像。

    在所描绘的示例中,软件模块名称列402指定与每个条目相关的软件模块的名称。位置列404指定可以从中央存储库106的什么位置获取该条目的软件模块。主要修订、次要修订、补丁和构建列406、408、410、412的每个指定在每个软件模块的版本号中使用的值。稳定性指示符414指示存储在中央存储库106中的可执行代码的状态。

    例如,可执行代码可以是未决的、稳定的或者已被拒绝的。具有“未决”状态的可执行代码可以指示:相关联的代码仍正在评估之中(例如,其正在被测试,以确保其没有错误)。具有“稳定”状态的可执行代码可以指示:相关联的代码已经通过了测试过程,并且准备好发布。具有“拒绝”状态的可执行代码可以指示:相关联的可执行代码没有通过测试的一个或多个方面,但是可能具有某些工作的功能。

    大小列418指示每个条目所表示的软件模块的大小。文化列420指示软件模块是否是特别针对特定的文化而开发的。例如,软件模块可以具有被显示的文本。与美国(由列420中的US表示)和德国(由列420中的DE表示)相关联的“文化”值标识软件模块适用的特定文化。在某些示例中,软件模块也可以在文化上是中性的(例如,软件模块不具有用户界面方面),这由列420中的“*”表示。

    公钥422列可以包括或者指示用于每个软件模块的公钥。例如,公钥可以用作软件模块的签名,指示其自从被上传至中央存储库之后保持未被改变。在获取软件模块以便与所编译的软件项目进行集成之前,软件开发应用110可以使用该签名来验证该软件模块保持未被改变。

    其他元数据列424可以包括关于每个索引条目所表示的软件模块的其他元数据。在所描绘的示例中,条目430c包括注释(“失败的测试E”),其指明软件模块版本被拒绝的原因。其他元数据列424中还可以包括其他元数据。

    在某些实现中,过滤模块128可以按照过滤标准122来在过滤软件模块中使用索引400。例如,过滤模块128可以基于请求300、330和/或360中包括的过滤标准来过滤软件模块的版本。例如,过滤模块128可以接收请求“请求(套接字库,3.x.x.x)”。在这样的示例中,过滤模块128可以使用索引400来使用由接收到的请求所指定的名称和掩码来过滤软件模块。在所描绘的示例中,如条目430a‑430d所示,中央存储库106中存储有命名为“套接字库”的软件模块的四个版本。在条目430a‑430d中,过滤模块128可以使用掩码“3.x.x.x”来选择条目430c‑430d,因为条目430c‑430d与主要版本“3”相兼容,而与条目430a‑430b相关联的版本则不兼容。

    在基于掩码进行过滤之后,远程服务器104可以选择其余版本之一,以便向依赖性管理器插件返回。在某些实现中,远程服务器104基于一个或多个预定规则来选择要返回的版本。在一个示例中,远程服务器104可以包括在过滤之后从其余版本中选择最近版本的规则。使用上述示例,远程服务器可以选择向客户端设备返回版本3.4.1.5(与条目430c相关联),因为其是最新版本。在另一示例中,远程服务器104可以包括在过滤之后从其余版本中选择稳定版本的规则。例如,远程服务器104可以比较其余条目的稳定性指示符414,并且选择具有“未决”稳定性指示符的条目。使用上面的示例,远程服务器104可以选择版本3.3.6.2(条目430d),因为条目430d具有“未决”稳定性指示符。

    在某些实现中,可以使用更为复杂的规则来选择软件模块。例如,远程服务器104可以选择还具有稳定性指示符(例如,“稳定”优于“未决”,“未决”优于“拒绝”)的最近版本。

    例如,远程服务器104可以接收请求“请求(套接字库,2.1.1.0,Mm)”。在某些实现中,基于接收到的请求,远程服务器可以首先使用掩码来过滤条目430a‑d,以滤除不具有“主要.次要”版本“2.1.”的版本。其次,远程服务器可以基于预定规则来选择其余版本之一。在某些示例中,规则可以规定:远程服务器104首先从其余版本中选择“稳定”版本。如果存在不止一个稳定版本,则远程服务器104选择被列为稳定的软件模块的最近版本。例如,在此例中,远程服务器104可以选择版本2.1.0.1430b。

    在某些实现中,计算机系统102可以使用请求360来指定掩码和其他过滤标准。作为一个示范性示例,计算机系统102可以向远程服务器104传送请求“请求(套接字库,3.x.x.x,被拒绝,x,x,US,A2E,“失败测试E”)”。基于该请求中指定的信息,远程服务器104可以过滤和选择条目430c。

    请求300、330、360还可以用来从中央存储库106查询其他文件类型,诸如数据文件或者媒体文件。在一个示例中,计算机系统102可以通过向远程服务器104传送“请求(光标等待图像,2.x.x.x)”来请求光标等待图像。在此示例中,远程服务器104可以向计算机系统102返回由条目450b代表的图像所表示的软件模块,因为与条目450b相关联的图像较新(例如,其具有主要版本“2”,而与条目450a相关联的图像具有版本“1”)。

    在另一示例中,计算机系统102可以通过向远程服务器104传送“请求(套接字测试数据,3.x.x.x,NA,*,DE,QDE)”来请求测试数据文件(例如,以ASCII格式包含对可执行软件模块的测试输入和预期输出的文件)。作为响应,远程服务器104可以向计算机系统102返回由条目440b所代表的软件模块,这是因为与条目440b相关联的测试数据较为准确地匹配该请求(例如,该请求具有文化值“DE”,而与条目440a相关联的测试数据具有文化值“US”)。

    图5是示出用于在本地高速缓存和远程存储库中查询软件模块的示例过程500的流程图。例如,过程500可以由依赖性管理器插件112来执行。过程500开始于确定执行过程500的系统是否连接至远程服务器(502)。例如,依赖性管理器插件112可以确定计算机系统102是否连接至远程服务器104。

    如果执行系统未连接至远程服务器,则过程500包括确定所请求的软件模块是否存在于本地高速缓存中(504)。例如,依赖性管理器插件112可以访问本地存储108,以确定所请求的软件模块是否存在于本地存储108中。

    如果软件模块没有存在于本地高速缓存中,则过程500包括抛出异常(506),然后过程500结束。例如,依赖性管理器插件112可以指示软件模块不可用,并且软件开发应用110可以抛出指示错误的异常。

    如果软件模块存在于本地高速缓存中,则过程500返回来自本地高速缓存的软件模块(508),并且过程500结束。例如,依赖性管理器插件112可以返回软件模块在本地存储108中的存储位置。

    在步骤502,如果系统连接至远程服务器,则过程500包括确定软件模块是否存在于服务器中(510)。例如,依赖性管理器插件112可以查询远程服务器104,以确定软件模块是否存储在于中央存储库106中。

    如果软件模块没有存储在中央存储库106中,则如上所述执行步骤504处的操作。反之,如果软件模块存储在中央存储库106中,则过程500还要继续确定软件模块是否存在于本地高速缓存中(512)。例如,依赖性管理器插件112可以访问本地存储108,以确定所请求的软件模块是否存在于本地存储108中。

    如果软件模块没有存在于本地高速缓存中,则过程500包括从远程服务器获取软件模块(514)。例如,依赖性管理器插件112可以传送针对来自中央存储库106的软件模块的请求。

    接下来,过程500包括将接收到的软件模块存储在本地高速缓存中(516),并且如上所述执行步骤508处的操作。例如,依赖性管理器插件112可以将接收到的软件模块存储在本地存储108中,并且返回本地存储108中的软件模块的位置。

    在步骤512,如果软件模块存在于本地高速缓存中,则过程500包括确定服务器处的软件模块是否比本地高速缓存中存储的软件模块新(518)。例如,依赖性管理器插件112可以比较中央存储库106和本地存储108中的软件模块的版本号或者时间戳。

    如果服务器处的软件模块较新,则如上所述执行步骤514处的操作。如果服务器处的软件模块并非较新,则如上所述执行步骤508处的操作。

    图6是示出用于从本地存储位置请求软件模块的示例过程600的流程图。例如,软件开发应用110可以使用过程600从本地存储108请求一个或多个软件模块。

    过程600开始于请求软件模块(602)。例如,在软件项目的编译期间,软件开发应用110可以通过使用依赖性管理器插件112来请求软件模块。

    接下来,过程600确定软件模块是否存在于本地高速缓存中(604)。例如,依赖性管理器插件112可以执行过程500(参见图5),以便在查询远程服务器104之前或者之后确定软件模块是否存在于高速缓存中。

    如果软件模块没有存在于高速缓存中,则过程600可以抛出异常(606),并且过程600结束。例如,软件开发应用110可以抛出异常,以指示软件模块未在本地存储108中。

    如果软件模块存在于高速缓存中,在步骤608,从高速缓存向输出目录复制所请求的软件模块,并且过程600结束。例如,软件开发应用110可以从本地存储108中的当前位置向软件项目的输出目录(例如,软件项目的bin目录)复制软件模块。

    图7是示出用于从存储库获取软件模块的示例过程700的流程图。例如,用来管理器插件112可以使用过程700从中央存储库106获取软件模块。使用过程700,依赖性管理器插件112可以基于软件模块请求(例如,软件模块请求122)来获取所应用的软件模块。

    过程700开始于请求软件模块(702)。例如,依赖性管理器插件112可以通过向远程服务器104传送请求(例如,使用语法格式300、330或者360之一的请求)来请求软件模块。在一个实现中,请求可以包括所请求软件模块的名称、版本和掩码。

    接下来,过程700包括访问软件模块的索引(704)。例如,依赖性管理器插件112可以访问中央存储库索引126。

    在访问索引之后,过程700包括确定软件模块是否存在于索引中(706)。例如,依赖性管理器插件112可以在中央存储库索引126中搜索具有与软件模块名称相匹配的名称的索引条目。

    如果软件模块未存在于索引中,则过程700包括抛出异常(708),并且过程700结束。例如,依赖性管理器插件112可以抛出异常以指示在中央存储库106中没有找到软件模块。

    如果软件模块存在于索引中,则过程700执行步骤710,其包括基于掩码所指定的版本信息滤除条目。例如,过滤模块128可以使用语法格式300、330、360之一所指定的掩码,来过滤套接字库的条目430a‑d所代表的版本。

    接下来,过程700包括在过滤之后选择具有最新和/或稳定版本的一个或多个软件模块(712)。例如,依赖性管理器插件112可以在过滤之后按照一个或多个预定规则来选择(或者指示远程服务器104来选择)其余的版本。在一个示例中,依赖性管理器插件112可以在过滤之后的其余版本中选择最新的版本。在另一示例中,依赖性管理器插件112可以在过滤之后的其余版本中选择一个或多个稳定版本。

    在选择软件模块之后,过程700包括返回最新的软件模块(714),并且过程700结束。例如,依赖性管理器插件112可以向软件开发应用110返回最新软件模块的本地存储位置(例如,按照一个或多个选定软件模块的版本号或者时间戳)。

    图8是示出用于向存储库发布软件模块的示例过程800的流程图。例如,计算机系统102可以执行过程800,以便向中央存储库106发布软件模块的新版本。

    过程800开始于生成软件模块(802)。例如,计算机系统102可以使用软件开发应用110来生成软件模块。

    过程800可选地包括生成相应的调试信息(804)。例如,调试信息可以是用于验证软件模块功能的文件。在一个示例中,用户可以使用软件开发应用110来生成调试信息(例如,调试文件132)。

    接下来,过程800包括向本地高速缓存复制生成的软件模块(806)。例如,软件开发应用110可以向本地存储108复制生成的软件模块。

    过程800包括向中央存储库公告生成的软件模块(808)。例如,计算机系统102可以向中央存储库106公告生成的软件模块。在某些实现中,远程服务器104可以在将生成的软件模块接收到中央存储库106中之后,更新中央存储库索引126。

    在某些实现中,远程服务器104可以在中央存储库106中公布之前验证接收到的软件模块。例如,远程服务器104可以将生成的软件模块中的一个或多个方法或变量签名与中央存储库106中先前存储的版本的对应方法或变量签名进行比较,以确定是否应当允许用户上传软件模块。

    例如,远程服务器104可以确定方法所需的参数的数目,并且将其用作针对该方法的方法签名。远程服务器104可以在向中央存储库上传的软件模块与中央存储中存储的先前版本之间比较方法签名。类似地,在另一示例中,远程服务器104可以确定变量的数据类型和数目,并且使用该信息作为软件模块的变量签名。远程服务器还可以使用变量签名来验证软件模块是否与先前的版本相兼容(以及,由此是否应当将新的软件模块存储在中央存储库中)。

    在某些实现中,远程服务器104配置用于根据比较来确定生成的软件模块是否是向后兼容的。例如,如果生成的软件模块满足一个或多个测试条件,则远程服务器104可以确定生成的软件模块是向后兼容的。一个测试条件可以是:生成的软件模块必须包括先前存储的版本中所包括的所有方法。另一测试条件可以要求:新的软件模块可以具有与先前上传版本不同的方法签名,但是该方法必须仅包含附加的、可选的参数,使得该方法与先前版本向后兼容。

    在某些实现中,远程服务器104可以确定所确定的软件模块与中央存储库中的软件模块的先前存储的版本的变化。例如,可以根据对生成的软件模块与软件模块的先前版本之间的方法或变量签名的比较,来生成变化。在某些示例中,如果变化超过了阈值变化,则远程服务器104可以阻止将生成的软件模块存储在中央存储库中。例如,如果方法参数的数目在生成的软件模块中减少,则远程服务器104可以阻止将生成的软件模块存储在中央存储库106中。在另一示例中,如果生成的软件模块向方法添加了一个或多个所需的参数,则远程服务器104可以阻止将生成的软件模块存储在中央存储库106中。

    在公告生成的软件模块之后,在步骤810中,确定是否存在调试信息。例如,软件开发应用110可以检查软件项目的编译是否生成了调试文件。

    如果调试信息不存在,则过程800结束。如果调试信息存在,则过程800执行步骤812,包括向本地高速缓存复制调试信息(812)。例如,软件开发应用110可以向本地存储108复制调试信息。

    接下来,过程800包括向中央存储库公告调试信息(814)。例如,软件开发应用110可以向中央存储库106公告调试信息。

    图9是示出用于将软件模块存储在存储库中的示例过程900的流程图。例如,远程服务器104可以使用过程900来将软件模块130存储在中央存储库106中。

    过程900开始于接收公告软件模块的请求(902)。例如,远程服务器104可以从计算机系统102接收公告软件模块的请求。

    接下来,过程900包括确定是否提供了软件模块的版本(904)。例如,远程服务器104可以在软件模块公布请求中检查是否指示了软件模块的指定版本号(或者索引中包括的其他元数据)。

    接下来,过程900包括创建目录(908)。例如,远程服务器104可以在中央存储库106中创建具有软件模块名称的目录(如果不存在这样的目录的话)。

    接下来,过程900包括创建子目录(910)。例如,远程服务器104可以创建具有与版本信息相关的名称的目录,作为具有软件模块名称的目录之下的子目录。

    在创建子目录之后,过程900执行步骤912,在此向所创建的子目录写入软件模块。

    接下来,过程900执行步骤914,在此更新索引,并且过程900结束。例如,远程服务器104可以更新中央存储库索引126,以包括软件模块的后续信息(例如,存储位置、版本号、稳定性指示符等)。

    在步骤904,如果不提供软件模块的版本,过程900包括创建临时目录(916)。例如,远程服务器104可以在中央存储库106中创建临时目录。

    接下来,过程900包括确定软件模块是否包括可执行代码(918)。例如,远程服务器104可以检查软件模块的文件扩展名,以确定软件模块是否包括一个或多个可执行文件。

    如果软件模块是可执行文件,则过程900包括“反射”从可执行文件请求版本信息(以及可能的其他元数据)。例如,文件可能包括方法(例如,Java语言中的“reflect”方法),当调用该方法时其返回版本信息。在反射和返回版本信息之后,执行步骤908处的操作。

    如果在步骤918中确定软件模块不是可执行的,则过程900可以抛出异常(922)并且过程900结束。例如,远程服务器104可以向计算机系统102处的用户显示异常,以指示需要版本号来公告软件模块。

    在某些实现中,远程服务器104可以包括其他反射过程,以获得不是可执行文件的软件模块的版本信息。在一个示例中,远程服务器104可以搜索非可执行文件的前“n”行(例如,前5行),以获得版本信息,例如其以诸如“<version>”的预定标识符开始。

    图10是示出具有不止一个存储库的示例系统1000的示意图。在所描绘的方法中,系统1000包括两个存储库1002、1004。存储库1004是中央存储库1002的本地代理存储库。在某些实施方式中,存储库1002、1004可以存储用于构建软件应用的软件模块。

    在所描绘的示例中,中央存储库1002位于北美,而代理存储库1004位于南美。系统1000包括北美的客户端计算机系统1010、1011、1012。计算机系统1010‑1012被配置为访问中央存储库1002。系统1000还包括南美的客户端计算机系统1020、1021、1022,其被配置为访问代理存储库1004。

    存储库1002、1004可以同步其内容。在某些实现中,存储库1002、1004被配置为周期性地彼此同步(例如,每24个小时)。通过同步存储库1002、1004的内容,两个存储库1002、1004都存储相同的软件模块,而不论软件模块是源自例如北美或南美的客户端计算机系统。在某些实现中,系统1000可以改善客户端计算机系统1010‑1012以及1020‑1022访问其相应存储库的速度。例如,客户端计算机系统1010‑1012以及1020‑1022可以通过从其本地的存储库获取软件模块来编译软件项目,而不是等待远程存储库返回所请求的软件模块。

    在某些实现中,计算机系统1010‑1012以及1020‑1022可以指定要访问的存储库。例如,计算机系统1010‑1012以及1020‑1022可以根据每个存储库的延迟时间来动态地选择存储库1002、1004中的一个。

    尽管上文详细描述了几个实现,但是可以进行其他修改。例如,中央存储库106可以包括不止一个存储库。在某些实现中,远程服务器104可以是计算机系统的网络。在某些示例中,中央存储库106可以包括针对网络中每个计算机系统的存储器空间。

    在某些实现中,远程服务器104可以包括web服务前端和数据库后端。web服务前端可以提供对中央存储库索引126的统一访问方法。数据库后端可以提供用于软件模块130的存储和管理的数据库结构。通过使用web服务前端和数据库后端,远程服务器104例如可以更为有效地为大规模软件开发应用(例如,具有同时访问远程服务器的多个开发者的软件开发系统)服务。

    在某些实现中,过滤模块128可以在计算机系统102中而不是远程服务器104中实现。例如,依赖性管理器插件可以包括用于访问中央存储库索引126的过滤模块128。通过远程地访问中央存储库索引126,过滤模块128可以在计算机系统102处本地过滤软件模块的版本。在过滤之后,依赖性管理器插件可以在其余的软件模块版本中选择要从中央存储库106获取的软件模块。例如,依赖性管理器插件可以远程地选择软件模块版本。通过指定中央存储库索引126中指定的远程位置(例如,互联网协议(IP)地址),依赖性管理器插件可以远程地获取选定的软件模块。

    在某些实现中,可以实现独立软件应用而非插件,用以执行在此描述的依赖性管理器插件112的功能。例如,依赖性管理器软件应用可以与软件开发应用110协作,通过从中央存储库106获取所需的软件模块来构建软件项目。

    在某些实现中,软件开发应用可以包括用户接口(例如,图形用户界面(GUI)),以配置依赖性管理器插件112的一个或多个功能。在某些实现中,用户可以使用用户接口来启用或者禁用依赖性管理器插件112的一个或多个功能。例如,用户可以使用用户接口来禁止依赖性管理器插件112访问远程服务器104,从而强制软件项目的编译使用软件模块的本地复制。在另一示例中,用户可以使用用户接口来禁止依赖性管理器插件112公告生成的软件模块。

    在某些实现中,用户接口可以用来替换依赖性管理器插件112的一个或多个功能。在一个示例中,用户可以使用用户接口来定义或者选择远程服务器104所使用的软件模块选择规则。在另一示例中,用户接口可以配置用于允许用户选择在每次构建之后是否自动或手动地向中央存储库106公告软件模块。

    而且,附图中描绘的逻辑流并不需要所示的特定顺序或者串行顺序来达到期望的结果。而且,可以提供其他步骤或者从所描述的流程中去除步骤,并且可以向所描述的系统添加部件或者从其移除部件。因此,其他实现也处于所附权利要求书的范围之内。

    

二进制库.pdf_第1页
第1页 / 共26页
二进制库.pdf_第2页
第2页 / 共26页
二进制库.pdf_第3页
第3页 / 共26页
点击查看更多>>
资源描述

《二进制库.pdf》由会员分享,可在线阅读,更多相关《二进制库.pdf(26页珍藏版)》请在专利查询网上搜索。

除其他之外,本说明书的主题可以实现为一种过程,该过程包括:在针对软件程序的计算机编程过程期间,接收对具有供该软件程序使用的已定义功能的软件模块的详细说明。该软件模块存储在具有该软件模块的不同版本的中央存储库中。该过程还包括编译该软件程序。编译启动步骤,包括:过滤不满足该详细说明的该软件模块的版本。该详细说明对应于该软件模块的不止一个版本。该步骤还包括:从未被滤除的版本中选择软件模块的版本。该选择基。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1