假设您有一个具有中央主git存储库的场景,开发人员和CI引擎可以从中进行克隆.即非常接近传统的非分布式版本控制系统设置,具有中央集线器和许多节点.
现在说服务器被闪电或任何其他可能导致中央存储库与其所有集中备份一起消失的东西被盗或被攻击.您剩下的就是各种克隆,幸运的是其中一个已完全更新,因此您创建了一个空白的git存储库替换服务器,用作未来的中央存储库并开始处理克隆.
完全更新的克隆使用"git branch -a"知道所有"远程/源"分支,但只有一个本地分支.(这让我担心 - 失去分支机构信息).
重新建立一个新的中央git存储库的步骤是什么,表现在任何方式,如旧的,分支机构和所有?
我的一位同事对PerForce的可能性感到兴奋(我们基本上需要在后勤上对补丁和更改进行分组,并且本机上的SCM支持非常好).我们目前使用CVS,并对所有可能性开放.我们只有少数使用纯Eclipse并使用ant脚本运行构建的开发人员.
在跳入水中之前,我想听听其他技术原因可以说"好主意"或"坏主意"的人.我也想知道这在你的日常工作中是多么的干扰.
编辑2011:仅供记录.我们迁移到git - 决定性的因素是我们使用Eclipse和eclipse.org用于git,因此我们最终可以期待非常好的IDE集成.我们有点早了 - 直到今年夏天的Eclipse 3.7.今天git在Eclipse中非常好用.
编辑2015:事实证明,git最终成为无可争议的赢家,这得益于github和一般的IDE支持,结合Maven最终使Java项目与IDE无关.
编辑 2018-02-08:示例项目演示如何在https://github.com/ravn/dagger2-named-string-inject-example执行此操作- 注意:整个源代码在一个文件中!
我正在研究dagger是否能为我们取代guice(因为我们的部署Java平台很慢).
我在运行时构建了配置字符串的映射,我希望根据需要使用dagger.
如果我有
java.util.Map<String, String> map = new java.util.TreeMap<String, String>();
map.put("key", "value");
Run Code Online (Sandbox Code Playgroud)
和
@Inject
Thermosiphon(Heater heater, @Named("key") String value) {
this.heater = heater;
System.out.println("value =" + value);
}
Run Code Online (Sandbox Code Playgroud)
我希望注入价值"价值".
源代码中的示例没有任何@Named用法.只是尝试给出以下异常:
Exception in thread "main" java.lang.IllegalStateException: Errors creating object graph:
No binding for @javax.inject.Named(value=key)/java.lang.String required by class bar.Thermosiphon
at dagger.internal.ThrowingErrorHandler.handleErrors(ThrowingErrorHandler.java:34)
at dagger.internal.Linker.linkRequested(Linker.java:146)
at dagger.ObjectGraph$DaggerObjectGraph.getInjectableTypeBinding(ObjectGraph.java:288)
at dagger.ObjectGraph$DaggerObjectGraph.get(ObjectGraph.java:249)
at app.CoffeeApp.main(CoffeeApp.java:20)
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
我们将Eclipse与CVS中的项目一起使用.事实证明,在处理另一个分支或应用程序时创建新工作区是最简单的,然后使用Team - > Import project set从CVS获取所有需要的项目.
不幸的是,我每次都必须做以下事情:
再加上一些相同的东西.
在解压缩发行版之后,我想在Eclipse发行版文件中一劳永逸地更改标准值(Windows).这些默认值位于Eclipse中的哪个位置?
编辑:现在我们只有一个必须读入的首选项文件.一个额外的步骤,但有效...
编辑2014:我最终创建了一个具有我想要的设置的工作区,然后每当我需要一个新的时候创建一个新的副本.还处理Maven Central信息等.接受最基本的答案.
(编者注:这是 objectweb,而不是 JVM 抱怨。在下意识地关闭重复之前要非常确定)
当我尝试运行测试时,我正在恢复一个处于损坏状态的项目,但出现此错误:
Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.22.0:test failed: Unsupported class file major version 56
Run Code Online (Sandbox Code Playgroud)
这意味着什么?任何想法如何解决它?
Maven 项目包括:
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</plugin>
</plugins>
</pluginManagement>
Run Code Online (Sandbox Code Playgroud)
但是注释掉那个插件没有区别。
完整的回溯如下所示:
> mvn test -e
[INFO] Error stacktraces are turned on.
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------< com.example:projectxserver >--------------------
[INFO] Building projectxserver 1.0.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[WARNING] The artifact org.hibernate:hibernate-validator:jar:6.0.17.Final has been relocated to org.hibernate.validator:hibernate-validator:jar:6.0.17.Final
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ projectxserver ---
[INFO] Using 'UTF-8' encoding to …
Run Code Online (Sandbox Code Playgroud) 我的方法是创建十万个本地集合并用随机字符串填充它们,如下所示:
SecureRandom random = new SecureRandom();
for(int i = 0 ; i < 100000 ; i++){
HashMap<String, String> map = new HashMap<String, String>();
for(int j = 0 ; j < 30 ; j++){
map.put(new BigInteger(130, random).toString(32), new BigInteger(130, random).toString(32));
}
}
Run Code Online (Sandbox Code Playgroud)
我也提供了-XX:+ UseGCOverheadLimit jvm参数,但无法获取错误.是否有任何简单可靠的方法/黑客来获取此错误?
我们有一种情况,我们以Map的形式为我们正在运行的程序提供外部配置.我发现JSR-330依赖注入提供了一种更清晰的方式来在代码中使用该配置映射,而不是传递映射或使用JNDI来获取它.
@Inject @Named("server.username") String username;
Run Code Online (Sandbox Code Playgroud)
让JSR-330实现自动填写此字段.
使用Guice,我可以设置值
bindConstant().annotatedWith(Names.named(key)).to(value);
Run Code Online (Sandbox Code Playgroud)
我希望能够在Weld中做同样的事情(将"server.username"绑定到例如"foobar")并且我理解该机制最有可能是beans.xml,但我更喜欢简单的"将此地图提供给Weld" ,请"代码替代.这样做有什么好办法?
编辑2013-10-16:在调查Dagger,它在编译时工作而不是运行时,我发现我们通常每个程序有10-20个,我们可以使用@Provider
每个配置字符串的方法,然后在配置中查找地图.这允许方法特定的行为(包括默认值),提供javadoc的能力,以及将所有这些方法放在同一个类中的能力.它也可以与Weld开箱即用.我正在考虑在博客文章中写一个更全面的解释.
我们决定使用Jira和Confluence,现在正在研究其他可能让我们的生活更轻松的Atlassian工具.
据我所知,FishEye允许源代码存储库的各种可视化,而CVS的本机工具则不然.然而,我们已经迁移到git,它有一个非常有用的工具生态系统.
问题是:FishEye可以告诉我们一些我们无法从本机工具中获得的有用信息吗?(或以具有竞争力的价格购买商业工具)?
(请在回答之前至少阅读:这是一个临时措施!不,我们不想设置本地存储库管理器并手动运行脚本)
我们有一个带有一些依赖项的遗留项目,我们有一个本地副本,包括source和javadoc,并且已被证明在生产中运行良好,但在Central中没有相同的质量.我们想要使用我们已经拥有的那些罐子.
我发现我可以手动运行一个适当复杂的mvn install:install-file
命令来获取本地机器的存储库中注入的工件,但我希望它可以作为我们各种模块的正常maven构建的一部分.
鉴于我有一个包含多个jar的空白模块,每个都需要插入,install:install-file
我应该如何在我的pom.xml中执行此操作以完全符合正常的Maven构建?
或者我可以只是附加多个jar作为模块的输出,并以某种方式附加javadoc和源)?
(并且,请不要提交关于提交到中央或设置本地存储库管理器的建议.这是一个临时解决方案,直到我们有机会升级到更新版本的依赖项)