Guice grapher उपयोगिता में bug है जो अधिकांश या सभी ग्राफ को दूषित करने का कारण बनता है। क्या इसके लिए कोई कामकाज या ठीक है?क्या गिसिस ग्रैफर को काम करने का कोई तरीका है?
उत्तर
मैंने ग्राफ को और अधिक कॉम्पैक्ट और पठनीय बनाने के लिए कक्षा पथ और लंबे यादृच्छिक नाम एनोटेशन को छिपाने के लिए @ wuppi के उत्तर को थोड़ा सा संशोधित किया। संपादित कोड के साथ उनका answer निम्न है:
मुझे यह उपयोगिता विधि बहुत उपयोगी लगता है और यह मेरे लिए गलत ग्राफ कभी नहीं छेड़छाड़ करता है।
style=invis
बग के बारे में: गुइस ग्रैपर प्लगइन एक डॉट फ़ाइल उत्पन्न करता है, जो कुछ क्लॉज को अदृश्य के रूप में शैलियों बनाता है। नीचे पोस्ट विधि में replaceAll()
उस के आसपास काम करता है। बाकी कोड गुइस उदाहरण से लगभग समान है।
मैं 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_\\$]*)", "$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;
}
}
बेशक
आप सबसे अधिक उपयोग करते समय किसी अन्य फ़ाइल का नाम :)
उत्पन्न करने के लिए स्वतंत्र हैं Graphviz के हाल के संस्करण, मुझे लगता है कि निम्नलिखित प्रतिस्थापन भी मदद करता है (अन्यथा Graphviz फ़ाइल को खोलने के लिए मना कर दिया):
s.replaceAll(" margin=(\\S+), ", " margin=\"$1\", ")
Guice उदाहरण जेफ और टिम solutio शामिल 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;
}
}
छोटे बग फिक्स - गिसिस-ग्रैफर के वर्तमान संस्करण में जो मैं उपयोग कर रहा हूं (4.0-बीटा), 'मार्जिन' कीवर्ड में इसके सामने कोई स्थान नहीं है, इसलिए प्रतिस्थापन रेखा होना चाहिए: s = s .replaceAll ("मार्जिन = (\\ एस +),", "मार्जिन = \" $ 1 \ ","); अन्यथा, नमूना के लिए बहुत बहुत धन्यवाद। – chooks
hideClassPaths() विधि से ऊपर उत्साही खत्म हो गया है में पहली replaceAll - यह वर्ग के नाम के साथ ही पैकेज निकाल देता है। यह
s = s.replaceAll("\\w[a-z\\d_\\.]+\\.([A-Z][A-Za-z\\d_\\$]*)", "$1");
डॉलर-चिह्न के अतिरिक्त ध्यान दें ताकि यह आंतरिक कक्षा के नामों के लिए भी काम करे।
धन्यवाद! कृपया इस उत्तर को हटाएं और या तो गलत उत्तर पर टिप्पणी करें या संपादित करें। –
@ जेफएक्सेलोड मैंने कोड को आपके उत्तर में कॉपी किया –
जेफ, मुझे नहीं पता कि आपने @ टिम का जवाब देखा है, लेकिन ग्राफविज़ और गुइस 3.0 के नवीनतम संस्करण के लिए इसकी आवश्यकता है। मैंने अभी तक 4.0 बीटा के साथ कोशिश नहीं की है। – durron597
@ durron597 अपडेट किया गया, धन्यवाद। –