【问题标题】:xsbt-web multi-module project: package some modules to jars, others to warsxsbt-web 多模块项目:将一些模块打包到 jars 中,将其他模块打包到 wars
【发布时间】:2015-10-19 10:35:57
【问题描述】:

我正在使用 sbt 0.13.8 和 xsbt-web-plugin 2.0.3

我有一个多模块 sbt 项目。打包时,其中一个模块应采用 war 文件的形式。 jar 文件中的所有其他内容。

当我添加 xsbt-web 插件时,打包会为所有模块生成 jars wars。如何告诉 xsbt-web 插件仅将自身应用于应打包为战争的模块?

我已经找到了一种解决方案,即为每个非战争模块改变 packagedArtifacts 列表:

packagedArtifacts <<= packagedArtifacts map { as => as.filter(_._1.`type` != "war") }

但是,这是一个非本地更改,我必须将其应用于我(或团队成员)可能创建的每个新的非战争模块。

我不认为这是 StackOverflow 问题 How to “package” some modules to jars and others to wars in multi-module build with single task? 的重复,因为我没有使用程序集。

请注意,当前正在生成的 jar 模块的 jar 和 war 模块的 war 运行良好。我只是想避免有人试图部署一场本来应该是罐子的战争。

【问题讨论】:

  • 您使用的是哪个版本的 xsbt-web-plugin?
  • 我使用的是 xsbt-web-plugin 2.0.3。
  • 你是在每个模块上使用enablePlugins(),还是只在webapp上使用?
  • @James 现在我根本不用它。我只需要打包战争的功能,而不需要在 sbt 中运行嵌入式 Web 服务器。以前,我只在 war 项目中尝试过,而且只在根项目中尝试过——在任何一种情况下,它似乎都没有任何区别。如果没有 enablePlugins(JettyPlugin) 我仍然会得到战争文件。只有当我不使用 addSbtPlugin 时,包的行为才会停止生成 war 文件。
  • 啊哈,你说得对;这是一个错误。所有项目都会触发用于构建 .war 文件的AutoPlugin,而不仅仅是enablePlugin() 的项目。我将在 2.0.4 中修复此问题,您将能够通过 enablePlugin(WarPlugin) 仅使用 *.war 文件支持。等待更新。

标签: sbt xsbt-web-plugin


【解决方案1】:

这是 2.0.3 版中的一个错误——感谢您发现它!我已经在 2.0.4 中修复了它。

为多模块项目中的单个模块启用 .war 文件发布:

  1. project/plugins.sbt 中添加 xsbt-web-plugin
  2. [webproject]/build.sbt中启用WarPlugin插件

项目/plugins.sbt:

addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "2.0.4")

[webproject]/build.sbt:

enablePlugins(WarPlugin)

你可以在https://earldouglas.com/ext/stackoverflow.com/questions/31683637/找到一个完整的例子

【讨论】:

  • 谢谢@James!我以为我只是用错了。 2.0.4 版确实只为war 模块创建了war 文件,并为所有其余模块创建了jar。为了其他读者的利益,我可能会补充一点, enablePlugins 是可变参数。例如,要添加战争和码头插件,请使用 enablePlugins(WarPlugin, JettyPlugin)
  • 酷,我不知道enablePlugins() 是可变的。请注意,如果启用JettyPlugin,您将自动获得WarPlugin,因为它是一个依赖项。
猜你喜欢
  • 2015-02-22
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
相关资源
最近更新 更多