Как автоматически преобразовать все файлы javadoc package.html в файлы package-info.java? - PullRequest
10 голосов
/ 28 января 2011

Мы используем много устаревших package.html файлов в нашем проекте, и мы хотим преобразовать их в package-info.java файлы.Делать это вручную не вариант (слишком много файлов).Есть хороший способ автоматизировать это?

Мы хотим преобразовать их по нескольким причинам:

  • Из спецификации javadoc: Этот файл новыйв JDK 5.0 и предпочтительнее, чем package.html.

  • Чтобы не смешивать оба типа файлов в одной кодовой базе

  • Чтобы избежать того, что сборки Intellij / Eclipse помещают эти * .html файлы в каталоги наших классов (и, возможно, в двоичные файлы выпуска), они ведут себя так же, как наши другие обычные html-ресурсы.

Ответы [ 3 ]

7 голосов
/ 28 января 2011

Возможно, вам придется изменить разделитель каталогов, если вы не используете Windows. Кроме того, преобразование немного хак, но оно должно работать. Из любопытства, сколько пакетов у вас есть, это руководство не вариант?

public class Converter {

    public static void main(String[] args) {
        File rootDir = new File(".");
        renamePackageToPackageInfo(rootDir);
    }

    private static void renamePackageToPackageInfo(File dir) {
        File[] files = dir.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return "package.html".equals(name);
            }
        });
        for (File file : files) {
            convertFile(file);
        }
        // now recursively rename all the child directories.
        File[] dirs = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isDirectory();
            }
        });
        for (File subdir : dirs) {
            renamePackageToPackageInfo(subdir);
        }
    }

    private static void convertFile(File html) {
        // determine the FQN package name
        String fqpn = getPackageName(html);

        // check if package-info.java already exists
        File packageInfo = new File(html.getParent(), "package-info.java");
        if (packageInfo.exists()) {
            System.out.println("package-info.java already exists for package: "+fqpn);
            return; 
        }

        // create the i/o streams, and start pumping the data
        try {
            PrintWriter out = new PrintWriter(packageInfo);
            BufferedReader in = new BufferedReader(new FileReader(html));
            out.println("/**");

            // skip over the headers
            while (true) {
                String line = in.readLine();
                if (line.equalsIgnoreCase("<BODY>"))
                    break;
            }
            // now pump the file into the package-info.java file
            while (true) {
                String line = in.readLine();
                if (line.equalsIgnoreCase("</BODY>"))
                    break;
                out.println(" * " + line);
            }

            out.println("*/");
            out.println("package "+fqpn+";");
            out.close();
            in.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // queue the package.html file for deletion
        //html.deleteOnExit();
    }

    private static String getPackageName(File file) {
        StringBuilder path = new StringBuilder(file.getParent());
        // trim the first two characters (./ or .\)
        path.delete(0, 2);
        // then convert all separators into . (HACK: should use directory separator property)
        return path.toString().replaceAll("\\\\", ".");
    }

}
0 голосов
/ 23 мая 2018

Чтобы сделать это в пакетном режиме в IDEA:

  • В настройках активируйте инспекционный гаджет "" package.html "может быть преобразован в" package-info.java 'инспекция "
  • Открыть package.html файл
  • Вы видите баннер, фиксирующий проверку поверх файла
  • Нажмите на значок настроек справа на баннере
  • Выбрать«Запустить проверку» >> «Весь проект»
  • Нажмите «Преобразовать в package-info.java» >> ОК
  • При желании удалите неподходящие строки (sed -i "/Put @see and @since/d" `find . -name "package-info.java"`)
0 голосов
/ 16 февраля 2011

Ребята из IntelliJ сделали намерение сделать это для всех файлов . Он был решен и, вероятно, будет выпущен в следующем выпуске IntelliJ.

...