父定义中的属性在我的 Mac osx 上的 intellij maven 中是禁止的



我有一个关于我的MAC Intellij上的maven配置的问题。我收到一个错误,指出子 POM 的父标记中存在 ${a-web.version}"禁止父定义中的属性".xml并且属性在父 POM.xml 中定义。 但是同样的配置在我的Windows Intellij上运行良好。

下面是我的父母POM.xml。

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>***</groupId>
<artifactId>a-web</artifactId>
<packaging>pom</packaging>
<version>${a-web.version}</version>
<name>a-web project</name>
<url>http://***</url>
<properties>
<a-web.version>1.0.0</a-web.version>
</properties>
<modules>
<module>a-core</module>
<module>a-web</module>
</modules>
</project>

这是我的子POM.xml配置父块。

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>a-web</artifactId>
<groupId>***</groupId>
<version>${a-web.version}</version>
<relativePath>../</relativePath>
</parent>
<artifactId>aweb-web</artifactId>
<version>${a-web.version}</version>
<packaging>war</packaging>
<name>aweb-web</name>
</project>

我已经尝试了很多来自stackoverflow的方法,但没有人可以修复它。我想知道为什么这个Maven配置在Mac和Windows中有不同的行为以及如何修复它。

当项目在我刚刚拉取的提交中开始使用父版本属性时,我遇到了非常类似的情况。该项目不会建造,感觉"进口不良"。试图显示有效的pom失败了,IDEA没有提供任何细节。

正如@khmarbaise在评论中指出的[1],在 maven<parent>声明中使用属性有一些限制 - 最值得注意的是需要 maven 3.5+。IDEA 可能没有足够新的 maven(我安装的最新 IDEA 中的捆绑包太旧了(,所以我不得不使用> Maven> Maven 主目录中>构建、执行、部署>构建工具的设置切换到本地安装。一旦指向较新版本,它就不会立即开始工作 - 一些重新启动/重建/重新导入例程导致新设置有效,项目成功导入并再次构建。

尽管 maven 版本要求在 pom 中强制执行,但它并没有导致 IDEA 抱怨它使用的 maven 版本是旧的。缺乏任何细节,IDEA未能使用它使用的maven检查项目也无济于事。现在,当其他一切正常时,它仍然在pom文件中显示"禁止父定义中的属性"。

[1] https://maven.apache.org/maven-ci-friendly.html

>在父pom中设置属性revision.xml然后将其继承到子级中,为我解决了这个问题。

<groupId>com.java</groupId>
<artifactId>test</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<name>Test</name>
<description>Demo project for Spring Boot</description>
<modules>
<module>backend</module>
<module>frontend</module>
</modules>
<properties>
<revision>1.0.0-SNAPSHOT</revision>
</properties>

在孩子的绒球中.xml:

<parent>
<artifactId>com.java</artifactId>
<groupId>test</groupId>
<version>${revision}</version>
</parent>
<artifactId>backend</artifactId>

我使用Maven 3.6.1

在想法 18.2 中为我工作:

1(不要使用嵌入式Maven。从官方网站安装Maven!它帮助我 (^_^)

2(您可以尝试在子pom中添加groupId,将<groupId>com.iqiyi.lego.web</groupId>放在第<artifactId>legoweb-web</artifactId>行之前。

试试这个代码:

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>lego-web</artifactId>
<groupId>com.iqiyi.lego.web</groupId>
<version>${lego-web.version}</version>
<relativePath>../</relativePath>
</parent>
**<groupId>com.iqiyi.lego.web</groupId>**
<artifactId>legoweb-web</artifactId>
<version>${lego-web.version}</version>
<packaging>war</packaging>
<name>legoweb-web</name>
</project>

因为你的maven版本低于3.5.2,所以尽量使用>=3.5.2的版本,当ide IntelliJ Idea捆绑的maven版本低于3.5.2时,尝试下载zip集使用自己的maven而不是捆绑的。

顺便说一句,虽然低于3.5.2的Maven在IntelliJ的想法中显示错误,但它工作正常,你可以"MVN包"成功。

我认为这是因为当您将编译的 jar 推送到中央 maven 或私有 maven(例如 nexus(时,您可以在子项目的META-INF/maven/xxxxx/pom.xml中找到版本是

<version>${lego-web.version}</version>

不是真正的价值<version>1.0.0</version>.so 当你想发布一个 jar 时,你无法获得真正的版本

这是 IntelliJ IDEA bug。

至少在IntelliJ IDEA 2019.2(终极版(中 版本 #IU-192.5728.98,构建于 2019 年 7 月 23 日

最新更新