与不同环境相关联的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创建)?还是有更好的方法来建立这样的项目?
我认为最好的方法是在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文件。
我很好奇什么情况会让你在不同的环境下需要不同的罐子。 – Buhb 2010-11-09 22:23:10
外部组构建Web服务并发布JAR文件以访问Web服务。他们为每个环境提供不同的JAR文件(Dev vs Test vs Prod)。我无法控制这个过程。 – Shane 2010-11-10 13:55:42
你有没有达到这个解决方案/结论?如果你这样做,将它与社区分享是一件好事。 – 2010-11-15 17:29:14