有点与Maven的双向依赖或我只是困惑?

时间:2013-06-05 14:49:00

标签: maven pom.xml dependency-management m2e circular-dependency

我正在尝试将包含多个子模块的项目转换为Maven,但我认为我对如何做正确的事感到困惑。

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

  • core(使用spring,hibernate等)
  • module1
  • module2
  • module3

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

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

在每个module的{​​{1}}内。

下一步:pom.xml也取决于module3。所以我会把

module1

<dependency> <groupId>a.b.c</groupId> <artifactId>module1</artifactId> </dependency> 的{​​{1}}内。


直到这里,我认为一切看起来都很正常(?!)。 现在令人困惑的事情:

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

目前我们有一个属性(和一个额外的xml)文件,其中包含module2b项目中的module2。该文件的内容告诉Spring扫描更多的控制器和Bean包。

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

modules

它会扫描以core<path id="libs.projects"> <dirset dir="${basedir}/../."> <include name="libprefix*"/> <exclude name="moduleprefix*"/> </dirset> </path> 开头的文件夹并对其进行编译。然后,它从目标目录和其他一些文件(html,jsp,js,css等)中获取生成的libprefix文件,并将它们复制到moduleprefix项目目录中。


我认为问题很清楚:

  • 什么是最佳项目布局(特别是关于未来版本)
  • 双向项目依赖是正确的吗?

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

谢谢!

1 个答案:

答案 0 :(得分:1)

在Maven中,如果你想让自己的未来变得轻松,那么每个Maven项目都会产生一件事。一个罐子。一场战争。无论如何。

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

我认为,根据你的说法,你不是在做这个项目/一件神器的事情:

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

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

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