一些背景信息:我正在使用Google Code Jam的前版本,并尝试用Java解决很多这些难题。对于每个谜题,我在Eclipse中创建一个特定的项目。
我还构建了一个小的“Sample”解算器项目,其中包含对输入/输出文件的常规操作,测试用例的处理,用于快速在文件上运行程序的脚本文件,等等。现在我在每个难题上使用这个框架,只需修改包含主算法的核心“Solver”类。所有其他文件在每个项目中保持不变。
我的问题是,我正在对我的工作进行版本控制,但显然每个项目版本的唯一相关源代码是此Solver类(以及一些输入/输出文件)。所有其余部分都是重复的,我希望在修改示例项目中的内容时可以轻松更新。
另一方面,我希望能够轻松签出项目并使其完全正常运行。
我正在考虑使用SVN外部代码执行此操作,但外部定义仅适用于子目录 - 我的相关文件与重复文件位于相同的文件夹中。
此外,SVN忽略不符合我的目的,因为我仍然需要在每个项目中手动复制对我的示例项目的任何更改。
你知道处理这个问题的好方法吗?谢谢!
答案 0 :(得分:3)
代码重用通常不是使用版本控制系统完成的,而是使用多态或库。使用版本控制系统的一个缺点是你必须做一个svn更新来从存储库中提取新的外部,如果你检查了很多项目,这会让我感到尴尬。另一件需要考虑的事情是修改重用代码时的开发工作流程。要测试你的更改,你可能想要使用特定的解算器来运行它们,但为了做到这一点,你需要svn更新 - 我很确定你会忘记每一次,并且想知道为什么你的bugfix没有效果...因此,我建议采用以下两种方法之一:
<强>多态性强>
将所有求解器放在同一个项目中,使重用变得相当简单。要调用正确的解算器,您可以执行以下操作:
interface Solver {
// your methods
}
class Ex1Solver implements Solver {
// your solution
}
public static void main(String[] args) throws Exception {
Solver solver = (Solver) Class.forName(args[0]).newInstance();
// work with solver
}
<强>库强>
为重用的测试工具定义一个eclipse项目,并为每个解决方案定义一个项目。将重用项目声明为解决方案项目的依赖项(在eclipse中,右键单击项目 - > gt;构建路径 - > gt;配置构建路径 - &gt;项目 - &gt;添加)。测试工具将以与多态解决方案相同的方式创建求解器。
答案 1 :(得分:2)
你也可以使用svn:externals和文件(从1.6开始),但我会想到一个基于库的解决方案,因为它听起来像你的“框架”就是这样一种东西。