Maven 2 如何设置maven框架顶级pom

Maven 2 如何设置maven框架顶级pom,maven-2,dependencies,multi-module,Maven 2,Dependencies,Multi Module,我刚刚完成了一个内部框架项目从ant到maven的转换。maven构建运行良好,部署到我们的存储库中没有问题 问题是,当其他项目尝试使用该框架时,它不起作用。唯一下载的是顶级框架pom 我曾尝试将一些依赖项添加到一个或多个不同的模块中,但无论添加哪个模块,都会出现循环依赖项错误。我还尝试创建第二个顶级pom文件,其中没有模块和一些依赖项,以覆盖存储库管理器中的pom文件。这会导致下载一些依赖项,但随后maven构建将挂起在随机位置。基于windows任务管理器,它看起来像是一个无休止的循环。所以

我刚刚完成了一个内部框架项目从ant到maven的转换。maven构建运行良好,部署到我们的存储库中没有问题

问题是,当其他项目尝试使用该框架时,它不起作用。唯一下载的是顶级框架pom

我曾尝试将一些依赖项添加到一个或多个不同的模块中,但无论添加哪个模块,都会出现循环依赖项错误。我还尝试创建第二个顶级pom文件,其中没有模块和一些依赖项,以覆盖存储库管理器中的pom文件。这会导致下载一些依赖项,但随后maven构建将挂起在随机位置。基于windows任务管理器,它看起来像是一个无休止的循环。所以第二个pom文件似乎不是答案(或者我做错了)

我的框架pom文件如下所示:

<project>
  <modelVersion>4.0.0</modelVersion>

  <groupId>framework_snt</groupId>
  <artifactId>SFP</artifactId>
  <packaging>pom</packaging>
  <name>SFP framework</name>
  <version>6.3</version>

  <modules>
.... 50+ modules here
  </modules>

4.0.0
框架
SFP
聚甲醛
SFP框架
6.3
.... 这里有50多个模块
然后是顶级pom的常用属性、依赖项管理和插件管理条目

在消费模块中,我只有以下内容:

<dependency>
  <groupId>framework_snt</groupId>
  <artifactId>SFP</artifactId>
  <version>6.3</version>
  <type>pom</type>
</dependency>

框架
SFP
6.3
聚甲醛
这是在顶层pom中,因此所有子模块都可以访问框架库,以使开发人员更容易使用


我该如何设置,使所有依赖的jar文件都能由我的消费项目下载?

您所称的
框架
pom是您的多模块项目的
父级
pom

虽然模块可以相互依赖,但不能依赖于此父pom。这就是可能导致循环依赖的原因

您需要重新查看模块,确定哪些模块依赖于哪些模块,并适当地指定依赖项。此外,这些依赖项通常是
jar
依赖项-一个包含源和资源的包


是提供更多信息的众多可用资源之一

听起来您的框架项目生成了几个jar工件,每个子模块一个,但父项目没有jar工件。因此,在父项目的pom上声明依赖项不是您想要做的事情。相反,您需要声明对框架项目的每个子模块的依赖关系

我有一个类似的设置,我有一个“工具箱”项目,其中有几个模块(每个模块产生一个jar工件)。然后在我的其他项目中,我声明依赖于我需要使用的任何模块。但是,我不声明对“toolkit”父项目pom文件的依赖关系。相反,我只是声明子模块jar工件上的依赖项

<dependency>
  <groupId>com.mycompany.toolkits</groupId>
  <artifactId>file-utils</artifactId>
  <version>1.0.0</version>
</dependency>

com.mycompany.toolkits
文件UTIL
1.0.0

请注意,我的依赖项声明指向我的一个子模块,并不像您那样声明
pom
。如果您想要真正明确,您可以声明
jar

不是很有帮助,但感谢您的尝试。我仍然需要其他项目使用该框架及其所有依赖的jar文件的方法。@Jon似乎在寻找一种通配符方法。您不能包含包装类型为pom的依赖项。@Keerthi-实际上,我可以将pom作为依赖项,并且我在第三方库中的多模块项目中广泛使用它。然后,我在消费项目中只有一个条目,这使得消费pom文件更干净。但是在这种情况下,在im构建jar文件的情况下,相同的方法不起作用。是的,这将是完成事情的一种方法,但是在im转换我们现有的ant构建时,每个人都习惯于包括“框架”,并且所有50个jar文件始终可用。我明白了,您可以尝试使用一个子模块(称为“框架所有”)声明对所有其他子模块的依赖关系。然后,您的开发人员应该能够在这个单子模块上声明一个依赖项,maven将把其他模块作为可传递依赖项。我保留了用于构建和部署的顶级聚合器pom。但GAV与应用程序使用的不同。然后我在一个新文件夹中创建了一个新pom。这一个包含应用程序的“正确”GAV,没有模块,只有依赖项。到目前为止,这是可行的