与不同环境相关联的JAR的最佳做法

与不同环境相关联的JAR的最佳做法

问题描述:

我们有一个项目使用另一个组提供的Web服务。他们为Web服务提供3套JAR,每套环境提供一套(Dev vs Test vs Prod)。与不同环境相关联的JAR的最佳做法

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

  • WEB-INF/lib目录< - 所有常见的JAR何去何从
  • WEB-INF/lib_dev < - 只为特定的开发-JAR文件
  • WEB-INF/lib_test < - 仅适用于特定于测试的JAR
  • WEB-INF/lib_prod < - 仅适用于特定于Prod的JAR。

我可以使用一个Ant脚本来为特定环境选择常用lib以及lib。如果我采用这种方案,是否有一种简单的方法可以告诉Eclipse在缺省情况下查看lib和lib_dev(用于编译和Eclipse WAR创建)?还是有更好的方法来建立这样的项目?

+0

我很好奇什么情况会让你在不同的环境下需要不同的罐子。 – Buhb 2010-11-09 22:23:10

+0

外部组构建Web服务并发布JAR文件以访问Web服务。他们为每个环境提供不同的JAR文件(Dev vs Test vs Prod)。我无法控制这个过程。 – Shane 2010-11-10 13:55:42

+0

你有没有达到这个解决方案/结论?如果你这样做,将它与社区分享是一件好事。 – 2010-11-15 17:29:14

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

可以定义在POM:

  • 公共依赖
  • 三个轮廓(DEV,测试,PROD),与相应的依赖关系的每个配置文件。

对于你的构建,你只需要调用:

mvn -P dev/test/prod clean package 

它将创建你一个正确的WEB-INF/lib下的战争(公共依赖+轮廓特定的依赖)。

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

相反,区分不同环境(例如数据库连接凭证等)所需的配置应该外部化。 JNDI对此非常理想,但可以使用系统属性或外部属性文件等。但是,如果你确实真的必须为你的开发人员,测试人员(嗯,你有多自信,他们看着你的开发人员是同样的东西?),最后是生产(不同的是再次不同测试者看到了什么),然后@Benoit Courtine提出了一个好方法。

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

为4个罐子中的每一个创建一个项目。该项目将简单地在lib路径上包含jar并导出它包含的软件包。依靠普通罐子的3个罐子也可以添加包装进口。然后,您可以使用.product文件为使用.product导出功能的每个配置构建软件。

必须同意@Gary Rowe,并且我会补充说,多个jar似乎有点愚蠢,因为访问我认为是三个不同环境中的相同web服务。唯一不同的是WSDL。

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

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