我正在开展基于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]
可能是什么问题?任何帮助表示赞赏。
答案 0 :(得分:1)
问题是您传递给-D
的参数和属性具有相同的名称。如果你提供参数,那么它是有效的,因为当maven解析表达式时,它首先通过-D databaseType
找到提供的参数,然后将该值赋给<databaseType>
属性。如果缺少参数,maven会尝试解析表达式,但只能在同一个pom中找到<databaseType>
属性的定义,从而创建一个圆。
Maven和Eclipse要么使用不同的方法来解决变量(这可能是eclipse中的错误),要么是由于一些错误配置造成的。我猜想用-D
传递变量因为某种原因在Eclipse中无效。
该示例实际上并没有做任何事情。如果${databaseType}
可用,则不需要再次显式定义属性。或者如果有意义的话,在父pom中使用不同的属性名称,如下所示:
<properties>
<databaseType>${defaultDatabaseType}</databaseType>
</properties>
如果缺少参数,这无济于事。我会使用enforcer插件来确保属性已定义。