0

我刚刚将我们的一个内部框架项目从 ant 转换为 maven。maven 构建运行良好,并且可以毫无问题地部署到我们的存储库。

问题是当其他项目尝试使用该框架时,它不起作用。唯一下载的是顶级框架 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>

然后是顶级 pom 的常用属性、依赖管理和 pluginManagement 条目。

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

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

这是在顶级 pom 中,因此所有子模块都可以访问框架库,以使开发人员更容易。

我该如何设置,以便我的消费项目下载所有依赖的 jar 文件?

4

2 回答 2

2

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

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

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

请注意,我的依赖项声明指向我的子模块之一,并且<type>pom</type>不像您那样声明。如果您想真正明确,可以<type>jar</type>改为声明。

于 2012-01-18T17:19:21.327 回答
-1

framework你所说的pomparent是你的多模块项目的 pom。

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

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

Maven By Example是提供更多信息的众多可用资源之一。

于 2012-01-13T05:12:01.437 回答