Java 清除消息.properties

Java 清除消息.properties,java,messages,Java,Messages,有没有办法自动清理/显示messages.properties文件中未使用的属性,该文件是一个巨大的atm文件,但系统发生了很大变化,其中一些没有被使用,手工操作需要很长时间的代码检查,我个人不喜欢浪费,有什么建议吗 把你放在上下文中,我正在处理一个seam项目,但这可能对其他java项目有效,我没有找到任何用于此的工具,我不相信它们的存在是100%正确的。您可以编写自己的解析器来搜索所有源文件中的所有消息键。找到它们后,可以从列表中删除,以加快进度 剩余的应手动验证 但是,这将节省大量时间。我

有没有办法自动清理/显示messages.properties文件中未使用的属性,该文件是一个巨大的atm文件,但系统发生了很大变化,其中一些没有被使用,手工操作需要很长时间的代码检查,我个人不喜欢浪费,有什么建议吗


把你放在上下文中,我正在处理一个seam项目,但这可能对其他java项目有效,我没有找到任何用于此的工具,我不相信它们的存在是100%正确的。您可以编写自己的解析器来搜索所有源文件中的所有消息键。找到它们后,可以从列表中删除,以加快进度

剩余的应手动验证


但是,这将节省大量时间。

我没有找到任何用于此的工具,我不相信他们的存在是100%正确的。您可以编写自己的解析器来搜索所有源文件中的所有消息键。找到它们后,可以从列表中删除,以加快进度

剩余的应手动验证


但是,这将节省大量时间。

不,没有。是的,这确实是你获得报酬的任务/责任之一

为了便于现在和将来的维护,我自己在消息键控中使用了一种面向树的约定,这样我(和我的继任者)就可以很容易地在视图端关联消息的位置/使用。有点像
pagename.parentid.childtype.childname.attributename

例如,一个
home.login.label.username.tooltip
键,它指向一个
home.jsp
,带有:

<form id="login">
    <label for="username" title="${text['home.login.label.username.tooltip']}">

坚持这一惯例,你会发现维护这一切变得更加容易


记录属性访问并不是一个快速的帮助。你最终会浪费更多的时间。

不,没有。是的,这确实是你获得报酬的任务/责任之一

为了便于现在和将来的维护,我自己在消息键控中使用了一种面向树的约定,这样我(和我的继任者)就可以很容易地在视图端关联消息的位置/使用。有点像
pagename.parentid.childtype.childname.attributename

例如,一个
home.login.label.username.tooltip
键,它指向一个
home.jsp
,带有:

<form id="login">
    <label for="username" title="${text['home.login.label.username.tooltip']}">

坚持这一惯例,你会发现维护这一切变得更加容易


记录属性访问并不是一个快速的帮助。你会浪费更多的时间。

我认为应该在
属性
对象周围编写一个包装器,这样你就可以插入(即记录)对该对象中属性的所有访问。通过正常操作运行程序,然后分析日志,找出实际使用的属性


作为一种改进,您可以使用一个跟踪自身使用情况的计数和一个根据需要将所有使用过的属性写入文件的方法来扩展Properties对象。这将使您不必再摆弄日志文件。

我认为应该在
属性
对象周围编写一个包装器,这样您就可以插入(即记录)对该对象中属性的所有访问。通过正常操作运行程序,然后分析日志,找出实际使用的属性


作为一种改进,您可以使用一个跟踪自身使用情况的计数和一个根据需要将所有使用过的属性写入文件的方法来扩展Properties对象。这将使您不必修改日志文件。

如果您可以访问
bash
(在Windows上,如果您安装了Git,在Mac/Linux上,您已经安装了它,您就可以访问了),那么这个小小的一行程序可以在缩小搜索范围方面做得相当不错:

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 

。。。它会认为属性
foo.bar.baz
没有出现在源目录中。但正如我所说,它有助于缩小搜索范围。

如果您可以访问
bash
(在Windows上,如果您安装了Git,在Mac/Linux上,您已经安装了它,您就可以这样做了),那么这个小小的一行程序可以缩小搜索范围:

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 

。。。它会认为属性
foo.bar.baz
没有出现在源目录中。但正如我所说,它有助于缩小搜索范围。

我的这个开源项目改变了语言文件的概念。您将维护一个包含所有翻译的结构化XML文件。 i18nmaven插件将自动创建属性文件。您还可以创建一个Java访问器类来访问密钥。您可以使用其他一些代码检查工具来查找未使用的访问器方法。
请参阅:

我的这个开源项目改变了语言文件的概念。您将维护一个包含所有翻译的结构化XML文件。 i18nmaven插件将自动创建属性文件。您还可以创建一个Java访问器类来访问密钥。您可以使用其他一些代码检查工具来查找未使用的访问器方法。
请参阅:

这是我将使用的方法,但有一件事它没有说明,即消息键是通过使用其他消息键动态构造的,对吗?在这种情况下,如果使用了“子键”,那么构造的消息也应该保留。我遗漏了什么吗?这是我将使用的方法,但有一件事它不能解释,即消息键是通过使用其他消息键动态构造的,对吗?在这种情况下,如果使用了“子键”,那么构造的消息也应该保留。我遗漏了什么吗?除了从数量上看,属性的最大用途是消息外部化(考虑到询问者的文件名,
messages.properties
),其中很大一部分通常是错误消息