
टाइप-सेफ जावा मस्टैच टेम्पलेटिंग इंजन जिसमें कंपाइल-टाइम टेम्पलेट सत्यापन, स्टैटिक वैल्यू बाइंडिंग और HTML तथा अन्य सामग्री प्रकारों के लिए एक्सटेंसिबल एस्केपिंग शामिल है।
एक प्रकार-सुरक्षित जावा मस्टैच टेम्पलेटिंग इंजन।
टेम्पलेट्स को पढ़ने योग्य जावा स्रोत कोड में संकलित किया जाता है और मान बाइंडिंग्स स्थिर रूप से जाँची जाती हैं।
दस्तावेज़ javadoc.io पर भी है लेकिन ऊपर के समान एकत्रित नहीं है। एकत्रित javadoc पसंदीदा दस्तावेज़ है और इस readme का शेष भाग मुख्य रूप से प्रचार विपणन उद्देश्यों के लिए है।
पिछले रिलीज़ के लिए:
https://jstach.io/doc/jstachio/VERSION/apidocs
जहाँ VERSION आपकी इच्छित संस्करण है।
इसमें शामिल है why_jstachio_is_better.md।
तर्कहीन Mustache (v 1.3) सिंटैक्स।
आज JEP 430 जैसा समर्थन प्राप्त करें लेकिन और भी अधिक शक्ति के साथ।
टेम्पलेट्स को जावा कोड में संकलित किया जाता है
मान बाइंडिंग्स स्थिर रूप से जाँची जाती हैं।
विधियाँ, फ़ील्ड्स और गेटर-विधियाँ टेम्पलेट्स में संदर्भित की जा सकती हैं।
संदर्भ के साथ मैत्रीपूर्ण त्रुटि संदेश।
शून्य कॉन्फ़िगरेशन। किसी प्लगइन या ट्वीक की आवश्यकता नहीं है। सब कुछ किसी भी IDE और/या बिल्ड-सिस्टम के साथ मानक javac के साथ किया जाता है।
गैर-HTML टेम्पलेट्स समर्थित हैं। समर्थित एस्केपिंग सामग्री प्रकारों का सेट विस्तार योग्य है।
Mustache इनहेरिटेंस स्पेक के माध्यम से लेआउट समर्थित हैं।
ServiceLoader के माध्यम से फ़ॉलबैक रेंडर सेवा विस्तार बिंदु
अनुमत प्रकारों को अनुकूलित करें जिन्हें आउटपुट किया जा सकता है अन्यथा कंपाइलर त्रुटि (उन क्लासेस पर toString से बचने के लिए जिनके पास मैत्रीपूर्ण toString नहीं है)।
रनटाइम पर चर के कस्टम toString के लिए फ़ॉर्मेटर
ट्रेट जैसे ऐड-ऑन के लिए जनरेटेड कोड में अतिरिक्त implements इंटरफ़ेस जोड़ें (@JStacheInterfaces)
शक्तिशाली लैम्ब्डा समर्थन
Map<String, ?> समर्थन
Optional<?> समर्थन
JMustache और Handlebars सूची सूचकांक एक्सटेंशन के साथ संगत (जैसे -first, -last, -index)
यह अब तक का सबसे तेज़ जावा Mustache-जैसा टेम्पलेट इंजन है और सामान्य रूप से सबसे तेज़ में से एक है।
JStachio के अलावा शून्य निर्भरताएँ
एक बिल्कुल शून्य रनटाइम निर्भरता विकल्प उपलब्ध है (जैसे सभी आवश्यक कोड उत्पन्न होता है और रनटाइम के दौरान jstachio की भी आवश्यकता नहीं होती)। एनोटेशन प्रोसेसर और अन्य शून्य निर्भरता प्रोजेक्ट्स के लिए Maven shade का उपयोग करने की आवश्यकता नहीं है। Graal VM नेटिव प्रोजेक्ट्स के लिए भी उपयोगी है जहाँ फ़ुटप्रिंट यथासंभव न्यूनतम हो।
Spring Framework के लिए प्रथम श्रेणी का समर्थन (जैसे स्वयं प्रोजेक्ट प्लगइन्स प्रदान करेगा, न कि एक सहायक प्रोजेक्ट)
यह इस प्रोजेक्ट का लक्ष्य नहीं है कि वह सबसे तेज़ जावा टेम्पलेटिंग इंजन हो!
(हालाँकि जब यह readme अंतिम बार अपडेट किया गया था तब यह मेरी जानकारी में सबसे तेज़ है)
ऐसा नहीं है कि टेम्पलेटिंग भाषाओं के साथ प्रदर्शन बहुत मायने रखता है (यह शायद ही कभी अड़चन होता है) लेकिन JStachio बहुत तेज़ है:
https://github.com/agentgt/template-benchmark


@JStache(template = """
{{#people}}
{{message}} {{name}}! You are {{#ageInfo}}{{age}}{{/ageInfo}} years old!
{{#-last}}
That is all for now!
{{/-last}}
{{/people}}
""")
public record HelloWorld(String message, List<Person> people) implements AgeLambdaSupport {
}
public record Person(String name, LocalDate birthday) {
}
public record AgeInfo(long age, String date) {
}
public interface AgeLambdaSupport {
@JStacheLambda
default AgeInfo ageInfo(Person person) {
long age = ChronoUnit.YEARS.between(person.birthday(), LocalDate.now());
String date = person.birthday().format(DateTimeFormatter.ISO_DATE);
return new AgeInfo(age, date);
}
}
@Test
public void testPerson() throws Exception {
Person rick = new Person("Rick", LocalDate.now().minusYears(70));
Person morty = new Person("Morty", LocalDate.now().minusYears(14));
Person beth = new Person("Beth", LocalDate.now().minusYears(35));
Person jerry = new Person("Jerry", LocalDate.now().minusYears(35));
String actual = JStachio.render(new HelloWorld("Hello alien", List.of(rick, morty, beth, jerry)));
String expected = """
Hello alien Rick! You are 70 years old!
Hello alien Morty! You are 14 years old!
Hello alien Beth! You are 35 years old!
Hello alien Jerry! You are 35 years old!
That is all for now!
""";
assertEquals(expected, actual);
}
<properties>
<io.jstach.version>0.6.0-SNAPSHOT</io.jstach.version>
</properties>
...
<dependencies>
<dependency>
<groupId>io.jstach</groupId>
<artifactId>jstachio</artifactId>
<version>${io.jstach.version}</version>
</dependency>
</dependencies>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source> <!-- 17 is the minimum -->
<target>17</target> <!-- 17 is the minimum -->
<annotationProcessorPaths>
<path>
<groupId>io.jstach</groupId>
<artifactId>jstachio-apt</artifactId>
<version>${io.jstach.version}</version>
</path>
<!-- other annotation processors -->
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
नोट: एनोटेशन jar (jstachio-annotation) परोक्ष रूप से खिंच जाता है
dependencies {
implementation 'io.jstach:jstachio:VERSION'
annotationProcessor 'io.jstach:jstachio-apt:VERSION'
}
{{#name}}
<p>Name: {{.}}, Name Length is {{length}}</p>
{{/name}}
<p>Age: {{ age }}</p>
<p>Achievements:</p>
<ul>
{{#array}}
<li>{{.}}</li>
{{/array}}
</ul>
{{^array}}
<p>No achievements</p>
{{/array}}
<p>Items:</p>
<ol>
{{#list1}}
<li>{{value}}</li>
{{/list1}}
</ol>
निम्नलिखित क्लास का उपयोग उपरोक्त टेम्पलेट में भरने के लिए वास्तविक डेटा प्रदान करने के लिए किया जा सकता है।