【问题标题】:Using maven to produce production ready output使用 maven 生成生产就绪输出
【发布时间】:2012-04-18 15:26:46
【问题描述】:

我有一个多模块 maven 项目,我创建了一个依赖于其他 3 个模块的新模块。 (我已经有一个生成 .war 文件的网络应用程序 maven 模块,现在我需要这个)

这个模块的输出是一个.jar,它还有一些资源:

  1. spring 上下文 xml 文件
  2. 属性文件

现在我想制作一个生产就绪文件夹,以便将其上传到我的服务器。我希望 maven 可以为我做到这一点。

我需要以下布局:

myjar.jar
/libs/  (the 3 other maven modules that are dependancies)
/resources

此外,我的父 pom.xml 有一些通用依赖项,例如 slf4j/log4j/,我也需要打包。

如果我可以在 mvn 中添加一个会产生如下效果的开关,那就太棒了:

mvn clean install production

我打算通过命令行在我的服务器上运行它。

【问题讨论】:

  • 考虑使用Q&A 中谈到的更标准化的生产文件夹结构。

标签: java spring maven


【解决方案1】:

我认为您正在寻找的是一个 Maven 程序集:

https://maven.apache.org/plugins/maven-assembly-plugin/

您可以使用配置文件默认禁用程序集的生成(可以加快开发过程)。

【讨论】:

    【解决方案2】:

    @puce 是正确的,您最好使用Assembly Plugin。你不能轻易做的是向 Maven 添加另一个生命周期“生产”。如果您有时间,您可以编写一个插件来执行此操作,但您最好使用名为“production”或“prod-deploy”的配置文件来启用服务器上的应对。

    mvn clean install -Pprod-deploy
    

    要记住 maven 的一件事是,它非常擅长使用它的约定来构建项目,但它在实际编写脚本以在构建生命周期之外发生的事情方面却非常糟糕。

    我曾多次使用外部脚本工具(例如 ant/python/bash 和 groovy)首先使用 mvn 运行构建,然后以更自然的语言编写部署脚本。

    【讨论】:

    • 谢谢。我是否可以从其他模块中挑选一个文件并将其添加到我的 lib 文件夹中?
    • 不是真的,严格来说你应该只引用一个 maven 项目的二进制输出,即 jar 文件。您可以使用依赖插件来获取那些。
    • @Blankman 您可以使用 maven-dependency-plugin 的 unpack-dependencies 目标从工件中提取资源。然后你可以将它包含在你的程序集中。
    • 等等,实际上我的 /resources 文件夹由于某种原因被包含在我的 .jar 中,并且它具有开发文件夹路径(那里有一个属性文件),我该如何排除 /resources 文件夹?请帮忙!
    • 我只希望在 mvn 程序集构建期间排除资源。
    【解决方案3】:

    Maven 的目的是构建而不是部署到生产。为此,我会推荐像 Chef 或 Puppet 这样的东西。从技术的角度来看,当然可以通过 Maven 处理这些事情。在像 Jenkins 这样的 CI 解决方案上构建什么也是可能的。此外,还可以从 Jenkins 运行脚本来进行生产部署。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-06
      • 2018-09-16
      • 1970-01-01
      • 2020-02-20
      • 2015-06-09
      • 2011-05-15
      • 2017-09-23
      • 1970-01-01
      相关资源
      最近更新 更多