我有一个具有以下结构的Maven项目:
模块A(父级),子模块B和子模块C
在父pom.xml中,我使用一个变量来设置所有项目的版本:
...
<version>${revision}</version>
...
<properties>
<revision>1.1</revision>
</properties>
...
<modules>
<module>moduleB</module>
<module>moduleC</module>
</modules>
</project>
模块C是我的分发软件包,它使用shade插件将所有内容包装到一个罐中。
在子模块中,我将父级设置如下:
<parent>
<groupId>group</groupId>
<artifactId>moduleA</artifactId>
<version>${revision}</version>
</parent>
现在我想在另一个项目中使用模块C,但是这样做时只会出现以下错误:
无法对项目newProject执行目标:无法解析项目组的依赖项:newProject:jar:0.0.1-SNAPSHOT:无法在组:moduleC:jar:1.1上收集依赖项:无法读取组的工件描述符: moduleC:jar:1.1:在联系(NEXUS_URL)中找不到工件组:父项:pom:$ {revision}
我认为问题是,当将模块C引用为依赖项时,变量值未填写。我该如何解决这个问题?在构建并强制更新所有工件之前,我已经尝试清理项目,但是没有成功。
答案 0 :(得分:1)
Maven希望所有模块都具有硬版本。
为避免编辑大量的pom,请使用版本插件,例如:
mvn versions:set -DnewVersion=1.0.1
如果在父项上运行上述命令,它将修复所有子项。
有关文档,请参见here。
答案 1 :(得分:0)
感谢hadu.mansouri的评论,我可以解决它。我使用flatten-maven-plugin来平整pom.xml文件。但是,shade插件似乎有问题,因为阴影模块是唯一无法使用的模块。因此,在发布的阴影模块pom中说:
const createdStock = require('../../modified');
router.get('/new/:stockName', async (req,res) => {
var stock = await createdStock(req.params.stockName);
setTimeout(() => {
console.log(stock);
}, 2000);
用于引用父级。我使用了评论中链接的文章的方法。在那里,使用了此扩展名:https://github.com/jcgay/unique-revision-maven-filtering
使用Maven而不是flatten-maven-plugin,Maven可以使用single version属性正确地构建多模块项目,并且我也可以在其他项目中正确使用阴影模块。