3

我有如下概述的多模块 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 样本

“项目”父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>

项目2父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 已经为我提供时不使用此功能。

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

4

1 回答 1

2

当您引用父级时,您必须包含特定版本。你不能使用${project.version}. 这是因为您可能只想构建孩子,而父母在回购中。然后,您将需要指向特定的父级。

你的孩子发生的事情是它试图找到一个名为的 pom 文件project-${project.version}.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>
于 2012-10-03T05:58:54.517 回答