【问题标题】:Spring Multi Module project with single war file where all modules depends only on common module带有单个war文件的Spring Multi Module项目,其中所有模块仅依赖于公共模块
【发布时间】:2017-05-13 19:23:33
【问题描述】:

我将现有的 spring 项目拆分为多模块项目,其中每个模块仅依赖于公共模块并创建一个 jar 文件,除了最后一个创建 war 文件的文件。

这是项目结构

parent        - packaging -POM, defines module sequence 
common_mod    - common java code i.e. interface , base classes
jar-Mod-1     - depends on common
jar-Mod-2     - depends on common
jar-Mod-3     - depends on common
war-Mod       - depends only on common, this contains java and webapp code

每个项目都有自己的 spring 上下文。最后一个模块导入它们中的每一个,例如

<import resource="classpath*:common-config.xml"/>

现在我想创建一个包含所有模块 jar 的单一战争,但没有将每个模块定义为最终战争模块中的依赖项。如果我指定相同,那么开发人员也可以在 war 模块中编写模块特定代码(比如 Jar Mod 1 模块),我想避免这种情况。

现在当我创建war时,它只包含公共模块的jar,因为它被指定为war模块中的依赖项。

所以当我运行这个项目时,它抱怨找不到从其他模块中找到的 bean,这很明显,因为 war 不包含其他模块的 jar。

【问题讨论】:

  • 如果要将 JAR 放入 WAR,则必须定义 WAR 依赖于 JAR。这就是它的工作原理。我读到你有反对意见,但我不完全理解反对意见。无论如何,我认为反对意见被高估了,因为当 B 依赖于 A 时,没有什么能阻止你在 B 中编写与 A 相关的代码。也许 Jigsaw 会停止。
  • 所有这些模块都是独立的,所以在任何时候你都应该能够从父 pom 中注释掉任何模块并且代码应该仍然可以编译。如果您将单个模块的代码放入最后一个模块,则它将无法编译。所以即使 B 依赖于 A,它也是通过公共模块而不是直接的。
  • 我想知道你是否知道runtime的依赖范围是什么:stackoverflow.com/questions/12272499/…
  • 感谢 Artem Bilan,帮了大忙!

标签: java spring maven spring-integration maven-reactor


【解决方案1】:

感谢 Artem Bilan 的回答,

您将在 war 模块中添加模块依赖项,但如果您想在编译时忽略它们,但在最终 WAR 中需要该模块的 jar(这正是我想要的),您必须定义该依赖的范围为runtime

Maven : what is the "runtime" scope purpose?

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多