如何移除Maven pom.xml文件中没用的属性

在使用Maven管理项目时, 经常会增加一些属性在pom.xml文件中。 抽取这些属性的好处之一就是方便集中管理,可以容易升级依赖的版本。 有些依赖因为代码的重构而丢弃了,但是它使用的属性可能会遗漏在properties中。 如果在几十条的属性中找到不用的属性, 这是一个问题。
目前没有maven插件可以做这个How to find unused properties in a pom. 不过上面的链接提供了一个脚本如何查找到未用的属性, 然后手工删除。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/bash
cmd=$(basename $0)
read_dom () {
local IFS=\>
read -d \< entity content
local retval=$?
tag=${entity%% *}
attr=${entity#* }
return $retval
}
parse_dom () {
# uncomment this line to access element attributes as variables
#eval local $attr
if [[ $tag = "!--" ]]; then # !-- is a comment
return
elif [[ $tag = "properties" ]]; then
in=true
elif [[ $tag = "/properties" ]]; then
in=
elif [[ "$in" && $tag != /* ]]; then #does not start with slash */
echo $tag
fi
}
unused_terms () {
file=$1
while read p; do
grep -m 1 -qe "\${$p}" $file
if [[ $? == 1 ]]; then echo $p; fi
done
}
unused_terms_dir () {
dir=$1
while read p; do
unused_term_find $dir $p
done
}
unused_term_find () {
dir=$1
p=$2
echo -n "$p..."
find $dir -type f | xargs grep -m 1 -qe "\${$p}" 2> /dev/null
if [[ $? == 0 ]]; then
echo -ne "\r$(tput el)"
else
echo -e "\b\b\b "
fi
}
if [[ -z $1 ]]; then
echo "Usage: $cmd [-d] <pom-file>"
exit
fi
if [[ $1 == "-d" ]]; then
deep=true
shift
fi
file=$1
dir=$(dirname $1)
if [ $deep ]; then
while read_dom; do
parse_dom
done < $file | unused_terms $file | unused_terms_dir $dir
else
while read_dom; do
parse_dom
done < $file | unused_terms $file
fi

有趣的是, 作者居然是我们公司的

, 写这篇文章之前都没有发现。

另外, 再推荐另外一个好用的插件: maven-sortpom-plugin, 它可以帮助你排序你的依赖和属性。

1
2
mvn sortpom:sort
mvn sortpom:verify

另外提供一个Spring最佳实践中用到的pom.xml: