我无法从Maven模块访问父级properties
部分中定义的属性。
事实上,当我在下面启动构建时,warName是默认构建。
这是父Pom
....
<modelVersion>4.0.0</modelVersion>
<groupId>com.speed.pms</groupId>
<artifactId>PMS-Main</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<name>PMS Main Build Project</name>
<properties>
<context-root>PMS-CUSTOM</context-root>
</properties>
<modules>
<module>../PMS-WEB</module>
</modules>
....
这是模块
...
<parent>
<groupId>com.speed.pms</groupId>
<artifactId>PMS-Main</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>PMS-WEB</artifactId>
<packaging>war</packaging>
<name>PMS-WEB Webapp</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<web.resource.dir>src/main/webapp</web.resource.dir>
</properties>
<build>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<!-- Context root from parent project -->
<warName>${context-root}</warName>
<webResources>
<resource>
<directory>${web.resource.dir}</directory>
</resource>
</webResources>
</configuration>
</plugin>
....
虽然我可以使用$ {project.parent.arctifactId}属性。 我也尝试$ {project.parent.properties.context-root}但没有成功。它应该很简单,但我不明白哪个是我的错误?不应该是从Module中父级继承的属性吗?
答案 0 :(得分:2)
Maven用户列表中的人员帮助我找到解决方案。我发布了回复
而你父母pom中的../PMS-WEB部分 引用同一目录中的孩子,你的 /未定义,因此期望父母 是一级,而不是同一级别。
我在
中更改子模块父节<parent>
<groupId>com.speed.pms</groupId>
<artifactId>PMS-Main</artifactId>
<version>1.0.0</version>
<relativePath>../PMS-Main/</relativePath>
</parent>
and everithings有效。
感谢milos
达维德
答案 1 :(得分:0)
还有另一种解决方案。 Maven 3在第一步中在一个级别目录中查找父pom.xml
。如果他们找不到此文件,则尝试从存储库中提取pom.xml
。
所以解决方法是在子项运行maven之前安装父项目。