C'è un bug nell'utilità Grapher Guice che causa la maggior parte o tutti i grafici per il rendering danneggiato. C'è una soluzione o una soluzione per questo?C'è qualche modo per far lavorare Guice Grapher?
risposta
Ho modificato leggermente la risposta di @ wuppi per nascondere anche i percorsi di classe e le annotazioni lunghe di nomi casuali per rendere il grafico molto più compatto e leggibile. Segue il suo codice answer con codice modificato:
Trovo che questo metodo di utilità sia piuttosto utile e non presta mai grafici errati per me.
Per quanto riguarda il bug style=invis
: Il plug-in Guice Grapher genera un file di punti che consente di rendere invisibili alcuni dei clases. Lo replaceAll()
nel metodo sotto riportato funziona su questo. Il resto del codice è quasi lo stesso dell'esempio di Guice.
Ho incorporato correzione di Scot per Guice 4.x, che comprendeva la risposta di Tim così:
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;
}
}
Naturalmente si è liberi di generare qualsiasi altra Nome file :)
Quando si utilizza il più versione recente di GraphViz, trovo che la seguente sostituzione aiuta anche (altrimenti GraphViz si rifiuta di aprire il file):
s.replaceAll(" margin=(\\S+), ", " margin=\"$1\", ")
Guice 4.x esempio incorporando Jeff e Tim di 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;
}
}
Piccola correzione di bug - nella versione corrente di guice-grapher che sto usando (4.0-beta), la parola chiave 'margin' non ha uno spazio davanti, quindi la linea di sostituzione dovrebbe essere: s = s .replaceAll ("margin = (\\ S +),", "margin = \" $ 1 \ ","); Altrimenti, grazie mille per il campione. – chooks
Il primo replaceAll nei hideClassPaths() metodo sopra è troppo zelanti - rimuove il nome della classe, così come il pacchetto. Dovrebbe essere
s = s.replaceAll("\\w[a-z\\d_\\.]+\\.([A-Z][A-Za-z\\d_\\$]*)", "$1");
Nota l'aggiunta del segno di dollaro, quindi questo funziona anche per i nomi di classe interni.
Grazie! Si prega di cancellare questa risposta e commentare o modificare la risposta errata. –
@JeffAxelrod Ho copiato il codice nella tua risposta –
- 1. Non riesco a far distruggere vagabondo per lavorare
- 2. fantoccio su come far funzionare il burattino per qualche secondo
- 3. Come implementare un grapher in C#
- 4. Qualche modo per migliorare questa espressione regolare?
- 5. c'è un modo per far ritirare HBase
- 6. Rails - qualche modo elegante per gestire 404s?
- 7. Guice Iniettare campo in classe non creato da Guice
- 8. Qualche suggerimento su come far funzionare xxhdpi nell'emulatore Android?
- 9. Come far funzionare JavaScript in chiamata QWebElement.appendInside ('qualche codice html')?
- 10. Guice: evitare l'iniezione pigra
- 11. Qualche modo per modificare la durata di zoomToRect per UIScrollView?
- 12. auto scan for guice
- 13. Qualche luce per TEventLogger?
- 14. jQuery ha qualche funzione per far scorrere il client fino alla fine della porta di visualizzazione?
- 15. C'è un modo per far funzionare ADODB con Excel per Mac 2011?
- 16. Iterare attraverso una raccolta Java per far rimbalzare queste sfere, qualche suggerimento?
- 17. Guice proxy per sostenere la dipendenza circolare
- 18. Un framework di sicurezza pronto per Guice?
- 19. Cosa devo fare per usare Guice?
- 20. C'è un modo per far funzionare Asio senza Boost?
- 21. c'è un modo per far funzionare title = attribute su Chrome?
- 22. C'è un modo per far funzionare AngularJS prima con HTML?
- 23. Modo elegante per far funzionare CustomValidator con ValidationSummary message box
- 24. Iniezione costruttore con Guice
- 25. C'è qualche modo in XQuery per ottenere l'ora corrente in millisecondi da qualche Epoch?
- 26. C'è qualche trucco per far funzionare il CDO VBScript con Amazon SES SMTP?
- 27. Qual è il modo migliore per iniettare una lista con google-guice?
- 28. Dropwizard e Guice: iniettare l'ambiente
- 29. Conosci qualche modo creativo per interfacciare Python con Tcl?
- 30. Qualche modo possibile per riprogrammare il microcontrollore di un'unità USB?
Jeff, non so se hai visto la risposta di @ Tim ma è necessaria per l'ultima versione di graphviz e Guice 3.0. Non l'ho provato con 4.0 beta ancora. – durron597
@ durron597 aggiornato, grazie. –