10
votes

Comment convertir automatiquement tous les fichiers javadoc package.html en fichiers packages-info.java?

Nous utilisons beaucoup de fichiers legacy package.html dans notre projet et nous souhaitons les convertir en fichiers package-info.java . Faire cela manuellement n'est pas une option (trop de fichiers). Y a-t-il un bon moyen d'automatiser cela?

Nous voulons les convertir pour quelques raisons:

  • à partir des spécifications Javadoc: Ce fichier est nouveau dans JDK 5.0, et est préféré sur Package.html.

  • Pour ne pas mélanger les deux types de fichiers dans la même basebase

  • Pour éviter que Intellij / Eclipse construit, mettez ces * fichiers * .html dans nos classes DIRS (et éventuellement dans un bocal binaire de libération) afin qu'ils se comportent comme nos autres ressources HTML normales.


0 commentaires

3 Réponses :


7
votes

Vous devrez peut-être modifier le séparateur de répertoire si vous n'exécutant pas Windows. En outre, la conversion est un peu un piratage, mais cela devrait fonctionner. En dehors de la curiosité, combien de packages avez-vous ce manuel n'est pas une option?

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("\\\\", ".");
    }

}


4 commentaires

Je ne pense pas que ce n'est qu'un cas de renommage - voir télécharger.oracle.com/javase/1.5.0/docs/tooldocs/windows/...


Plutôt vrai. Il devrait être facile de saisir le contenu de l'intermédiaire de l'étiquette du corps HTML, de mettre cela en retrait dans un commentaire Javadoc et d'ajouter le FQN pour le colis. Je vais le mettre en place comme un projet à faire au cours de la semaine prochaine.


C'est un bon début, TNX :) Vous vous demandez simplement s'il couvre tous les cas d'angle, comme {@link ...} {@value} et ce que rien. En outre, comment les personnages d'échappement XML s'échappent-ils à cela? De plus, nous allons probablement couper () autour du truc, aussi bien-vous-même si cela ne trouve pas . Et parfois et sont sur la même ligne.


Quels cas d'angle? Cela n'effectue aucune conversion. Et vous avez raison que cela n'effectue pas correctement l'analyse correctement, mais je doute que l'outil Javadoc a fait une analyse HTML complète sur le paquet.html.



0
votes

Les HREFIJ GUYS ont fait une intention de le faire pour tous les fichiers . Il a été résolu et sera probablement libéré dans la prochaine version Intellij.


0 commentaires

0
votes

Pour ce faire en mode batch dans l'idée:

  • Dans les paramètres, activez le gadget d'inspection "" package.html "peut être converti en" Package-Info.java "inspection"
  • Ouvrez un package.html fichier
  • Vous voyez une bannière corrige l'inspection sur le fichier
  • Cliquez sur l'icône Paramètres à droite sur la bannière
  • Sélectionnez "Exécuter l'inspection sur" >> "Projet entier"
  • Cliquez sur "Convertir en package-Info.java" >> OK
  • Supprimez éventuellement les lignes inappropriées ( sed -i »/ mettre @see et @ @ d" `trouver. -Name" package-info.java "` )

0 commentaires