Eclipse:mamp在子pom中为父pom中的自定义属性构建错误

时间:2015-02-03 14:10:21

标签: java eclipse maven

我正在开展基于maven的项目。我有父模块的父pom文件和子模块的子pom文件。在父模块中,我使用自定义属性(databaseType),并在父pom中声明。

<properties>
    <databaseType>${databaseType}</databaseType>
</properties>

在构建应用程序时,我将其作为-D参数传递并成功构建。但是,当我在eclipse中创建一个maven项目时,我在child pom中遇到错误(尽管maven构建正好发生)

Project build error: Resolving expression: '${databaseType}': Detected 
the following recursive expression cycle in 'databaseType': [databaseType]

可能是什么问题?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

问题是您传递给-D的参数和属性具有相同的名称。如果你提供参数,那么它是有效的,因为当maven解析表达式时,它首先通过-D databaseType找到提供的参数,然后将该值赋给<databaseType>属性。如果缺少参数,maven会尝试解析表达式,但只能在同一个pom中找到<databaseType>属性的定义,从而创建一个圆。

Maven和Eclipse要么使用不同的方法来解决变量(这可能是eclipse中的错误),要么是由于一些错误配置造成的。我猜想用-D传递变量因为某种原因在Eclipse中无效。

该示例实际上并没有做任何事情。如果${databaseType}可用,则不需要再次显式定义属性。或者如果有意义的话,在父pom中使用不同的属性名称,如下所示:

<properties>
    <databaseType>${defaultDatabaseType}</databaseType>
</properties>

如果缺少参数,这无济于事。我会使用enforcer插件来确保属性已定义。