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

王昭辉*_*王昭辉 12 java macos maven

我对我的MAC Intellij上的maven配置有疑问.我得到一个错误,即父级定义中的$ {lego-web.version}"属性被禁止"在子级POM.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>
Run Code Online (Sandbox Code Playgroud)

这是我配置父块的子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>
Run Code Online (Sandbox Code Playgroud)

我已经尝试了stackoverflow中的许多方法,但没有人能解决它.我想知道为什么这个Maven配置在Mac和Windows中有不同的行为以及如何解决它.

Oli*_*dža 15

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

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

尽管maven版本的要求是在pom中强制执行的,但它并没有让IDEA抱怨它使用的maven版本已经过时了.缺乏任何IDEA未能用它使用的maven检查项目的细节也没有帮助.现在当其他所有工作时,它仍然在pom文件中说"父类定义中的属性被禁止".

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

  • 是的,我看到的是相同的...一切正常,但编辑器抱怨“禁止在父定义中使用属性”。我想编辑器需要改进才能理解Maven的这一新功能,仅此而已。 (2认同)

Pet*_* S. 7

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

<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>
Run Code Online (Sandbox Code Playgroud)

在孩子的 pom.xml 中:

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

<artifactId>backend</artifactId>
Run Code Online (Sandbox Code Playgroud)

我使用Maven 3.6.1


小智 1

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

<version>${lego-web.version}</version>
Run Code Online (Sandbox Code Playgroud)

不是真正的价值<version>1.0.0</version>。所以当你想发布单个jar时,你无法获得真实的版本