6

继承一个maven项目后,我想检查未使用的属性并删除它们。

我不想采取的一种方法是一一删除它们并看到构建失败。另一种方法是使用自定义脚本计算整个代码库中的出现次数(以确保过滤器和资源的属性不会被错误地视为未使用)。在我这样做之前,我想确保我没有重新发明轮子。

对于此处解释的依赖项,有一种方法可以做到这一点。
我错过的房产有类似的东西吗?还是更好的方法?

谢谢

我正在使用 Maven 3.0.3

4

3 回答 3

2

这有点复杂,但这里有一个 bash 脚本,它将解析 pom.xml 中的属性元素,检查 pom 中是否使用了每个属性,并可选择检查所有项目文件(深度搜索)。

#!/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

该脚本使用来自该线程的 XML 解析代码。

此脚本不会找到 maven 或 maven 插件直接使用的任何属性。它只是在项目文件中查找模式${property} 。

它适用于我的 Mac;您的里程可能会有所不同。

于 2013-11-07T05:57:01.727 回答
1

不幸的是,没有更好的方法来代替手动操作...

于 2012-09-18T14:18:58.797 回答
0

如果您使用的是 IntelliJ,您可以只搜索该属性的用法。只需将光标放在标签中,然后右键单击 -> 查找用法(在我的情况下,键盘快捷键:Alt+F7)。

还没找到更好的方法。

于 2015-09-25T07:33:15.287 回答