我怎么能以编程方式找到所有未使用的导入?

Pet*_*iuk 6 java static-analysis reverse-engineering

在我的情况下,有两个原因:

  • 有时人们错误地导入了存在于macbook JDK中但在Linux中不存在的类.这导致在基于Linux的盒子的ci服务器上构建失败.我不经常发生,但是当它确实发生时,我认为应该有一些更聪明的方法来更早地找到它.
  • 未使用的导入会在IDE /代码分析中触发警告.有时候有人需要花时间清理这些东西.即使只在IDE中单击右键,您仍然需要提交更改并确保所有内容都可以正常构建.

我很好奇是否有任何方法可以通过编程方式找到未使用的导入(比如单元测试),如果有的话就在本地失败.

也许由于未使用的导入声音失败,但是如果它为团队整体节省时间,那么这样做很有意义(也希望听到对此的意见).

更新:

我遵循了yegor256的建议,并将checkstyle任务与Sun Code Conventions的最初小部分(未使用的导入就是其中之一)结合起来,如果发现违规,它就会破坏构建.

经过一周的试用,我们的代码库中没有未使用的导入,并且令人惊讶的是没有关于此规则的抱怨(顺便说一下,checkstyle非常快 - 分析~100KLoc只需不到一秒钟)

至于使用IDE进行此类分析 - 是的,这是一个很好的选择,但是作为自动构建的一部分运行这种检查更好.

yeg*_*256 6

您要做的是称为静态代码分析.Checkstyle可以帮到你.如果你正在使用Maven,这个插件将为你做自动化:http://maven.apache.org/plugins/maven-checkstyle-plugin/

你也可以看看qulice.com(我是它的开发者之一),它集成了一些静态分析工具并预先配置它们(包括Checkstyle,PMD,FindBugs).


Chr*_*ian 5

如果您使用的是 eclipse IDE 或 IntelliJ IDEA,您可以将它们配置为

1a. 在保存时或提交之前组织导入/删除未使用的导入(请参阅清理首选项)

1b. 将“未使用的导入”警告切换为错误(请参阅错误设置)

2a. 配置一个不包含 com.* 内容的 jre

2b. 将 jre 中专有 api 使用的警告配置为错误

不过,您可能仍然想在构建服务器上检查这一点。在这种情况下,仍然需要配置 CheckStyle 等更复杂的东西。