作为开发人员,我经常对可以让您的生活更轻松的新语言功能感兴趣.例如,java 5为该语言带来了泛型和注释,这些功能绝对可以提高您的工作效率.
然而,当我回顾近十年来在java平台上工作时,我发现与版本相关的问题是非生产性和不必要的努力的最大罪魁祸首.寻找正确版本的jar的小时和小时,试图协调一些版本冲突,升级依赖库等.当我开始使用java时,事情并不那么困难,你有几个第三方库,就是这样.今天,您可以轻松使用典型的Web应用程序:Spring Framework,Hibernate,Struts,您可以使用它.所有这些都带有许多依赖的第三方库.今天,我的耳档将通常包括大约40个或更多第三方库.一个真正的罐子地狱!
使用注释,我不必管理Hibernate的配置文件.一个很好的功能,但我没有看到由于我将描述符保存在单独的文件中而引起的许多问题.使用泛型,我不会编写演员语句,但在我的整个编程载体中,我记不起一个可以通过使用类型安全容器来防止的错误.版本问题的解决方案不是更有价值吗?
所有这些问题导致了许多工具,如Maven,Ivy,One Jar,Jar Jar Links(不是开玩笑!),甚至恰当地命名为Jar Hell等.即使你使用其中一些工具,你也远远不能免疫问题.我使用Maven 2,这是一个很好的帮助.不过,它本身就是一个世界.新手程序员可能需要一段时间来学习它.将您的遗留项目迁移到Maven结构也很痛苦.
似乎在.Net中他们已经学会了dll地狱的教训,并且.Net程序集的管理要简单得多.
似乎有计划为java平台和OSGI等替代方案解决这个问题.我认为非常需要一些基本的和平台强制的版本控制机制
是否有一些预处理器关键字用于在编译时访问我的.rc文件中定义的FILEVERSION?
我真的不想添加额外的代码来从编译产品本身读取文件信息.
我将实体A存储在我的数据存储区中的appengine上.A的ID为Long.我想保留A字段所做的所有更改的历史记录.在实体上进行此类版本的最佳做法是什么?我更喜欢一种适用于A的子类并且尽可能自动化的解决方案.
谢谢!
我需要阅读AssemblyFileVersiondll而不仅仅是Version.我试过了:
<Target Name="RetrieveIdentities">
<GetAssemblyIdentity AssemblyFiles="some.dll">
<Output
TaskParameter="Assemblies"
ItemName="MyAssemblyIdentities"/>
</GetAssemblyIdentity>
<Message Text="%(MyAssemblyIdentities.FileVersion)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
该脚本运行但不输出任何内容.如果我改变FileVersion到Version它正确输出AssemblyVersion.我如何AssemblyFileVersion使用我的脚本?
我正在使用XMLSerializer将此类保存到文件中.该类有一个字符串和一个枚举,如下所示:
public class IOPoint
{
string Name {get; set;}
TypeEnum {get; set;}
}
public enum TypeEnum
{
Temperature,
Pressure,
Humidity,
}
Run Code Online (Sandbox Code Playgroud)
序列化时,它看起来像这样.
<IOPoint>
<Name>Relative Humidity</Name>
<TypeEnum>Humidity</TypeEnum>
</IOPoint>
Run Code Online (Sandbox Code Playgroud)
我一直在序列化和反序列化这个对象,几个版本都没有问题.我不再想支持湿度,所以我将它从枚举中删除了.但是,这会在从XML反序列化时导致异常,因为TypeEnum字段中的值Humidity不是TypeEnum的有效值.这是有道理的,但如何处理呢?
我想做的就是忽略这个错误.并将值保留为null.我已经尝试实现OnUnknownElement XmlDeserilizationEvent类.不幸的是,这并没有发现这个错误.
关于如何捕获和忽略此错误的任何想法(我可以在反序列化完成后清理).
米奇
我想创建一个Node.js应用程序,它定期检查更新并安装它们(如果有的话).
基本组件对我来说很清楚:
然后,可能有不同的策略来检查更新和安装更新:
应用程序甚至可以很难关闭并自动重启.
但是还有一些问题:
data文件夹吗?npm install&co.对于新下载的包?一般来说:你会如何尝试实现这样的系统?
我认为无论NoSQL聚合存储是键值,列族还是文档数据库,它都支持值的版本控制.经过一段谷歌搜索,我得出的结论是这个假设是错误的,它只取决于DBMS的实现.这是真的?
我知道Cassandra和BigTable支持它(两个列家族商店).它看起来是Hbase(列族)和Riak(键值),但Redis和Hadoop(键值)却没有.Mongo DB(文档)确实做了 Couchbase,但是MongoDB没有(文档存储).我在这里看不到任何模式.有经验法则吗?(例如,"键值存储通常没有版本控制,而列族和文档数据库执行")
我正在尝试做什么:我想创建一个从URL到PNG图像的网站截图数据库.我宁愿使用键值存储,因为除了版本控制之外,它是满足问题的最简单的解决方案.但是当网站发生变化或被淘汰时我更新了我的数据库,我不想丢失旧图像.即使我选择了具有版本控制的键值数据库,我也希望能够切换到不同的键值数据库,而不受许多键值DB不支持版本控制的限制.因此,我试图了解聚合NoSQL数据库连续体中的复杂程度,版本控制成为数据模型隐含的功能.
我们正在改变我们的中间件(MW)软件的版本控制和依赖系统,我们在这里考虑这样的事情:
a.b.c.d
a - 主要版本
b - 向后兼容性中断
c - 新功能
d - 错误修复
但由于软件的大小和网络速度慢,我们必须将发送给客户端的软件包数量保持在最低限度.
因此,我们的想法是仅在向后兼容性更改时重置错误修复号.使用此逻辑,我们可以创建一个自动系统,如果客户端已经安装的版本有任何错误更改,并且它符合新的FrontEnd(FE)要求,则只生成新包.
为了更好地显示这一切,这里有几个例子:
递增逻辑

需要包决策逻辑

虽然这是一个非标准的版本控制逻辑,你们看到这个逻辑有什么问题吗?
我可能在这里遗漏了一些东西,但是什么是属性版本控制的好方法?
例如,在具有属性值更改的蓝绿色部署方案中(旧应用程序版本消耗旧值,新版本需要新值),如何确保应用程序的两个版本可以成功共存(考虑可能的重新启动和回滚)?
一种选择是为需要应用新值的属性创建新的属性名称.当然,这不是一个好的选择,因为我们需要在代码库中跟踪该属性的所有用法并相应地更新其引用.从概念的角度来看,它也不是很好.
另一种选择是为每个版本分配一个分支.虽然这对于这种情况可以很好地工作,但我设想一个分支/标记地狱,因为我们扩展到配置仓库到多个应用程序,它们各自的分支演变成不同的方向.
分支机构的解决方案是为每个应用程序分配一个配置存储库.但是,我认为这在某种意义上会破坏配置服务器的目的,因为它增加了开销.
还有其他方法吗?
当我这样做时use Foo:ver<1.0>;,将加载模块的1.0版本Foo。但是,当我这样做时会发生什么use Foo;呢?
versioning ×10
java ×2
auto-update ×1
c# ×1
c++ ×1
database ×1
datastore ×1
dependencies ×1
jar ×1
module ×1
msbuild ×1
node.js ×1
nosql ×1
package ×1
perl6 ×1
product ×1
spring-boot ×1
spring-cloud ×1
version ×1
visual-c++ ×1
xml ×1