maven型材或弹簧型材?

很多java应用程序都是用maven构建的。 maven有Profiles概念,为不同环境构建发行包非常方便。 例如dev/test/prod使用不同的path / jndiname / security rule / properties files …我想我不必在这里列出代码来解释它。

Spring是一个非常好用的java开发框架,因为spring3它也支持profile概念。

现在问题来了,为了释放到不同的ENV目的,哪一个更好? 现在我更喜欢maven个人资料。 因为spring必须复制每个配置文件中的每个bean定义。 它需要一个初始化器/属性来让spring知道哪个配置文件应该被激活。

但我觉得弹簧轮廓比maven轮廓更灵活。

你怎么看? 请给出一些建议。 谢谢。

Maven配置文件将提供构建时解决方案,而SpringFramework配置文件将提供运行时替代方案。 我认为这是人们可能会问自己的第一个问题:如果他想要一个可以部署在不同环境中的软件包,或者他希望构建工具根据目标环境提供不同的软件包。

要记住的一件事是,如果将不同的软件包部署到不同的服务器中,可能会出现许多问题。 例如,在我的工作场所,如果我正在部署程序包来纠正以前在生产环境中发生的错误,公司策略将声明唯一可接受的情况是我在QA和生产服务器中具有相同的解决方案包。

如果您需要不同的工件,那么请使用maven。 如果它只是一个真实的配置,可以在构建人工制品后配置,那么用户Spring配置文件。

正如其他回复中所提到的:这一切都取决于你的工作方式:)

我们在过去几年中使用maven和现在的spring 3.1配置文件得出的是:

  • 我们使用maven-release-plugin来删除版本。 如果我们要使用maven配置文件,这会导致环境问题,因为我们需要重建版本或至少使用每个maven配置文件标记
  • 所以我们为所有环境创建.war文件,并使用spring PropertyPlaceholderConfigurer来设置应用程序(或一些JNDI资源,具体取决于客户)。 这允许只有一个maven版本运行。
  • 当环境不同时,弹簧轮廓也会进入。 例如,在所有环境中都不可用的身份validation服务。 在这里,我们将该服务存根并将其放入弹簧配置文件中。 我们在属性中激活弹簧轮廓,这些属性由我们使用的PropertyPlaceholderConfigurer读取。

有一些很好的教程如何做到这一点:

我们通常只使用maven配置文件将构建拆分为开发人员和持续集成构建的不同部分。 我们实际上不再将它们用于.war文件的目标环境。 我们仍然使用maven配置文件进行自动化数据库部署,与Web应用程序(数据量,测试数据等)相比,它们有所不同,但这些不是以拉链forms提供的。

肯定还有其他方法可以去。 我不认为它的故事结束:)

但它可能有所帮助。

我碰巧使用properties-maven-plugin根据激活的maven配置文件设置系统属性。 然后在Spring中,我以编程方式激活我想要的配置文件,具体取决于系统属性:

String activeProfile = System.getProperty(“myapp.profile”);

appContext.getEnvironment()。setActiveProfiles(….)

此外,当我想直接链接两种配置文件(maven / spring)时,我通过maven插件设置了spring.profiles.active属性。

设计中的做法可能是错误的,但它们解决了我的问题。

我认为这取决于您的要求。 如果您根据环境有不同的依赖关系(即.jdbc驱动程序等等),您将需要使用maven对其进行排序。

如果仅仅是配置部署的问题,那么最好使用spring。