目前,我正在调试一个烦人的行人情况,其中一个简单的
mvn dependency:tree
抱怨
The POM for com.bitplan.java:com.bitplan.bobase:jar:${bobase.version} is missing, no dependency information available
因此,似乎某个属性未在某处定义。但是相关的父pom显然具有:
<properties>
<bobase.version>0.0.2</bobase.version>
</properties>
更有趣的是,我什至没有直接用这样的声明引用任何相关文件。
在此灾难中,本地存储库中有一个目录:
./com/bitplan/java/com.bitplan.bobase/${bobase.version}
出现。所以我很好奇,看看是否还有更多这些东西:
cd $HOME/.m2/repository
find . -type d | grep "\\$"
这一次给了我27个结果,例如
./net/sourceforge/htmlcleaner/htmlcleaner/${htmlcleaner.version}
./junit/junit/${junit.version}
./junit/junit/${junit4.version}
./org/hamcrest/hamcrest-all/${hamcrestall.version}
./org/apache/commons/commons-lang3/${commons.version}
./commons-io/commons-io/${commons-io.version}
./commons-io/commons-io/${commons.io.version}
./args4j/args4j/${args4j.version}
我只了解一种情况-commons.io.version一种-这是拼写错误,我已将其修复。所有其他变量都应取消引用ok,并且不应有任何此类目录。
是什么原因导致这种行家行为,以及如何避免?
我只找到一个相关的问题:
但这没有给我有用的提示
调试
find . -type d -name "*\$*" -exec echo -n {} \; -exec stat -f %Sm -t " "%Y-%m-%d {} \;
显示目录的最后修改时间。例如
./junit/junit/${junit.version} 2018-08-22
./junit/junit/${junit4.version} 2017-05-28
所以在我看来,这个问题似乎偶尔会发生。
答案 0 :(得分:1)
mvn deploy
如果pom的版本尚未升级,则必须使用父pom的。
mvn install
是不够的。变量的解析将在存储库的“旧”设置上完成。