我正在尝试将包含多个子模块的项目转换为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父模块?我从来没有使用过它,也不知道它的功能。但我希望你们知道如何解决这个问题;)
谢谢!
答案 0 :(得分:1)
在Maven中,如果你想让自己的未来变得轻松,那么每个Maven项目都会产生一件事。一个罐子。一场战争。无论如何。
将现有项目转换为Maven时,这很容易。问题与Maven的关系不如现有的项目,可能从未有过依赖结构的组织。它可能已经与依赖于其他部分的子部件等的部件进行了复杂化。它可能看起来是圆形的,但通常只是无法以有用的方式正确地分析和细分这些位。现有项目可能有点像我的车库。我可以找到任何东西,但我肯定无法描述它是如何组织给其他任何人的。这可能适用于车库或小型单人项目,但对于代码执行有价值服务的大型项目而言,这是不恰当的。 Maven让你很难让它变得杂乱无章。任何构建工具都可以在组织时使用它。
我认为,根据你的说法,你不是在做这个项目/一件神器的事情:
一些可能的解决方案。
它必须重新考虑作为顶级神器(可能是一场战争),这取决于一些较低级别的工件(模块罐和核心jar,也许)。然后,那些较低级别的工件依赖于其他低级工件。一切都取决于第三方罐子。