我在尝试在3级多模块项目中运行maven时遇到了一些问题。
第一级是超级pom,它定义了解决任务。它位于外部存储库中。 第二个是指超级pom,只包括子模块的定义。假设它在/ project中 第三级包含子模块,其项目位于/ project / moduleN。
在第一级,AntRun任务包括对“$ {project.basedir}”的调用。
当我使用maven时,我会转到第二级pom文件夹并运行mvn clean install。
因为它只包含子模块,所以它会尝试编译它们,但是$ {project.basedir}已经被评估为/ project,而不是/ project / moduleN。
我想推迟对这些表达式的评估,以便用我的子模块中的值替换它们,而不是从包含它们的pom中替换它们,但我找不到这样做的方法。
以下是POM文件的摘录,以了解正在发生的事情:
超级POM
<groupId>org.example</groupId>
<artifactId>superpom</artifactId>
<packaging>pom</packaging>
...
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
...
<exec dir="${project.basedir}" ...></exec>
</plugin>
</plugins>
项目POM
<parent>
<groupId>org.example</groupId>
<artifactId>superpom</artifactId>
</parent>
<groupId>org.example</groupId>
<artifactId>projectPom</artifactId>
<packaging>pom</packaging>
<modules>
<module>module1</module>
<module>module2</module>
</modules>
模块POM
<parent>
<groupId>org.example</groupId>
<artifactId>projectPom</artifactId>
</parent>
<groupId>org.example</groupId>
<artifactId>moduleNPom</artifactId>
<packaging>jar</packaging>