包含maven的条件传递依赖项

时间:2016-06-24 12:47:22

标签: java maven

我的目标是将一个项目包含到另一个项目中,同时控制应包含的传递依赖项。

假设项目Y基于项目X. Project X有两个已定义的配置文件,profile-a和profile-b:

<project>
  ...
  <profiles>
    <profile>
      <id>profile-a</id>
      <dependencies>
          // [A] depednencies
      </dependencies>
    </profile>
    <profile>
      <id>profile-b</id>
      <dependencies>
          // [B] depednencies
      </dependencies>
    </profile>
  <profiles>
</project>

有没有办法将项目X包含到项目Y中,并且可以指定我们要导入项目X的配置文件?

控制传递依赖关系的示例方法应该是使用依赖关系排除,但我正在寻找一种更复杂的方法,如果可以使用它。

我还有第二个问题涉及在配置文件中使用依赖项: 当然,项目X可能有许多依赖于profile-a和profile-b的依赖关系的类。

如果使用一个配置文件构建或导入项目X(如果可能的话),这不会破坏使用其他配置文件的依赖项的类的编译?

感谢大家的反馈。

1 个答案:

答案 0 :(得分:0)

在与@khmarbaise讨论之后,我在maven网站上进行了额外的搜索,我偶然发现了this article

在此页面中,有一段涉及从单一来源目录生成多个唯一JAR ,其中指定了该段落:

  

许多人抱怨无法传播他们的   源到多个源目录似乎抱怨不   想要传播任何东西,产生几个独特的文物   使用包含和排除的单个目录。

     

为什么不推荐这个?

     

这种做法可能会造成混淆和风险。

     

您最终可能会构建两个包含相同类的JAR - 这个   表示应该抽象出通用功能   成为一个单独的依赖。您可能最终会引入依赖项   在你没有意识到的两个JAR之间,通常是循环的   依赖。这表明类是在错误的JAR中,或者   也许一切都应该只是一个JAR。

     

我该怎么做?

     

你仍然应该坚持每个POM产生一个工件,但是这个   需要具有多个POM,因此需要多个子目录。该   这是积极的,这些引入的目录不会改变   现有代码的布局,并将为您建立未来的布局   决定分开。

起初,我一直在寻找一种方法来管理从项目到另一个项目的传递依赖项,方法是从同一来源创建许多工件。

在阅读之后,很明显maven鼓励每个pom创建一个工件。

创建项目的单独模块肯定仍然是处理从一个项目到另一个项目的不同依赖项使用情况的最简洁方法。