使用$ {project.artifactId}的Maven依赖关系管理artifactId

时间:2014-02-06 07:48:09

标签: maven maven-2

在我的父母:

<project>
...
<dependencies>
    <dependency>
        <groupId>${parent.groupId}</groupId>
        <artifactId>${parent.artifactId}-war</artifactId>
        <type>war</type>
    </dependency>
</dependencies>
... 
</project>

在我的父母:

<project>
...
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>myproject-war</artifactId>
            <version>${project.version}</version>
            <type>war</type>
        </dependency>
    </dependencies>
</dependencyManagement>
... 
</project>

只是想知道为什么使用(在父母中)

<artifactId>myproject-war</artifactId>

正在使用

<artifactId>${project.artifactId}-war</artifactId>

无效

[0]  'dependencies.dependency.version' is missing for be.lab:myproject-war:war

1 个答案:

答案 0 :(得分:0)

你应该考虑一下你的设置。除了更新到最后一个Maven版本(3.1.1)..

 root -- pom.xml
   +--- m1 (pom.xml)
   +--- m2 (pom.xml)
   +--- m3 (pom.xml)

你的root(父)看起来像这样:

<project ....>
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.soebes.maven.training</groupId>
  <artifactId>parent</artifactId>
  <packaging>pom</packaging>
  <version>1.0.0-SNAPSHOT</version>

  <modules>
    <module>m1</module>
    <module>m2</module>
    <module>m3-war</module>
  </modules>

  ...
</project>

典型的孩子看起来像:

我建议只在子节点中定义子节点之间的依赖关系,如下所示:

<project ..>

<modelVersion>4.0.0</modelVersion>

<parent>
  <groupId>com.soebes.maven.training</groupId>
  <artifactId>m1</artifactId>
  <version>1.0.0-SNAPSHOT</version>
</parent>

<artifactId>m1</artifactId>

</project>

与其他孩子有依赖关系的孩子看起来像这样:

<project ..>

<modelVersion>4.0.0</modelVersion>

<parent>
  <groupId>com.soebes.maven.training</groupId>
  <artifactId>m1</artifactId>
  <version>1.0.0-SNAPSHOT</version>
</parent>

<artifactId>m2</artifactId>

<dependencies>
  <dependency>
    <groupId>${project.group}</groupId>
    <artifactId>m1</artifactId>
    <version>${project.version}</version>
  </dependency>
</dependencies>

</project>

此外,使用像${parent.*}这样的东西并不是一种好习惯。

让我们来看看那个战争模块:

<project ..>

<modelVersion>4.0.0</modelVersion>

<parent>
  <groupId>com.soebes.maven.training</groupId>
  <artifactId>m1</artifactId>
  <version>1.0.0-SNAPSHOT</version>
</parent>

<artifactId>m3-war</artifactId>

<dependencies>
  <dependency>
    <groupId>${project.group}</groupId>
    <artifactId>m2</artifactId>
    <version>${project.version}</version>
  </dependency>
</dependencies>

</project>

我建议不要使用像<artifactId>${parent.artifactId}-war</artifactId>这样的结构。在这种情况下更好地使用只是<artifactId>module-war</artifactId>因为它不会节省太多。