【问题标题】:How to setup maven framework top level pom如何设置maven框架顶级pom
【发布时间】:2012-02-09 07:23:55
【问题描述】:

我刚刚将我们的一个内部框架项目从 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 文件都将被我的消费项目下载?

【问题讨论】:

    标签: maven-2 dependencies multi-module


    【解决方案1】:

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

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

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

    请注意,我的依赖声明指向我的子模块之一,并且没有像您那样声明 &lt;type&gt;pom&lt;/type&gt;。如果您想真正明确,可以声明 &lt;type&gt;jar&lt;/type&gt;

    【讨论】:

    • 是的,这将是完成任务的一种方式,但是当我在转换我们现有的 ant 构建时,每个人都习惯于包含“框架”并让所有 50 个 jar 文件始终可用。
    • 我明白了,您可以尝试让一个子模块(称为“framework-all”之类的)声明对所有其他子模块的依赖关系。然后,您的开发人员应该能够声明对这个子模块的依赖,而 maven 将选择其他子模块作为传递依赖。
    • 我最终使用了这个版本的变体。我保留了顶级聚合器 pom 用于构建和部署。但 GAV 与应用程序使用的不同。然后我在一个新文件夹中创建了一个新的 pom。这个包含应用程序的“正确”GAV,没有模块,只有依赖项。到目前为止,这有效
    【解决方案2】:

    您所称的framework pom 是您的多模块项目的parent pom。

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

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

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

    【讨论】:

    • 不是很有帮助 - 但感谢您的尝试。我仍然需要其他项目使用框架及其所有依赖 jar 文件的方法。
    • @Jon 似乎您正在寻找通配符方法。您不能包含包装类型为 pom 的依赖项。
    • @Keerthi - 实际上我可以有一个 pom 作为依赖项,我将它广泛用于我们第三方库中的多模块项目。然后我在消费项目中只有 1 个条目,使消费者 pom 文件更干净。但在这种情况下,我正在构建 jar 文件,同样的方法不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 2012-12-11
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    相关资源
    最近更新 更多