有没有办法重新安排java源文件中的导入

时间:2009-06-17 23:17:38

标签: java

是否有一种简单的方法可以重新排列项目中所有* .java文件的导入?

所以例如:

import java.util.Calendar;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

会变成

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

我们有大约200个源文件,他们需要在订单中进行导入。

最好的方法是什么?我对perl / python / groovy脚本持开放态度......

8 个答案:

答案 0 :(得分:8)

在Eclipse中,在Package Explorer中,右键单击项目的顶级包。选择来源>为项目中的所有文件组织Imports,您已完成。

答案 1 :(得分:2)

eclipse可以帮助您组织项目的导入。

转到源/清理..然后使用配置按钮。这将打开一个过滤的首选项对话框。点击enable project specific settings,然后点击edit按钮。将顶部的个人资料名称更改为“组织导入”等描述性内容,然后转到code organizing标签。选择organize imports复选框。您可以浏览其余选项卡并取消选择其他选项。保存所有内容后,请返回clean up...对话框,然后点击finish


修改

如果您正在使用eclipse路线,请不要忘记您可以根据需要订购导入(com之前的组织等),以及设置“需要之前的导入数量。*”属性。

答案 2 :(得分:2)

Netbeans 6.5.1:Ctrl + Shift + I

答案 3 :(得分:1)

Eclipse有一个开箱即用的选项(Ctrl + Shift + O)。但它可能不容易在很多文件上自动化。

答案 4 :(得分:1)

我认为它们中的任何一个都不能完美运行,因此请务必查看限制。

答案 5 :(得分:1)

在Intellij IDEA中,您可以在设置 - >代码样式 - >导入上设置首选项,然后通过指向项目视图中的目录并选择代码>优化导入来优化项目的导入。

对于问你为什么要这样做的人来说,看看导入可以给你一个给定类的依赖关系的第一个近似值,特别是关于第三方罐子(你可以拿起它们被使用,然后关注他们记录的依赖关系)。有时这很有用,所以你可能想让它们井然有序。但总的来说,我同意,通常不需要关心。

答案 6 :(得分:1)

鉴于您实际上问了这个问题,我假设您没有使用IDE进行编码。如果您使用的是vi,还可以使用内置的行排序功能按字母顺序对导入进行排序。

答案 7 :(得分:1)

遇到问题时,我使用了gawk脚本:

#!/usr/bin/gawk -f
BEGIN {
    importing=0;
}
/^import/ {
    importing=1;
    switch ($2) {
    case /^static/:
        static_imports[++static_lines]=$0;
        break;
    case /^java[.].*/:
        java_imports[++java_lines]=$0;
        break;
    case /^javax[.].*/:
        javax_imports[++javax_lines]=$0;
        break;
    case /^org[.].*/:
        org_imports[++org_lines]=$0;
        break;
    case /^com[.].*/:
        com_imports[++com_lines]=$0;
        break;
    case /^partner[.]company[.].*/:
        partner_imports[++partner_lines]=$0;
        break;
    case /^my[.]company[.].*/:
        my_imports[++my_lines]=$0;
        break;
    default:
        other_imports[++lines]=$0;
    }
    next;
}
/^[[:space:]]*$/ {
    if (importing) {
    next;
    }
}
function printArray(array) {
    asort(array);
    i=0;
    for (i in array) {
    print array[i];
    }
    if (i > 0) {
    print "";
    }
}
    {
        if (importing) {
            importing=0;
            printArray(java_imports);
            printArray(javax_imports);
            printArray(org_imports);
            printArray(com_imports);
            printArray(other_imports);
            printArray(partner_imports);
            printArray(my_imports);
            printArray(static_imports);
        }
        print
    }

我们希望从partner.company。*和my.company。*的导入与其余导入分开,因此需要额外的类别。

使用一个小的Shell脚本将其合并以在多个文件上运行:

#!/bin/sh
for file in "$@" ; do
    `dirname $0`/organize-imports.awk $file > $file.ordered
    mv $file.ordered $file
done

这为我完成了大部分工作,我不得不手动处理一些特殊情况。

然后,我们使用checkstyle来确保没有人再次提交无序导入的任何内容:

[...]
<module name="ImportOrder">
  <property name="groups" value="/^java\./,javax,org,com,*,partner.company,my.company"/>
  <property name="ordered" value="true"/>
  <property name="separated" value="true"/>
  <property name="option" value="bottom"/>
  <property name="sortStaticImportsAlphabetically" value="true"/>
  <property name="separatedStaticGroups" value="true"/>
</module>
[...]