2

我正在尝试将具有多个子模块的项目转换为 Maven,但我认为我对如何正确执行此操作有点困惑。

这是一个带有war包装的网络应用程序。所以这是我们的项目结构:

  • core(有spring、hibernate等)
  • module1
  • module2
  • module3

每个都module依赖于core,因为core提供数据库访问和一些基本功能。用 Maven 的话来说,我会说

<dependency>
  <groupId>a.b.c</groupId>
  <artifactId>core</artifactId>
</dependency>

里面每module一个pom.xml

下一个:module3也取决于module1. 所以我会放

<dependency>
  <groupId>a.b.c</groupId>
  <artifactId>module1</artifactId>
</dependency>

里面module3pom.xml


直到这里,我认为一切看起来都非常直接和正常(?!)。现在令人困惑的东西:

  • core是网络应用程序。所以最后我会编译这个core项目。
  • 这些modules将为 webapp 提供一些额外的功能
    • 这意味着:core某种程度上取决于每个module
  • 未来的版本可能不包含module2module2b实际上继承了 的类module2,但可以添加/覆盖某些功能

目前我们有一个包含项目modules内部的属性(和一个额外的 xml)文件core。该文件的内容告诉 Spring 扫描更多包以查找 Controller 和 Bean。

此外还有一个 Ant 任务,它适用于文件系统路径:

<path id="libs.projects">
    <dirset dir="${basedir}/../.">
        <include name="libprefix*"/>
        <exclude name="moduleprefix*"/>
    </dirset>
</path>

libprefix它扫描以and开头的文件夹moduleprefix并编译它们。然后它jar从目标目录和一些其他文件(html、jsp、js、css等)中获取生成的文件并将它们复制到core项目目录中。


这些问题很清楚,我认为:

  • 什么是最佳的项目布局(尤其是关于那些未来的版本)
  • 双向项目依赖是否正确?

也许还有其他方法使用带有pom包装的 Maven 父模块?我以前从未使用过它,也不知道它的功能。但我希望你们知道如何解决这个问题;)

谢谢!

4

1 回答 1

1

在 Maven 中,如果您想让您的未来变得轻松,您将让每个 Maven 项目生成一件事。一罐。一战。一个随便。

在将现有项目转换到 Maven 时,这并不容易。问题不在于 Maven,而在于现有项目可能从未组织过依赖结构。它可能已经与依赖于其他部分的子部分的部分进行了卷积,依此类推。它可能看起来是圆形的,但这通常只是未能以有用的方式正确分析和细分位。现有的项目可能有点像我的车库。我可以找到任何东西,但我肯定无法向其他人描述它是如何组织的。这可能适用于车库或小型单人项目,但对于具有执行有价值服务的代码的大型项目,它就是不合适的。Maven 让你很难让它杂乱无章。任何构建工具都可以在组织后使用它。

我认为,根据您所说的,您不是在做这个单一项目/单一工件的事情:

  1. 'core' 包含模块使用的共享代码,'core' 是 webapp(听起来它可能有两个目的。)
  2. 有一个 Ant 任务生成一个 jar 并将其复制到核心项目(一个 jar 应该由其自己的项目创建,核心将依赖该项目。)

一些可能的解决方案。

  • Ant 任务需要是自己的项目,生成自己的 jar 文件,而核心项目依赖于该 jar。
  • 还有另一个战争项目收集各种模块中生成的 jar 和创建 Web 应用程序的核心。
  • 如果您对模块 2b 的讨论意味着有另一个版本的 Web 应用程序使用模块 2b 而不是模块 2,那么您可能需要多个战争项目。
  • 如果您在继续使用模块 2b 时退出使用模块 2,则有关模块 2b 的讨论可能会通过模块的版本控制来解决。

它必须被重新考虑为依赖于一些较低级别的工件(可能是模块 jar 和核心 jar)的顶级工件(也许是一场战争)。然后那些低级工件依赖于其他低级工件。一切都可以依赖于 3rd 方罐子,也是。

于 2013-06-05T14:58:48.790 回答