【发布时间】:2014-12-10 05:08:52
【问题描述】:
我正在尝试将现有的大型多模块项目从 Maven 2 迁移到 Maven 3。该项目大量使用 profile.xml 来定义不同环境(开发、登台、生产)的设置;如您所知,profiles.xml 在 Maven 3 中不再存在。
我的目的是使这种过渡尽可能无缝,因此不能选择在每台机器上使用 settings.xml,也不能要求每个人都使用 -s 和新的设置文件运行 maven。
父 pom 已经相当广泛了,因为它为所有模块配置插件、存储库和依赖项;它还使用操作系统激活的一些配置文件来设置依赖于平台的依赖项的适当分类器。因此,我宁愿不要将所有环境的所有配置选项都放在 pom 本身上,以免造成混乱。
我正在寻找一种将环境配置与 pom 分开的方法;但对所有模块(现在或将来)都是通用的。理想情况下,这意味着该解决方案只需要编辑父 pom,而不是子模块的,从而使这个问题对所有未来的子模块透明。
我查看了properties-maven-plugin,但似乎无法让它为所有子模块加载相同的文件,它会在子模块本身中查找文件,或者如果我使用@987654322 定义相对路径@ 父项目会失败(因为我不能在超级 pom 中为子项目定义构建插件,也不能在父项目上执行)。
我还研究过为每个环境设置单独的属性文件并在父 pom 中设置过滤器,但我遇到了同样的问题。
到目前为止,我唯一能做的就是编辑所有子模块的 pom 并手动将过滤器设置为${project.basedir}/../config/${env}.property;但这肯定不符合对未来模块透明的标准,我发现必须在每个子模块上设置它是非常重复的......
任何想法都非常受欢迎,在此先感谢。
【问题讨论】:
-
你只是想共享属性,还是插件配置?
-
现在我们的父 pom 配置插件和依赖项;而我们的配置文件具有用于过滤资源的环境设置(连接字符串等)。我想保持所有子模块共享,但在单独的文件中。
-
听起来子模块更新它们正在使用的父 POM 的版本是可以接受的,是吗?
-
我不确定您的建议是什么,但请随时提交您的想法,我们将不胜感激。
标签: maven build maven-3 build-process