Maven依赖项和属性

时间:2013-10-19 15:15:16

标签: maven pom.xml parent-pom

我正在尝试设置,我认为是一个非常标准的库。它拥有各种标准支持功能和与第三方集成的接口。在这里做一些事情,以便更容易展示。首先,我有这个结构:

├── pom.xml // parent pom
├── external
│   └── external_system1
│       └── pom.xml // pom for external_system1
├── internal
│   └── internal_system1
│       └── pom.xml // pom for internal_system1
└── util
    └── configuration
        └── pom.xml // pom for configuration

我们有一些实用程序函数用于调用和连接到不同的系统,但也用于日志记录和配置。这有一些内部依赖关系,例如大多数(如果不是全部)依赖于上面的配置。

主要由于内部依赖性,我想在同一版本中保留所有项目。因此在父pom中我有版本,那当然是全局的。在具体的项目poms我有所需的兄弟姐妹的依赖。我试图用属性替换那里的版本字符串,我用于父pom中的版本的相同属性。然而,mvn似乎并没有接受它,因为它给了我:

[ERROR]     'dependencies.dependency.version' for com.mycomapany.myproject:util-configuration:jar must be a valid version but is '${myproject.version}'. @ line 32, column 1

我可以通过将所有依赖项放在父pom中来解决这个问题,我可以使用myproject.version属性。这引出了几个问题:

  1. 它不会破坏父pom中所有依赖项的目的吗?在我看来,将它们列在pom中以实际具有依赖性的特定部分是非常有意义的。对我来说,它有助于提高可读性,因为我可以很容易地看到任何依赖。

  2. 当我以后使用这个库和汇编插件构建一些东西时会发生什么?我们正在构建独立的罐子,并且不想将每个罐子中不需要的所有依赖项拉入其中,或者它只是拉入每个罐子实际使用的那些依赖项? IE如果我有一个依赖于上面的util-configuration的项目,它会拉入util-configuration的父pom中列出的所有兄弟节点,还是会看到那里有很多未使用的东西?

  3. 这背后的原因是什么?显然我在这里认为理智(将依赖关系放在尽可能低的水平)并不被认为是理智的。我在Sonatypepom documentation at maven浏览了两本书,但我看不出有关推理的解释。

  4. 在儿童poms中,我指的是父版pom。什么是理智的方式?是使用mvn versions:set -DnewVersion=还是有另一种方式?这是否适用于使用属性或我必须有两个版本字符串版本:设置为工作?一个用于父pom本身的属性(没有变量),一个用于所有依赖项(使用属性设置,所以我不必在20-ahh位置更改)?

  5. 我意识到上面的第4点可能不太清楚但是现在我在父pom中有这个:

          <version>${myproject.version}</version>
        ...
            <dependency>
              <groupId>com.mycompany.myproject</groupId>
              <artifactId>util-configuration</artifactId>
              <version>${myproject.version}</version>
            </dependency>
    ...
       <properties>
        <myproject.version>0.0.1-SNAPSHOT</myproject.version>
    

    我想问的是,如果以上内容适用于versions:set,或者我是否必须将第一个更改为字符串,然后在碰撞版本后必须编辑myproject.version属性。< / p>

    很抱歉很长的问题,但他们感觉非常紧密。

    *编辑 在当前(工作)父pom的片段中添加了myproject.version,使其对我的属性更加清晰,下面我添加了我想要的内容(以及对我来说有意义的内容){{ 1}} pom文件,其依赖关系为myproject-internal-somesystem。也就是说,使用来自父项的myproject-util-configuration属性,因此在碰撞项目版本时,我不必编辑所有单个poms并碰撞它们的依赖项。这不起作用,相反,如果我想使用myproject.version,我必须在父pom中有依赖。

    myproject.version

0 个答案:

没有答案