有没有办法让Guice Grapher工作?

Jef*_*rod 9 java visualization dependency-injection graph guice

Guice grapher实用程序中存在一个错误,导致大多数或所有图形都呈现损坏.是否有解决方法或修复此问题?

Jef*_*rod 16

我稍微修改了@ wuppi的答案,也隐藏了类路径和长随机名称注释,使图形更加紧凑和可读.他编辑的代码的答案如下:

我发现这个实用程序方法非常有用,它从来没有为我打造错误的图形.

关于style=invisbug:Guice grapher插件生成一个点文件,其中一些clases的样式是不可见的.在replaceAll()周围,在贴在下面的方法工作.其余代码与Guice示例几乎相同.

我已经整合了Scot对Guice 4.x的修复,其中包括Tim的答案:

public class Grapher {
    public static void main(String[] args) throws Exception {
        Grapher.graph4("filename.dot", Guice.createInjector(new MyModule()));
    }
    public static void graph4(String filename, Injector inj) throws Exception {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PrintWriter out = new PrintWriter(baos);

        Injector injector = Guice.createInjector(new GraphvizModule());
        GraphvizGrapher renderer = injector.getInstance(GraphvizGrapher.class);
        renderer.setOut(out);
        renderer.setRankdir("TB");
        renderer.graph(inj);    

        out = new PrintWriter(new File(filename), "UTF-8");
        String s = baos.toString("UTF-8");
        s = fixGrapherBug(s);
        s = hideClassPaths(s);
        out.write(s);
        out.close();
    }

    public static String hideClassPaths(String s) {
        s = s.replaceAll("\\w[a-z\\d_\\.]+\\.([A-Z][A-Za-z\\d_\\$]*)", "$1");
        s = s.replaceAll("value=[\\w-]+", "random");
        return s;
    }

    public static String fixGrapherBug(String s) {
        s = s.replaceAll("style=invis", "style=solid");
        s = s.replaceAll("margin=(\\S+), ", " margin=\"$1\", ");
        return s;
    }
}
Run Code Online (Sandbox Code Playgroud)

当然你可以自由生成任何其他文件名:)


Sco*_*cot 5

结合Jeff和Tim的解决方案的Guice 4.x示例:

public class Grapher {
    public static void main(String[] args) throws Exception {
        Grapher.graph4("filename.dot", Guice.createInjector(new MyModule()));
    }
    public static void graph4(String filename, Injector inj) throws Exception {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PrintWriter out = new PrintWriter(baos);

        Injector injector = Guice.createInjector(new GraphvizModule());
        GraphvizGrapher renderer = injector.getInstance(GraphvizGrapher.class);
        renderer.setOut(out);
        renderer.setRankdir("TB");
        renderer.graph(inj);    

        out = new PrintWriter(new File(filename), "UTF-8");
        String s = baos.toString("UTF-8");
        s = fixGrapherBug(s);
        s = hideClassPaths(s);
        out.write(s);
        out.close();
    }

    public static String hideClassPaths(String s) {
        s = s.replaceAll("\\w[a-z\\d_\\.]+\\.([A-Z][A-Za-z\\d_]*)", "");
        s = s.replaceAll("value=[\\w-]+", "random");
        return s;
    }

    public static String fixGrapherBug(String s) {
        s = s.replaceAll("style=invis", "style=solid");
        s = s.replaceAll("margin=(\\S+), ", " margin=\"$1\", ");
        return s;
    }
}
Run Code Online (Sandbox Code Playgroud)