在Maven 3中,如何将模块的project.version用作对另一个项目的依赖

时间:2012-10-02 22:09:42

标签: maven parent-child maven-3 pom.xml

我有多模块的ejb3-web应用程序概述如下:

project
- pom.xml
project_ear
- pom.xml
project_ejb
- pom.xml
project_web
- pom.xml

我有不同的类似项目,其中包含前一个(project_ejb)。

project2
- pom.xml
project2_ear
- pom.xml
project2_ejb
- pom.xml (here, project_ejb is gonna be included as a dependency)
project2_web
- pom.xml

如你所见,他们有类似的结构。无论如何,我遇到的问题是当我想使用$ {project.version}时,我无法再清理或构建project2。


这里是项目的pom样本

“project”父母pom:

<modelVersion>4.0.0</modelVersion>
<groupId>com.project</groupId>
<artifactId>project</artifactId>
<version>${project.version}</version> 
<packaging>pom</packaging>

“project_ejb”pom:

   <modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.project</groupId>
        <artifactId>project</artifactId>
    <version>${project.version}</version>
    <relativePath>../project/pom.xml</relativePath>
</parent>     

<artifactId>projectEjb</artifactId>
<packaging>ejb</packaging>

project2 parent pom:

    <modelVersion>4.0.0</modelVersion>
<groupId>com.projectdata</groupId>
<artifactId>projectdata</artifactId>
<version>${project.version}</version>
<packaging>pom</packaging>

project2_ejb pom

    <modelVersion>4.0.0</modelVersion> 
<artifactId>projectdataEjb</artifactId>
<packaging>ejb</packaging>

<parent>
            <groupId>com.projectdata</groupId>
    <artifactId>projectdata</artifactId>
            <version>${project.version}</version>
    <relativePath>../projectdata/pom.xml</relativePath>
    </parent>

我已将project_ejb模块作为依赖项添加到project2_ejb中:

            <dependency>
        <groupId>com.project</groupId>
        <artifactId>projectEjb</artifactId> 
        <scope>provided</scope> 
        <type>ejb</type>
    </dependency>

总而言之,当我构建项目时,一切都很好。但是,当我尝试构建project2时,它出现了maven控制台出现的问题,并说:

 IllegalArgumentException: Illegal character in path at index 79: http://abcsvn01.host.myproject.net/maven/my/inhouse/com/project/project/${project.version}/project-${project.version}.pom -> [Help 1]

值得一提的是,当我删除$ {project.version}并编写常量时,一切正常。但是,为什么我不使用此功能,而maven3已经提供给我。

我将不胜感激任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:2)

引用父级时,必须包含特定版本。您无法使用${project.version}。这是因为您可能只想构建子项,而父项是在repo中。然后你需要指向一个特定的父母。

您孩子发生的事情是它试图找到一个名为project-${project.version}.pom的pom文件,这是因为您没有提供与之相关的明确版本号。

这将有效(将版本更改为您的特定版本)。该版本将由孩子继承。

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.project</groupId>
    <artifactId>project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../project/pom.xml</relativePath>
</parent>     

<artifactId>projectEjb</artifactId>
<packaging>ejb</packaging>

接下来,您需要在projectEjb中提供相关project2_ejb的版本。否则,它将无法知道要使用的projectEjb版本。您的projectproject2无关,因此其版本会有所不同。

添加了版本标记(更改为您的特定版本):

<dependency>
    <groupId>com.project</groupId>
    <artifactId>projectEjb</artifactId>
    <version>1.0-SNAPSHOT</version>
    <scope>provided</scope> 
    <type>ejb</type>
</dependency>