【问题标题】:Deploying a jar file and external resource files with Maven使用 Maven 部署 jar 文件和外部资源文件
【发布时间】: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 不会自动包含在其中,这将不是那么容易)

所以主要问题是:

  1. 这种思路合理吗?
  2. 如果合理,如何将这些外部资源包含在存储库中?

【问题讨论】:

  • Maven 是构建工具而不是部署工具。对于部署到 Test、Q&A 或 Prod 等环境,其他工具更适合,如 Chef、Puppet 或可能是简单的 shell 脚本等。
  • 我知道可能是这种情况。但是在这种特殊情况下,学习和使用另一个工具将两个额外的文件或文件夹移动到本地存储库真的有意义吗?采取这些行动的主要原因是将所有完全可部署版本的历史记录保存在某个地方。
  • 您当然可以创建一个单独的 maven 项目(组合成一个 maven 多模块构建)并将这些配置文件放在那里,并且可以使用 maven-assembly-plugin 将它们打包成一个 zip 文件。 . 或者在同一个模块中创建一个包含配置文件的 zip 文件也可以。
  • 从这个和其他 cmets 中,我感觉 Maven 不应该真正用于部署到生产环境或归档所有可部署的版本,即使在这个简单的场景中也是如此。考虑到这些任务的简单性,我可能会创建一些用于归档可部署版本并将它们转移到生产环境的 powershell 脚本。您的第一条评论最好地总结了这一点,所以也许您可以从中创建一个我可以接受的答案,或者我可以在实施某种脚本解决方案后自己创建一个。

标签: java maven deployment build


【解决方案1】:

Maven 是构建工具而不是部署工具。对于部署到 Test、Q&A 或 Prod 等环境,其他工具更适合,如 Chef、Puppet 或可能是简单的 shell 脚本等

【讨论】:

    【解决方案2】:

    与其他回复一样,我建议您需要研究一种持续集成方法。我以前曾与 Jenkins 合作过很好的经验。它是免费的,并带有很多功能。它还有一个开发了一系列插件的大型社区:

    https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins

    根据您要部署的内容以及您希望如何部署它,一些可能对您的流程有所帮助的插件是:

    【讨论】:

      【解决方案3】:

      您可以将这些文件保存在 src/main/resources/META-INF 中,而不是将这些文件保存在类路径中。因此,当您使用 maven 构建项目时,如果您选择了打包作为 ear <artifactId>ProjectName</artifactId> <version>Version</version> <packaging>ear</packaging>
      然后所有这些文件将被打包在 jar 中,并且将在您的 maven 存储库中可用

      【讨论】:

      • 我不确定这是否包含“可以即时编辑的配置文件”。我没有在 .jar 中包含这些文件,因为我希望能够在服务器上编辑它们(如果有必要),但仍然提供默认配置。
      • 在这种情况下,最好使用 Jenkins(CI 服务器),但它也不会将这些文件移动到 maven 存储库。即使在 Jenkins 中,您也需要创建一个基于 maven 的作业并且它与任何 IDE 中的工作方式相同
      猜你喜欢
      • 2013-10-14
      • 2010-10-19
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多