1

我们正计划重组一个包含许多模块/部分的复杂项目,无论你想怎么称呼它。为了向标准目录结构迈进,我们想采用 maven 文件结构。

所以最大的问题是:任何人都可以提供 maven 文件结构的描述,我们不必深入研究所有的 maven 语言吗?

4

2 回答 2

5

请参阅 http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

src/main/java      Application/Library sources
src/main/resources   Application/Library resources
src/main/filters    Resource filter files
src/main/assembly    Assembly descriptors
src/main/config      Configuration files
src/main/webapp      Web application sources
src/test/java      Test sources
src/test/resources   Test resources
src/test/filters     Test resource filter files
src/site            Site
LICENSE.txt          Project's license
README.txt        Project's readme

顺便说一句,我们对现有项目进行了迁移。让一切按预期工作是一项非常漫长而艰巨的任务,但我们终于完成了并对此感到满意。


更新

当您有许多项目时,每个项目都有相同的结构

现在真正的问题开始于您想要对它们进行分组时。我们很难阅读 Maven 文档和最佳实践,并决定什么是适合我们的结构。

基本思想是将相关项目分组在一个公共目录(我们称为模块)中,允许将模块作为一个整体进行处理而不列出它们。但是,如果您在 IDE(在我们的例子中为 Eclipse)中打开模块,项目本身属于它,但不会作为子项目打开(Eclipse 中不存在这个概念)。

我们最终得到了一个严格的层次结构,这让我们摆脱了许多 maven 问题:

  • 实际的编码项目(java 项目)总是在我们的目录树中。它们是我们在 IDE 中唯一打开的。它们是 JAR 或 WAR 类型。
  • 它们的父/模块总是 POM 类型。他们没有java代码。
于 2010-01-27T09:20:32.293 回答
0

在 Maven 2.2.1 和现在的 Maven 3.0-alpha-6 的许多项目中,我一直在使用与 Jens 相同的方法:POM 模块定义了项目树的模块结构,JAR/WAR 模块是那个树。所有模块都具有相同的版本。

优点:

  • 您可以在模块层次结构中的特定级别上放置属性或依赖项,它们将被继承到所有子模块。
  • 您可以简单地通过转到树中的适当级别并运行“mvn install”来构建相关模块 - Maven 将根据该顺序计算出正确的构建顺序。
  • 各种 Maven 插件,例如发布插件,都依赖于这种树形结构。
  • 最新的 Maven Eclipse 插件可以很好地处理这种结构,并将树表示为一个平面列表。插件中有一个实验性功能,可确保所谓的“阴影”工件只出现一次,这有助于在 Eclipse 中搜索资源。

缺点:

  • 扩展需要一些时间。例如,如果您决定 JAR 模块需要子模块,则需要将现有 JAR 模块转换为 POM 模块,然后将其内容分发到新创建的 JAR 子模块,因为 POM 模块本身不能包含任何代码。
  • 所有的 POM 模块都将出现在 Eclipse 中,并且会稍微减慢构建速度。但是,您可以关闭它们,Eclipse 将从存储库中获取它们。
于 2010-03-11T00:17:34.240 回答