2017-04-25 38 views
0

我有一个包含3个模块(api,dictionary,webapp)的项目“framework-ws”。 该项目使用了多项其他网络服务项目的父项目。在哪里可以使用maven pom.xml中的哪个范围

例如,项目“core-ws”对于父项具有“framework-ws”。它还包含3个模块(api,字典,webapp)。 这些模块中的每一个都具有作为依赖性的框架。

  • 芯-WS-API =>框架-WS-API
  • 芯-WS-字典=>框架-WS-字典
  • 芯-WS-web应用=>框架-WS-web应用
  • (subproject => dependency)

现在我有其他的依赖项(例如lombok)在每个项目(框架+子项目)中使用。

我不明白我需要声明这种依赖关系。

  1. 在具有“提供”范围父项目,并在没有范围
  2. 在没有范围父项目的每个 儿童的项目,并在每个 儿童项目
  3. 另一种不依赖我没有想到的解决方案

第二个解决方案似乎更清洁,因为我不需要在每个pom.xml中重复依赖关系。但我不知道这是否是最佳做法。

编辑:这是项目结构的图片。 enter image description here

回答

1

在你的父POM使用依赖性管理部分看到https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-io</artifactId> 
      <version>1.3.2</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
在你的孩子

然后POM将要使用的依赖,但不指定版本,即版本将在父曾经被指定为所有的孩子。您仍然需要在每个模块中包含依赖项。

<dependencies> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-io</artifactId> 
    </dependency> 
</dependencies> 

在范围阅读本https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope默认范围是编译它是什么,你通常会使用。我认为你在阅读你的问题时对范围的含义感到困惑。

+0

谢谢,这解决了我的问题的一部分。依赖管理正是我不需要复制代码的东西。 我仍然不明白“提供”范围何时有用。也许我不需要它为我的项目。我将搜索关于这个范围的更多信息。 – YLombardi

+0

提供的是当你想对某些东西进行编译时,让其他东西,通常是服务器“提供”实现。最明显的例子是servlet API。 –