簡體   English   中英

如何自動將所有javadoc package.html文件轉換為package-info.java文件?

[英]How do I automatically convert all javadoc package.html files into package-info.java files?

我們在項目中使用了許多舊的package.html文件,我們希望將它們轉換為package-info.java文件。 手動執行操作不是一種選擇(文件過多)。 有沒有一種自動化的好方法?

我們要轉換它們有兩個原因:

  • 根據javadoc規范: 該文件是JDK 5.0中的新增文件,相對於package.html而言,它是首選文件。

  • 不將兩種類型的文件混合在同一代碼庫中

  • 為了避免Intellij / Eclipse構建,請將這些* .html文件放在我們的類目錄中(並可能放在發行版的二進制jar中),以便它們的行為類似於我們的其他常規html資源。

如果您沒有運行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("\\\\", ".");
    }

}

IntelliJ伙計們打算對所有文件執行此操作 它已解決,可能會在下一個IntelliJ版本中發布。

要在IDEA中以批處理方式執行此操作,請執行以下操作:

  • 在設置中,激活檢查小工具“'package.html'可能會轉換為'package-info.java'檢查”
  • 打開一個package.html文件
  • 您會看到橫幅將檢查結果固定在文件頂部
  • 單擊橫幅右側的設置圖標
  • 選擇“運行檢查” >>“整個​​項目”
  • 單擊“轉換為package-info.java” >>確定
  • (可選)刪除不適當的行( sed -i "/Put @see and @since/d" `find . -name "package-info.java"`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM