标签: versioning

如何在Grails中管理对象修订?

我需要在我的grails web app中为文章实现修订系统.在搜索grails论坛,stackoverflow,grails插件和谷歌搜索互联网后,我最终得到了3个选项:

选项1 - 使用grails Envers插件(请参阅http://code.google.com/p/grails-envers-plugin/).有没有人成功使用它?或者没有插件的情况下使用Envers(请参阅此处),但如何使其与GORM一起使用?

选项2 - 使用Gvers插件我在这里找到:https://github.com/ziftytodd/gvers.我从来没有听过有人使用它,所以有没有人曾经成功使用它?

选项3 - 内置机制.Weceem为Weceem CMS的任何内容创建了版本控制系统.我可以从代码的逻辑和这个伟大的应用程序的设计中汲取灵感,但它似乎有点矫枉过正,我不喜欢使用非标准的解决方案.

所以我的问题是,你建议我做什么?你有没有使用过这些选项?

非常感谢您的见解.

versioning grails hibernate auditing hibernate-envers

17
推荐指数
1
解决办法
2207
查看次数

在应用程序中显示构建时间戳

我想显示应用程序在about框中构建的时间戳.这将允许我跟踪应用程序的不同版本.如何在Java中检索此信息?

java versioning build

17
推荐指数
2
解决办法
2万
查看次数

如何处理包更改的Java序列化对象?

我有一个Java类存储在HttpSession对象中,该对象在集群环境中的服务器之间进行序列化和传输.出于此解释的目的,我们将此类称为"Person".

在改进代码的过程中,这个类从"com.acme.Person"转移到"com.acme.entity.Person".在内部,类保持完全相同(相同的字段,相同的方法,相同的一切).

问题是我们有两组服务器同时运行旧代码和新代码.具有旧代码的服务器具有序列化的HttpSession对象,并且当新代码反序列化它时,它会抛出ClassNotFoundException,因为它找不到对com.acme.Person的旧引用.此时,处理这个很容易,因为我们可以使用新包重新创建对象.然后问题变成新服务器中的HttpSession将使用对com.acme.entity.Person的新引用来序列化对象,并且当在运行旧代码的服务器中对其进行反序列化时,将抛出另一个异常.此时,我们再也无法处理此异常.

对于这类案件,最好的策略是什么?有没有办法告诉新服务器通过引用旧包序列化对象并将旧包的引用反序列化为新包?所有服务器运行新代码后,我们将如何过渡到使用新包并忘记旧包?

java versioning serialization

17
推荐指数
1
解决办法
6974
查看次数

什么版本标签用于分叉的maven项目?

我经常需要分叉一个使用Maven的Java项目(通常在github上).

当我分叉项目并进行更改时,我通常希望将一个版本剪切到我自己的私有(但在互联网上)maven存储库.

因此,我的自定义版本应该是什么版本标签的问题.我不能这样做,SNAPSHOT因为我需要它才能成为一个版本.有时我用项目后缀.ADAMGENT(因为我是一个自恋者).让我说我叉1.0.4-SNAPSHOT.我可以改成它1.0.4.ADAMGENT.我不知道这是不是一个好主意.在某些情况下,我甚至不能使用.ADAMGENTSpring的Gradle构建工具不喜欢它.所以对于我做的Spring项目.ADAMGENT.RELEASE或者.ADAMGENT.M1它是一个里程碑.

其他人做什么?

更新: 虽然我说fork我更多的补丁程度更改.另一方面,赏金(由不同的用户)可能是用于分叉和/或补丁

versioning maven

17
推荐指数
2
解决办法
1671
查看次数

如何处理版本化的SOAP Web服务的代码?

背景:

  • 我们的网络服务是公司内部的,但有很多不同的系统使用它们
  • 我们将努力尽可能地弃用/删除旧版本的api

有很多关于Web服务版本化的信息,我们的决定是使用以下方法来版本化我们的Web服务:

  • 保留URL中的版本(我知道有些人反对这个,但主要是关于REST服务)
  • 保留命名空间中的版本

但是,现在我们正在决定如何实际实现这一点,而在这里我们还没有找到关于最佳实践的大量信息.我们使用(Java):

  • 用于定义Web服务(和Web服务API)的注释
  • 用XML注释注释的POJO bean,用于定义内容
  • 用于转换/转换到业务层和Web服务pojo的转换器类
  • 弹簧

因此,为了保持Web服务的旧版本,我们需要保留旧版本的代码.为此,我们基本上看了两种不同的方法:

1)对于每个新版本,请制作相关代码的完整新副本

这种方法看起来像这样:

com.company.webservice.v3. -all of the web service classes, POJO’s and converters go here
com.company.webservice.v4. -all of the web service classes, POJO’s and converters go here
Run Code Online (Sandbox Code Playgroud)

所以,这里我们有重复的代码.我们的想法简而言之:

  • 代码重复.将是几个具有相同代码的类.也许在Eclipse中令人困惑.
  • 完全隔离,易于确定具体版本的构成
  • 最大限度地降低影响以前版本服务功能的风险

2)使用spring仅制作受更改影响的每个类的副本

这种方法意味着使用Spring IoC并让所有版本的Web服务尽可能使用相同的代码.只有当我们进行影响行为/ api的更改时,我们才会创建这些类的新版本.例如:

com.company.webservice.beans.MyXMLAnnotatedPOJOv3.java
com.company.webservice.beans.MyXMLAnnotatedPOJOv4.java
com.company.webservice.translators.MyXTranslatorv1.java
com.company.webservice.translators.MyXTranslatorv2.java
Run Code Online (Sandbox Code Playgroud)
  • 可能很难清楚地看到什么构成了特定版本的Web服务.在维护代码时,误操作可能更容易影响以前版本的Web服务
  • 没有代码重复.仅将更改实现为新类

这两种方法都不是最佳方法,但我们没有找到关于此的更多信息.所以,我的问题是: 你会使用哪两种方法?或者你会采取完全不同的方法?

java versioning service version web

17
推荐指数
1
解决办法
3852
查看次数

在一个目录中使用带有多个.xcodeproject文件的agvtool

我已经尝试使用agvtool进行ios构建版本化.当目录中只有一个.xcodeproj文件时,它很有用.在我的例子中,我们的项目结构是在一个目录中有4个.xcodeproj文件.当在此目录中触发agvtool命令时,它会抛出错误消息,'agvtool不能与同一目录中的多个项目一起使用'.任何人都知道如何使用这个文件夹结构使agvtool工作?

versioning projects build agvtool ios

17
推荐指数
1
解决办法
796
查看次数

编译后更改Linux共享库(.so文件)版本

我正在编译Linux库(对于Android,使用NDK的g ++,但我敢打赌我的问题对任何Linux系统都有意义).在将这些库提供给合作伙伴时,我需要使用版本号标记它们.我还必须能够以编程方式访问版本号(例如,在"关于"对话框或GetVersion函数中显示它).

我首先使用unversioned标志(版本0.0)编译库,并且在我将测试发送给合作伙伴之前完成测试时需要将此版本更改为真实版本.我知道修改源代码并重新编译会更容易,但我们不想这样做(因为如果我们重新编译代码,我们应该再次测试所有内容,我们觉得它不会出错,请看这个注释post和最后因为我们的开发环境以这种方式工作:我们为Windows二进制文件执行此过程:我们设置0.0资源版本字符串(.rc),然后我们使用verpatch更改它...我们想要使用相同的类型运送Linux二进制文件时的进程).

这里最好的策略是什么?总而言之,要求是:

  1. 用"未设置"版本(0.0或其他任何东西)编译二进制文件
  2. 能够将此"未设置"版本修改为特定版本而无需重新编译二进制文件(理想情况下,运行第三方工具命令,就像在Windows下使用verpatch一样)
  3. 能够让库代码在运行时检索它的版本信息

如果您的答案是"重命名.so",那么请提供3的解决方案:如何在运行时检索版本名称(即:文件名).

我在考虑一些解决方案,但不知道它们是否可以工作以及如何实现它们.

  • 在代码中有一个版本变量(一个string或三个int),并有办法在以后的二进制文件中更改它?使用二进制sed ......?
  • 在资源中有一个版本变量,并有办法在以后的二进制文件中更改它?(正如我们为win32/win64所做的那样)
  • 使用专用于此的.so(如SONAME)字段,并有一个允许更改它的工具......并使其可以从C++代码访问.
  • 重命名lib +更改SONAME(没有找到如何实现)...并找到一种从C++代码中检索它的方法.
  • ...

请注意,我们使用QtCreator来编译Android .so文件,但它们可能不依赖于Qt.因此使用Qt资源并不是一个理想的解决方案.

c++ linux versioning g++ shared-libraries

17
推荐指数
1
解决办法
2417
查看次数

你如何对你的项目进行版本化?

我了解Microsoft在对其产品进行版本控制时使用此模板:Major.Minor.Build.Revision.

当"开发人员"想要表明软件发生重大变化并且无法假设向后兼容性时,Major会发生变化.也许完成了对代码的重写.

为了向后兼容,次要编号代表了显着的增强.

构建号是一个小变化,例如重新编译相同的源.

修订版用于修复安全漏洞,应完全可互换.Build和Revision都是可选的.此信息基于MSDN版本类.

你如何对你的项目进行版本设置,为什么要用这种方式对它们进

.net versioning

16
推荐指数
2
解决办法
1168
查看次数

在Git中删除远程分支

我想删除项目存储库的一些远程分支.我运行下一个命令:

git push origin :name_of_branch
Run Code Online (Sandbox Code Playgroud)

当我列出远程分支时

git branch -r
Run Code Online (Sandbox Code Playgroud)

我删除的分支没有出现,但是我的合作伙伴

git fetch
Run Code Online (Sandbox Code Playgroud)

然后

git branch -r
Run Code Online (Sandbox Code Playgroud)

在列表中,name_of_branch我删除的分支仍在列表中.但是,当他试图删除分支时

git push origin :name_of_branch
Run Code Online (Sandbox Code Playgroud)

他收到了下一条消息:

error: unable to delete 'name_of_branch': remote ref does not exist
error: failed to push some refs to 'the_name_of_the_repository'
Run Code Online (Sandbox Code Playgroud)

我怎么能完全删除列表中的分支?

versioning git version-control

16
推荐指数
2
解决办法
4413
查看次数

如果已经有未提交的更改,如何使用hg命令行应用多个补丁?

我使用以下命令来应用补丁Mercurial,而不提交它:

hg import patch.diff --no-commit
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是如果我尝试一次应用几个补丁:

hg import patch1.diff --no-commit
hg import patch2.diff --no-commit
...
Run Code Online (Sandbox Code Playgroud)

我在第二次提交后收到此错误消息:

abort: uncommitted changes
Run Code Online (Sandbox Code Playgroud)

如果我完全相同SourceTree(应用patch1然后patch2并选择"修改工作副本文件")它可以工作:两个补丁应用于工作副本,patch1和patch2的变化组合/折叠在一起.

如何使用hg命令行执行相同的操作?

versioning mercurial command-line patch

16
推荐指数
2
解决办法
2万
查看次数