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

时间:2012-09-17 05:08:31

标签: java reverse-engineering static-analysis

就我而言,这样做有两个原因:

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

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

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

更新

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

经过一周的试用,我们的代码库中没有未使用的进口产品,而且对这条规则的投诉几乎没有(顺便说一下,checkstyle非常快 - 分析~100KLoc不到一秒钟)

至于使用IDE进行此类分析 - 是的,这是一个不错的选择,但在自动构建中运行此类检查更好。

6 个答案:

答案 0 :(得分:6)

您要做的是static code analysisCheckstyle可以帮到你。如果你正在使用Maven,这个插件将为你做自动化:http://maven.apache.org/plugins/maven-checkstyle-plugin/

您还可以查看qulice.com(我是其开发人员之一),它集成了一些静态分析工具并预先配置它们(包括Checkstyle,PMD,FindBugs)。

答案 1 :(得分:4)

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

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

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

2a上。配置一个不包括com。* stuff

的jre

2B。从jre配置专有api使用的警告是一个错误

但是,您可能仍希望在构建服务器上检查它。在这种情况下,仍然需要配置CheckStyle等更复杂的东西。

答案 2 :(得分:1)

  

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

我使用IntelliJ来组织导入,这会删除所有未使用的导入。您可以使用代码库顶部的一个热键来更正所有导入。 (它还有700多种其他类型的静态检查和修复)

  

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

我有IntelliJ检查代码格式化和导入组织,所以问题从来没有出现过。 ;)

答案 3 :(得分:0)

在计算机科学中,这种分析代码而不执行的过程的名称称为static code analysis

尝试使用IDE,我正在使用Eclipse,它使用黄色下划线标记所有未使用的导入和未使用的变量或方法....

答案 4 :(得分:0)

这些不相关的问题不是吗?如果导入仅存在于本地JDK中的类,则使用 这些导入(只是不满意)。对于这两个问题,我建议在IDE中解决它,以便在编写代码时检测到问题,而不是在签入之前检测到问题(检测越早,修复就越容易......)。

在eclipse中,您可以使用access rules阻止未满足的导入,并通过启用相应的save action在保存源文件时自动修复导入。如果您将这些设置检查到版本控制中,则可以轻松地与团队共享。

答案 5 :(得分:0)

我以相同的方式看到很多评论使用这个IDE或那个IDE。但我所有的朋友都试图了解其中的差异。以编程方式执行某些操作是不同的,使用IDE是不同的。

如果我想要一个程序化的过程,那么建议IDE是没有用的。有人可能会问这个问题,因为他正在构建完整的流程,而这一步是其中的一部分。打开IDE如何帮助他在CI工作的不同机器和操作系统上?

我也在类似的线上构建一个工具。我达到了某种程度,但它以编程方式打开IDE并自动关闭它并修复源代码。但是在Linux中打开它可能对我来说是一个问题。

在回答之前了解某人的观点非常重要。