【发布时间】:2015-10-15 04:30:56
【问题描述】:
我是 Maven 新手,想通过自动将多个文件和文件夹部署到生产环境来自动化一些构建步骤:
my-app-0.7.0-jar-with-dependencies.jar (main application file)
conf.properties (configuration file that can be edited on the fly)
files_folder (folder that contains html, css etc. that can be edited on the fly)
我的项目结构如下:
src
main
java
resources (contains resources that should be included in the .jar)
conf.properties.jar
files_folder
.
我首先在pom.xml 中添加<resources> 元素
<resources>
<resource>
<directory>.</directory>
<includes>
<include>conf.properties</include>
<include>files_folder/**/*.*</include>
</includes>
<targetPath>..</targetPath>
</resource>
</resources>
这会将conf.properties 和files_folder 移动到target 目录,这很好(我可以复制.jar、conf.properties 和files_folder 并运行它们)。
但是,这些文件不会移动到 C:\Users\my_name\.m2\... 中的本地存储库或外部存储库(在安装和部署阶段)。
我的想法是这些资源应该被移到存储库,因为:
- 它们是程序运行所必需的
- 可以非常快速地回滚到任何以前的版本(只需找到版本文件夹,您需要的一切都会在那里;如果 conf.properties 和 files_folder 不会自动包含在其中,这将不是那么容易)
所以主要问题是:
- 这种思路合理吗?
- 如果合理,如何将这些外部资源包含在存储库中?
【问题讨论】:
-
Maven 是构建工具而不是部署工具。对于部署到 Test、Q&A 或 Prod 等环境,其他工具更适合,如 Chef、Puppet 或可能是简单的 shell 脚本等。
-
我知道可能是这种情况。但是在这种特殊情况下,学习和使用另一个工具将两个额外的文件或文件夹移动到本地存储库真的有意义吗?采取这些行动的主要原因是将所有完全可部署版本的历史记录保存在某个地方。
-
您当然可以创建一个单独的 maven 项目(组合成一个 maven 多模块构建)并将这些配置文件放在那里,并且可以使用 maven-assembly-plugin 将它们打包成一个 zip 文件。 . 或者在同一个模块中创建一个包含配置文件的 zip 文件也可以。
-
从这个和其他 cmets 中,我感觉 Maven 不应该真正用于部署到生产环境或归档所有可部署的版本,即使在这个简单的场景中也是如此。考虑到这些任务的简单性,我可能会创建一些用于归档可部署版本并将它们转移到生产环境的 powershell 脚本。您的第一条评论最好地总结了这一点,所以也许您可以从中创建一个我可以接受的答案,或者我可以在实施某种脚本解决方案后自己创建一个。
标签: java maven deployment build