有没有办法在messages.properties文件中自动清理/显示未使用的属性,该文件是巨大的atm,但是系统已经发生了很大变化,其中一些没有被使用,手工完成就需要长时间的代码检查,个人我不喜欢浪费,任何建议?
让你进入上下文我正在研究一个接缝项目,但这可能对其他java项目有效
答案 0 :(得分:2)
不,没有。是的,这真的是你得到的任务/责任之一。
为了便于现在和将来的维护,我自己在消息键控中使用面向树的约定,这样我(和我的继承者)可以轻松地关联视图端消息的位置/使用。有点像pagename.parentid.childtype.childname.attributename
E.g。一个home.login.label.username.tooltip
键,指向home.jsp
:
<form id="login">
<label for="username" title="${text['home.login.label.username.tooltip']}">
保持这种惯例一致,你会发现维持这一切变得更加容易。
记录属性访问不会是一个快速的帮助。你最终会浪费更多时间。
答案 1 :(得分:2)
我认为可行的方法是在Properties
对象周围编写一个包装器,以便您可以检测(即记录)对该对象中属性的所有访问。通过正常操作运行程序,然后分析日志以找出实际使用的属性。
作为一种改进,您可以使用一个跟踪其自身使用情况的计数器来扩展Properties对象,以及一种根据需要将所有使用过的属性写入文件的方法。这样可以避免不必使用日志文件。
答案 2 :(得分:1)
我没有找到任何工具,我不相信他们的存在100%正确。您可以编写自己的解析器,搜索所有源文件以查找所有消息键。当您找到它们时,您可以从列表中删除,以加快进度。
剩下的应该手动验证。
然而,这将节省大量时间。
答案 3 :(得分:0)
如果你有权访问bash
(在Windows上,如果你在Mac / Linux上安装Git,那么你就已经拥有了它),那么这个小小的单行可以做一个不错的工作来缩小范围搜索:
YOURPROPS=messages.properties
SRCDIR=src
egrep -v "($(
cut -s -d = -f 1 <$YOURPROPS |
while read prop; do
grep -q -d recurse '"'"$prop"'"' $SRCDIR && echo "$prop";
done | xargs echo | sed 's/ /|/g'))" $YOURPROPS | cut -s -d = -f
(这假设所有属性都写成name=value
,等号周围没有多余的空格,你使用等号而不是冒号或空格用于分隔符等。)
它将输出$SRCDIR
中任何文件中未出现在双引号中的所有属性。这意味着它可能会产生一些误报。例如,如果你有这样的东西:
String msg = I18n.getString("foo.bar." + "baz");
...它会认为属性foo.bar.baz
没有出现在源目录中。但正如我所说,它有助于缩小搜索范围。
答案 4 :(得分:0)
我的这个开源项目转变了语言文件的概念。您将维护包含所有翻译的结构化XML文件。 然后i18n-maven-plugin会自动创建属性文件。您还可以创建Java访问器类来访问密钥。您可以使用其他一些代码检查工具来查找未使用的访问器方法。 请参阅:https://github.com/hoereth/i18n-maven-plugin/blob/master/doc/README_JAVA.md