我对我的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
在父级 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时,你无法获得真实的版本
| 归档时间: |
|
| 查看次数: |
11980 次 |
| 最近记录: |