与不同环境相关联的JAR的最佳实践

时间:2010-11-09 22:20:36

标签: java eclipse

我们有一个项目利用其他组提供的Web服务。他们为Web服务提供3组JAR,每个环境设置一套(Dev vs Test vs Prod)。

在Eclipse中构建具有不同JAR的Dev / Test / Prod项目的最佳方法是什么?这就是我的想法:

  • WEB-INF / lib< - 所有常见的JAR都在这里
  • WEB-INF / lib_dev< - 仅针对特定于Dev的JAR
  • WEB-INF / lib_test< - 仅针对特定于测试的JAR
  • WEB-INF / lib_prod< - 仅针对Prod特定的JAR。

我可以使用Ant脚本为特定环境选择公共库以及lib。如果我采用这种方案,是否有一种简单的方法可以告诉Eclipse默认查看lib和lib_dev(用于编译和Eclipse WAR创建)?或者有更好的方法来设置这样的项目吗?

4 个答案:

答案 0 :(得分:1)

我认为最好的方法是在Eclipse(M2Eclipse)中使用Maven项目,以及使用Maven存储库(例如Nexus)来维护您的jar文件。

你在pom中定义:

  • 常见依赖
  • 三个配置文件(dev,test,prod),每个配置文件都有相应的依赖项。

对于您的构建,您只需致电:

mvn -P dev/test/prod clean package

它将使用正确的WEB-INF / lib(常见依赖项+特定于配置文件的依赖项)创建战争。

答案 1 :(得分:1)

您不应该为不同的环境构建不同的JAR。

相反,区分环境(例如数据库连接凭证等)所需的配置应该外部化。 JNDI非常适用于此,但可以使用系统属性或外部属性文件等。

然而,如果你真的,真的必须为你的开发人员提供不同的二进制文件,那么你的测试人员(嗯,他们对你的开发人员看到的东西有多大的信心?)以及最后的生产(不同于什么?测试者看到了,然后@Benoit Courtine提出了一个很好的方法。

答案 2 :(得分:0)

这实际上取决于您正在使用的构建系统的“正确”答案。更改构建系统没有任何意义,除非它被破坏。如果您正在使用基于Eclipse PDE构建的东西,以下是处理这种情况的好方法。

为4个罐子中的每个罐子创建一个项目。该项目将只包含lib路径上的jar并导出它包含的包。依赖于常见jar的3个jar也可以添加包导入。然后,您将使用.product导出功能为每个配置生成3个.product文件来构建软件。

答案 3 :(得分:0)

必须同意@Gary Rowe,我将补充说,多个罐子似乎有点傻到访问我认为是在三个不同环境中的相同Web服务。唯一不同的是WSDL。

这可以通过一些简单的操作来轻松完成,运行时VM参数指示要使用哪一个,然后将所有三个包含在同一个jar中。我们做了类似的事情,我们定义了-Druntime.env(tst,dev,int,prod或local),然后允许在运行时加载适当的配置。

作为一方 - 在我们的例子中,我们只使用WSDL并使用maven生成Java代码,作为Apache CXF构建过程的一部分。根本不需要实际的jar文件。