我有一个如下的父母pom。
<?xml version="1.0" encoding="UTF-8"?>
<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>com.parent.pom</groupId>
<artifactId>parent-pom</artifactId>
<version>1.0.0</version>
<name>parentpom</name>
<packaging>pom</packaging>
<properties>
<parentversion>1.0.0</parentversion>
</properties>
</project>
我的孩子就像。
<?xml version="1.0" encoding="UTF-8"?>
<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>
<groupId>com.parent.pom</groupId>
<artifactId>parent-pom</artifactId>
<version>${parentversion}</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.child.pom</groupId>
<artifactId>child-pom</artifactId>
<version>2.0.0</version>
<name>Childpom</name>
<packaging>pom</packaging>
</project>
我的文件夹结构就像
POM-test(具有父pom的根文件夹) ---孩子(有孩子pom)
当我在我的孩子中运行mvn clean install时会得到如下的异常。
ERROR] The build could not read 1 project -> [Help 1]
ERROR]
ERROR] The project com.child.pom:child-pom:2.0.0 (C:\Users\kk\Desktop\POM-Test\child\pom.xml) has 1 error
ERROR] Non-resolvable parent POM: Could not transfer artifact com.parent.pom:parent-pom:pom:${parentversion} from/to central (http://repo.maven.apache.org/
maven2): Illegal character in path at index 63: http://repo.maven.apache.org/maven2/com/parent/pom/parent-pom/${parentversion}/parent-pom-${parentversion}.pom
and 'parent.relativePath' points at wrong local POM @ line 5, column 9 -> [Help 2
为什么我无法安装此pom?
答案 0 :(得分:1)
您不能在<parent>
部分
Maven需要在处理构建之前加载父级来设置所有属性(对于项目继承等)
每个项目都由groupId,artifactId和version标识。在父节中,您需要设置这3个属性以明确标识父节点。
要在所有pom上轻松更新版本,请考虑使用release:update-versions
plugin或versions:set
goal
修改强> 请参阅另一个关于类似问题的帖子:Maven project version inheritance - do I have to specify the parent version?
答案 1 :(得分:1)
如果您愿意,可以在版本with Maven 3.2.1中使用属性${revision}
,${sha1}
和${changelist}
。
所以你可以像这样使用它:
<groupId>com.soebes.examples.j2ee</groupId>
<artifactId>parent</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<modules>
<module>child</module>
</modules>
你可以在这样的孩子中使用它:
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.soebes.examples.j2ee</groupId>
<artifactId>parent</artifactId>
<version>${revision}</version>
</parent>
<artifactId>child</artifactId>
现在你必须像这样打电话给Maven:
mvn -Drevision=1.2.3-SNAPSHOT clean package
mvn -Drevision=1.2.3 clean package
您可以查看full example here.。如果您需要更改版本,我建议使用versions-maven-plugin将您的版本中的版本更改为您喜欢的任何版本(例如在您的CI解决方案中),或者在发布版本时,您可以使用maven-release-plugin处理这个。对于开发,您应该使用类似:1.2.3.45-SNAPSHOT
(强调-SNAPSHOT
)来确定当前正在开发中。
此外,不需要给定的<relativePath>../pom.xml</relatvePath>
,因为它是默认值,因此可以省略。
非常重要。如果你有一个像你所描述的结构,那么孩子应该总是和父母一样(如果像给定的例子那样建立多模块),或者父母(公司pom)应该是一个单独的项目,这也意味着一个单独的git库。此外,对于其他解释,请看这里:https://stackoverflow.com/a/35057833/296328