Hay un bug en la herramienta Guice grapher que hace que la mayoría o todos los gráficos se vean dañados. ¿Hay alguna solución o solución para esto?¿Hay alguna manera de hacer que Guice Grapher trabaje?
Respuesta
Modifiqué ligeramente la respuesta de @ wuppi para también ocultar las rutas de clases y las anotaciones largas de nombres aleatorios para hacer que el gráfico sea mucho más compacto y legible. Su answer con el código editado a continuación:
Me parece que este método de utilidad es bastante útil y nunca me dio gráficamente gráficos incorrectos.
En cuanto al error style=invis
: El complemento Guifo grapher genera un archivo de puntos, que hace que algunas clases sean invisibles. El replaceAll()
en el método publicado a continuación funciona alrededor de eso. El resto del código es casi el mismo del ejemplo de Guice.
he incorporado solución de Scot para Guice 4.x, que incluía la respuesta de Tim así:
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;
}
}
Por supuesto que son libres para generar cualquier otro Nombre del archivo :)
Cuando se utiliza la mayor parte versión reciente de GraphViz, me parece que la siguiente sustitución también ayuda (de lo contrario GraphViz se niega a abrir el archivo):
s.replaceAll(" margin=(\\S+), ", " margin=\"$1\", ")
Guice 4.x ejemplo la incorporación de Jeff y Tim SOLUTIO ns:
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;
}
}
Corrección de errores pequeños: en la versión actual de guice-grapher que estoy usando (4.0-beta), la palabra clave 'margen' no tiene un espacio delante, por lo que la línea de reemplazo debe ser: s = s .replaceAll ("margen = (\\ S +)", "margen = \" $ 1 \ ","); De lo contrario, muchas gracias por la muestra. – chooks
La primera replaceAll en los hideClassPaths() método anterior es demasiado entusiastas - que elimina el nombre de clase, así como el paquete. Debe ser
s = s.replaceAll("\\w[a-z\\d_\\.]+\\.([A-Z][A-Za-z\\d_\\$]*)", "$1");
Tenga en cuenta la adición del signo de dólar así que esto también funciona para los nombres de clase internos.
Gracias! Por favor borre esta respuesta y coméntela o edite la respuesta incorrecta. –
@JeffAxelrod Copié el código en su respuesta –
- 1. ¿Hay alguna manera de evitar que Firebug trabaje en un sitio en particular?
- 2. ¿Hay alguna manera de hacer que TFS se pueda enlazar?
- 3. ¿Hay alguna manera fácil de hacer que ScrollViewer sea "hinchable"?
- 4. ¿Hay alguna manera de hacer que un ExecutorService funcione recursivamente?
- 5. ¿Hay alguna manera de hacer que UserControl sea inafocable?
- 6. ¿Hay alguna manera de hacer que Rubyinstaller juegue bien con cygwin?
- 7. Hacer que d3.js trabaje con raphael.js
- 8. ¿Hay alguna manera de hacer que la unión de C# funcione de manera estática?
- 9. ¿Hay alguna manera de hacer que un enlace se pueda hacer clic en el terminal OSX?
- 10. ¿Cómo hacer que Tomcat7 trabaje con JAX-RS?
- 11. ¿Cómo puedo hacer que Aptana trabaje con Google Chrome?
- 12. Python/Matplotlib - ¿Hay alguna manera de hacer un eje discontinuo?
- 13. ¿Hay alguna manera de hacer una verificación parcial en TFS?
- 14. ¿Hay alguna manera de hacer esta búsqueda hash más rápido?
- 15. ¿Hay alguna manera de hacer una función atómica en C? .
- 16. ¿Hay alguna manera de hacer arreglos asociativos en REXX?
- 17. ¿Hay alguna manera de hacer un modal accesible?
- 18. ¿Hay alguna manera de hacer algo como esto en C#?
- 19. ¿Hay alguna manera de hacer persistente el apio/RabbitMQ?
- 20. ¿Hay alguna manera de hacer un círculo z-index?
- 21. ¿Hay alguna manera de hacer que IE8 no ignore una regla CSS que solo entiende parcialmente?
- 22. ¿Hay alguna manera de hacer que Eclipse ejecute una prueba JUnit varias veces hasta que falle?
- 23. ¿Hay alguna manera de hacer que SSMS abra ciertas conexiones cada vez que lo abro?
- 24. Cómo hacer que virtualenv trabaje con concha de pez
- 25. ¿Hay alguna manera en que pueda hacer que g ++ solo emita advertencias relacionadas con mis archivos?
- 26. ¿Hay alguna manera de ignorar un caso que no coincide?
- 27. ¿Cómo puedo hacer que Response.Redirect() trabaje desde MasterPage?
- 28. ¿Hay alguna manera de hacer que el widget de texto Tkinter sea solo de lectura?
- 29. ¿Hay alguna manera de hacer que git supere el tiempo de espera de http?
- 30. ¿Hay alguna manera de hacer que Visual Studio deje de sangrar espacios de nombres?
Jeff, no sé si viste la respuesta de @ Tim, pero es necesaria para la última versión de graphviz y Guice 3.0. No lo intenté con 4.0 beta todavía. – durron597
@ durron597 actualizado, gracias. –