我们正在重构我们的应用程序以允许多个数据库支持,主要是MySQL(当前)和MongoDB(在开发中)。对于MySQL,我们必须在tomcat jdbc池代码中进行着色,对于Mongo,我们在java驱动程序中进行着色。我需要生成两个版本 - 一个用于MySQL,一个用于Mongo。
我正在尝试使用maven找到一种方法 - 只有shacat tomcat-jdbc或mongo以及该数据库系统所需的一些内部代码。但是,我没有看到多个构建的方式,并且看到了几个SO答案,建议不要使用它。
我还考虑过将数据库代码完全分离到不同的项目中 - 所以我们可以提供产品,第二个jar包含mysql或mongo代码。这对最终用户来说有点麻烦,但对我们来说更清洁。
建议?
答案 0 :(得分:0)
maven(或任何其他依赖管理系统)中有一条非常重要的规则:
不同的结果应始终具有不同的坐标,
或反过来说:
无论配置文件或目标系统如何,从相同的源代码状态构建都应始终产生相同的工件。
因此,如果要生成两个不同的结果,则需要它们具有不同的坐标。你有两个选择:
a)一个项目创建不同的分类器(这是丑陋但可行的)
b)或者创建两个子模块myproject-mysql
和myproject-mongodb
(这反过来会影响你的主代码和相应的db-code)(不同的artifactIds)
创建一个完整的jar没有任何反对阴影,在你的情况下只需创建两个独立的jar,它们本身是完全可行的。