| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| --> |
| <book conformance="docgen" version="5.0" xmlns="http://docbook.org/ns/docbook" |
| xmlns:xlink="http://www.w3.org/1999/xlink" |
| xmlns:xi="http://www.w3.org/2001/XInclude" |
| xmlns:svg="http://www.w3.org/2000/svg" |
| xmlns:m="http://www.w3.org/1998/Math/MathML" |
| xmlns:html="http://www.w3.org/1999/xhtml" |
| xmlns:db="http://docbook.org/ns/docbook"> |
| <title>Apache FreeMarker</title> |
| |
| <chapter role="index.html" xml:id="what-is-freemarker"> |
| <title>What is Apache FreeMarker?</title> |
| |
| <para>Apache FreeMarker is a <emphasis>template engine</emphasis>: a Java |
| library to generate text output (HTML web pages, e-mails, configuration |
| files, source code, etc.) based on templates and changing data. Templates |
| are written in the FreeMarker Template Language (FTL), which is a simple, |
| specialized language (not a full-blown programming language like PHP). You |
| meant to prepare the data to display in a real programming language, like |
| issue database queries and do business calculations, and then the template |
| displays that already prepared data. In the template you are focusing on |
| how to present the data, and outside the template you are focusing on what |
| data to present.</para> |
| |
| <mediaobject> |
| <imageobject> |
| <imagedata fileref="images/overview.png"/> |
| </imageobject> |
| </mediaobject> |
| |
| <para>This approach is often referred to as the MVC (Model View |
| Controller) pattern, and is particularly popular for dynamic web pages. It |
| helps in separating web page designers (HTML authors) from developers |
| (Java programmers usually). Designers won't face complicated logic in |
| templates, and can change the appearance of a page without programmers |
| having to change or recompile code.</para> |
| |
| <para>While FreeMarker was originally created for generating HTML pages in |
| MVC web application frameworks, it isn't bound to servlets or HTML or |
| anything web-related. It's used in non-web application environments as |
| well.</para> |
| |
| <para>See the <olink targetdoc="templateAuthorsGuide">Manual for more |
| details...</olink></para> |
| |
| <para><emphasis role="bold">Disclaimer: </emphasis><emphasis>Apache |
| FreeMarker is an effort undergoing incubation at The Apache Software |
| Foundation (ASF), sponsored by the <link |
| xlink:href="http://incubator.apache.org">Apache Incubator</link>. |
| Incubation is required of all newly accepted projects until a further |
| review indicates that the infrastructure, communications, and decision |
| making process have stabilized in a manner consistent with other |
| successful ASF projects. While incubation status is not necessarily a |
| reflection of the completeness or stability of the code, it does indicate |
| that the project has yet to be fully endorsed by the |
| ASF.</emphasis></para> |
| |
| <simplesect> |
| <title>Features</title> |
| |
| <para>A few highlights of FreeMarker:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>Powerful template language: Conditional blocks, iterations, |
| assignments, string and arithmetic operations and formatting, macros |
| and functions, including other templates, escaping by default |
| (optional), and many more</para> |
| </listitem> |
| |
| <listitem> |
| <para>Multipurpose and lightweight: Zero dependencies, any output |
| format, can load templates from any place (pluggable), many |
| configuration options</para> |
| </listitem> |
| |
| <listitem> |
| <para>Internationalization/localization-aware: Locale sensitive |
| number and date/time formatting, localized template |
| variations.</para> |
| </listitem> |
| |
| <listitem> |
| <para>XML processing capabilities: Drop XML DOM-s into the |
| data-model and traverse them, or even process them |
| declaratively</para> |
| </listitem> |
| |
| <listitem> |
| <para>Versatile data-model: Java objects are exposed to the template |
| as a tree of variables through pluggable adapters, which decides how |
| the template sees them.</para> |
| </listitem> |
| </itemizedlist> |
| </simplesect> |
| |
| <simplesect> |
| <title>License</title> |
| |
| <para>FreeMarker is Free software, licensed under the Apache License, |
| Version 2.0. <olink targetdoc="license">See the license |
| here...</olink>.</para> |
| |
| <para>As of 2.3.24-pre01 (2015-09-02) the copyright owner in the license |
| has changed to the Apache Software Foundation, as the project has |
| started <link xlink:href="http://incubator.apache.org/">Apache |
| Incubation</link> (see disclaimer earlier).</para> |
| </simplesect> |
| </chapter> |
| |
| <chapter xml:id="freemarkerdownload"> |
| <title>Download / Maven</title> |
| |
| <para><emphasis role="bold">Dependencies:</emphasis> FreeMarker has no |
| required dependencies, except Java (Standard Edition) itself, with the |
| minimum version indicated for each download below.</para> |
| |
| <para><emphasis role="bold">Backward compatibility:</emphasis> Before |
| 2.3.0 (2004), releases with different second version numbers (like 2.2.x |
| and 2.3.x) aren't fully compatible. The 2.3.x series is quite conservative |
| about backward compatibility; you should be able to replace the FreeMarker |
| binary (<literal>freemarker.jar</literal>) under your application with a |
| newer one without breaking anything (obviously, assuming that only public |
| FreeMarker API-s were used).</para> |
| |
| <para><emphasis role="bold">Change log (version history):</emphasis> |
| <olink targetdoc="versionHistory">See in the Manual...</olink></para> |
| |
| <para xml:id="downloadApacheDisclaimer"><emphasis role="bold">Disclaimer: |
| </emphasis><emphasis>Apache FreeMarker is an effort undergoing incubation |
| at The Apache Software Foundation (ASF), sponsored by the <link |
| xlink:href="http://incubator.apache.org">Apache Incubator</link>. |
| Incubation is required of all newly accepted projects until a further |
| review indicates that the infrastructure, communications, and decision |
| making process have stabilized in a manner consistent with other |
| successful ASF projects. While incubation status is not necessarily a |
| reflection of the completeness or stability of the code, it does indicate |
| that the project has yet to be fully endorsed by the |
| ASF.</emphasis></para> |
| |
| <para>Verifying downloads (since 2.3.24 only): When downloading from a |
| mirror please check the checksum and verify the OpenPGP compatible |
| signature specified next to the download link (MD5, SHA256 and ASC files, |
| all must come from the <link |
| xlink:href="http://www.apache.org/">www.apache.org</link> domain). The |
| public keys used for signing are here: <link |
| xlink:href="http://www.apache.org/dist/incubator/freemarker/KEYS">KEYS</link> |
| (also must come from www.apache.org). <link |
| xlink:href="http://www.apache.org/dyn/closer.cgi#verify">More about how to |
| verify releases...</link></para> |
| |
| <simplesect> |
| <title>Latest stable release: 2.3.25-incubating</title> |
| |
| <para>Released on 2016-06-26. Requires J2SE 1.5 or higher.</para> |
| |
| <para><emphasis role="bold">This is a stable, final release.</emphasis> |
| The <quote>incubating</quote> suffix is required by the Apache Software |
| Foundation until the project becomes a fully accepted (graduated) Apache |
| project. See <link linkend="downloadApacheDisclaimer">disclaimer |
| earlier</link> and the <link |
| xlink:href="http://incubator.apache.org">Apache Incubator web |
| site</link>.</para> |
| |
| <para><link |
| xlink:href="http://freemarker.org/docs/versions_2_3_25.html">See what's |
| new...</link></para> |
| |
| <para>Downloads:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para><link |
| xlink:href="http://www.apache.org/dyn/closer.cgi/incubator/freemarker/engine/2.3.25-incubating/binaries/apache-freemarker-2.3.25-incubating-bin.tar.gz">Binary |
| release (tar.gz)</link> (includes <literal>freemarker.jar</literal> |
| and documentation) [<link |
| xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.25-incubating/binaries/apache-freemarker-2.3.25-incubating-bin.tar.gz.md5">MD5</link>] |
| [<link |
| xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.25-incubating/binaries/apache-freemarker-2.3.25-incubating-bin.tar.gz.sha512">SHA512</link>] |
| [<link |
| xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.25-incubating/binaries/apache-freemarker-2.3.25-incubating-bin.tar.gz.asc">ASC</link>]</para> |
| </listitem> |
| |
| <listitem> |
| <para><link |
| xlink:href="http://www.apache.org/dyn/closer.cgi/incubator/freemarker/engine/2.3.25-incubating/source/apache-freemarker-2.3.25-incubating-src.tar.gz">Source |
| release (tar.gz)</link> [<link |
| xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.25-incubating/source/apache-freemarker-2.3.25-incubating-src.tar.gz.md5">MD5</link>] |
| [<link |
| xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.25-incubating/source/apache-freemarker-2.3.25-incubating-src.tar.gz.sha512">SHA512</link>] |
| [<link |
| xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.25-incubating/source/apache-freemarker-2.3.25-incubating-src.tar.gz.asc">ASC</link>]</para> |
| </listitem> |
| </itemizedlist> |
| |
| <para>For Maven:</para> |
| |
| <programlisting language="XML" role="unspecified"><!-- |
| Attention: Be sure nothing pulls in an old dependency with groupId |
| "freemarker" (without the "org."), because then you will end up with |
| two freemarker.jar-s and unpredictable behavior! |
| --> |
| <dependency> |
| <groupId>org.freemarker</groupId> |
| <artifactId>freemarker</artifactId> |
| <version>2.3.25-incubating</version> |
| </dependency></programlisting> |
| |
| <note> |
| <para>Until about 2007 the Maven group name was |
| <quote>freemarker</quote> instead of <quote>org.freemarker</quote>, |
| and as the XML comment above says, this can cause problems, as Maven |
| will see them as two independent artifacts with no version conflict. |
| If you run into this issue, find the <literal>dependency</literal> |
| that depends on the old FreeMarker, and insert |
| <literal><exclusions><exclusion><groupId>freemarker<!-- |
| Legacy org-less group |
| --></groupId><artifactId>freemarker</artifactId> |
| </exclusion></exclusions></literal> into it.</para> |
| </note> |
| |
| <para>There's also a separate Google App Engine compatible |
| (<quote>gae</quote>) variation. Download: <link |
| xlink:href="http://www.apache.org/dyn/closer.cgi/incubator/freemarker/engine/2.3.25-incubating/binaries/apache-freemarker-gae-2.3.25-incubating-bin.tar.gz">binary</link> |
| [<link |
| xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.25-incubating/binaries/apache-freemarker-gae-2.3.25-incubating-bin.tar.gz.md5">MD5</link>] |
| [<link |
| xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.25-incubating/binaries/apache-freemarker-gae-2.3.25-incubating-bin.tar.gz.sha512">SHA512</link>] |
| [<link |
| xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.25-incubating/binaries/apache-freemarker-gae-2.3.25-incubating-bin.tar.gz.asc">ASC</link>], |
| <link |
| xlink:href="http://www.apache.org/dyn/closer.cgi/incubator/freemarker/engine/2.3.25-incubating/source/apache-freemarker-gae-2.3.25-incubating-src.tar.gz">source</link> |
| [<link |
| xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.25-incubating/source/apache-freemarker-gae-2.3.25-incubating-src.tar.gz.md5">MD5</link>] |
| [<link |
| xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.25-incubating/source/apache-freemarker-gae-2.3.25-incubating-src.tar.gz.sha512">SHA512</link>] |
| [<link |
| xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.25-incubating/source/apache-freemarker-gae-2.3.25-incubating-src.tar.gz.asc">ASC</link>]. |
| Maven:</para> |
| |
| <programlisting language="XML" role="unspecified"><dependency> |
| <groupId>org.freemarker</groupId> |
| <artifactId>freemarker-gae</artifactId> |
| <version>2.3.25-incubating</version> |
| </dependency></programlisting> |
| </simplesect> |
| |
| <simplesect> |
| <title>2.2.8</title> |
| |
| <para>Released on 2004-06-15. This is the latest stable release of the |
| 2.2 series. Requires J2SE 1.2 or higher.</para> |
| |
| <para><link |
| xlink:href="http://prdownloads.sourceforge.net/freemarker/freemarker-2.2.8.tar.gz">Download |
| freemarker-2.2.8.tar.gz</link> (1.4 MB)</para> |
| </simplesect> |
| |
| <simplesect> |
| <title>2.1.5</title> |
| |
| <para>Released on 2003-02-08. This is the latest stable release of the |
| 2.1 series. Requires J2SE 1.3 or higher.</para> |
| |
| <para><link |
| xlink:href="http://prdownloads.sourceforge.net/freemarker/freemarker-2.1.5.tar.gz">Download |
| freemarker-2.1.5.tar.gz</link> (909 KB)</para> |
| </simplesect> |
| |
| <simplesect> |
| <title>2.0.3 (aka. 2.03)</title> |
| |
| <para>Released on 2002-06-12. The latest stable release of the 2.0 |
| series. Requires J2SE 1.2 or higher.</para> |
| |
| <para><link |
| xlink:href="http://prdownloads.sourceforge.net/freemarker/freemarker2_03.tar.gz">Download |
| freemarker2_03.tar.gz</link> (617 KB)</para> |
| </simplesect> |
| |
| <simplesect> |
| <title>1.x</title> |
| |
| <para>The FreeMarker 1.x branch continues as separate project, called |
| FreeMarker Classic. See releases on the <link |
| xlink:href="http://fm-classic.sourceforge.net/">FreeMarker Classic |
| homepage</link>!</para> |
| </simplesect> |
| |
| <simplesect> |
| <title>Other versions</title> |
| |
| <para>See the project's <link |
| xlink:href="https://sourceforge.net/projects/freemarker/files/freemarker/">SourceForge |
| download page</link> for releases that are not featured on this download |
| page.</para> |
| </simplesect> |
| </chapter> |
| |
| <chapter> |
| <title>Documentation</title> |
| |
| <section> |
| <title><olink targetdoc="manual">Manual</olink></title> |
| |
| <para/> |
| </section> |
| |
| <section> |
| <title><olink targetdoc="api">Java API</olink></title> |
| |
| <para/> |
| </section> |
| |
| <section> |
| <title><olink targetdoc="chienseManual">Manual Chinese |
| translation</olink></title> |
| |
| <para/> |
| </section> |
| </chapter> |
| |
| <chapter> |
| <title>Tooling</title> |
| |
| <section xml:id="editors"> |
| <title>Editor / IDE plugins</title> |
| |
| <para>Syntax highlight definitions and other plugins for text editors |
| and IDE-s. We encourage everybody to develop and send syntax highlight |
| definitions or other plugins for his/her favorite editor or IDE!</para> |
| |
| <informaltable border="1"> |
| <thead> |
| <tr> |
| <th>Editor or IDE</th> |
| |
| <th>Features</th> |
| |
| <th>Get it</th> |
| </tr> |
| </thead> |
| |
| <tbody> |
| <tr> |
| <td>Eclipse</td> |
| |
| <td>Syntax highlight, syntax error marker, code completion for |
| macro names and bean property names.</td> |
| |
| <td><para>This is developed as part of <link |
| xlink:href="http://tools.jboss.org/">JBoss |
| Tools</link>.</para><para>On Eclipse <emphasis>Neon</emphasis> or |
| later, go to <quote>Help</quote> / <quote>Eclipse |
| Marketplace...</quote>, search for <quote>JBoss Tools</quote> |
| (should give version 4.<emphasis role="bold">4</emphasis>.1 or |
| later), <quote>Install</quote>. A tree of check boxes will appear, |
| uncheck all (by unchecking the root) except <quote>FreeMarker |
| IDE</quote>.</para><para>On Eclipse <emphasis>Mars or |
| Luna</emphasis>, you should still install the <quote>FreeMarker |
| IDE</quote> plugin from JBoss Tool 4.<emphasis |
| role="bold">4</emphasis>.1 or later, but the Eclipse Marketplace |
| won't show it. So in Eclipse, go to <quote>Help</quote> / |
| <quote>Install New Software...</quote>, and copy-paste |
| http://download.jboss.org/jbosstools/neon/stable/updates/ into the |
| <quote>Work with</quote> field. While this URL is for Eclipse |
| Neon, the <quote>FreeMarker IDE</quote> component under it works |
| on Eclipse Mars too (maybe even on Luna). So expand the check box |
| tree appearing below, and select <quote>FreeMarker IDE</quote> |
| only. Don't left any other components checked. Then |
| <quote>Next</quote>, <quote>Next</quote>, |
| <quote>Finish</quote>.</para><para>Report bugs found on the <link |
| xlink:href="https://issues.jboss.org/issues/?jql=project%20%3D%20JBIDE%20AND%20component%20%3D%20freemarker">bug |
| tracker of the JBoss Tools project</link> (Key: |
| <literal>JBIDE</literal>; Component: |
| <literal>freemarker</literal>), and help to make the plugin better |
| <link |
| xlink:href="https://github.com/jbosstools/jbosstools-freemarker">on |
| GitHub</link>!</para><para>To install the nightly development |
| version, use this Eclipse update site: |
| http://download.jboss.org/jbosstools/neon/snapshots/builds/jbosstools-freemarker_master/latest/all/repo/ |
| </para><para>Note: If the plugin comes with an older FreeMarker |
| version than the one your application uses, it will mark the usage |
| of too fresh language features as errors, or the other way around. |
| To fix this, find <literal>freemarker*.jar</literal> inside the |
| installed plugin, under |
| <literal><userHome>/.eclipse/</literal> or under the Eclipse |
| installation directory (you may need to search inside |
| <literal>jar</literal>-s). Exit Eclipse, and overwrite it with the |
| <literal>freemarker.jar</literal> you want, but keep the file name |
| of the replaced <literal>jar</literal>. You may also need to find |
| and delete the extracted OSGi bundle under |
| <literal>configuration\org.eclipse.osgi</literal> for the changes |
| to take effect.</para></td> |
| </tr> |
| |
| <tr> |
| <td>Emacs</td> |
| |
| <td>Syntax highlight, indentation, block folding, some code |
| navigation. Emacs major-mode for editing Web templates, includes |
| FreeMarker support among others.</td> |
| |
| <td><link xlink:href="http://web-mode.org/">The homepage of |
| web-mode.el</link></td> |
| </tr> |
| |
| <tr> |
| <td>Emacs (tried with 20.7)</td> |
| |
| <td>Syntax highlighting</td> |
| |
| <td><olink targetdoc="emacsPluginDownload">ftl.el |
| v0.1</olink></td> |
| </tr> |
| |
| <tr> |
| <td>Kate and KWrite (tried with Kate 2.5.10 and 3.2)</td> |
| |
| <td>Syntax highlighting</td> |
| |
| <td><olink |
| targetdoc="kwritePluginDownload">kwriteftl.tar.gz</olink> |
| (2009-08-08)</td> |
| </tr> |
| |
| <tr> |
| <td>NetBeans (tried with 8.0.2)</td> |
| |
| <td>Syntax highlight, syntax error marker, directive name |
| auto-completion.</td> |
| |
| <td>Can be installed from NetBeans, under Tools/Plugins. Also |
| manually from <link |
| xlink:href="http://plugins.netbeans.org/plugin/58284/freemarker-support-for-netbeans">its |
| NetBeans plugin portal page...</link></td> |
| </tr> |
| |
| <tr> |
| <td>NetBeans (6.0, may doesn't work with 7+)</td> |
| |
| <td>Syntax highlight, code completion, template navigation</td> |
| |
| <td>Download from <link |
| xlink:href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=3755">its |
| NetBeans plugin portal page...</link></td> |
| </tr> |
| |
| <tr> |
| <td>TextMate</td> |
| |
| <td>Syntax highlight</td> |
| |
| <td><link |
| xlink:href="https://github.com/freemarker/FreeMarker.tmbundle">Install |
| from GitHub Project</link></td> |
| </tr> |
| |
| <tr> |
| <td>TextPad 4 or later</td> |
| |
| <td>Syntax highlight</td> |
| |
| <td><olink |
| targetdoc="textPadPluginDownload">textpadftl.zip</olink> |
| (2003-03-24)</td> |
| </tr> |
| |
| <tr> |
| <td>Vim ("Vi IMproved")</td> |
| |
| <td>Syntax highlight</td> |
| |
| <td><olink targetdoc="vimPluginDownload">ftl.vim</olink> |
| (2011-10-07)</td> |
| </tr> |
| </tbody> |
| </informaltable> |
| |
| <para>Note that some editors/IDEs, such as <link |
| xlink:href="https://www.jetbrains.com/idea/">IntelliJ IDEA</link> and |
| <link xlink:href="http://www.jedit.org/">jEdit</link>, supports |
| FreeMarker out-of-the-box.</para> |
| </section> |
| |
| <section> |
| <title><olink targetdoc="onlineTemplateTester">Online template |
| tester</olink></title> |
| |
| <para/> |
| </section> |
| |
| <section> |
| <title><olink targetdoc="fmpp">File generator tool |
| (FMPP)</olink></title> |
| |
| <para/> |
| </section> |
| </chapter> |
| |
| <chapter> |
| <title>Community</title> |
| |
| <section> |
| <title><olink targetdoc="newBugReport">Report bugs</olink></title> |
| |
| <para/> |
| </section> |
| |
| <section> |
| <title><olink targetdoc="oldBugTracker">Bugs still in the old |
| tracker</olink></title> |
| |
| <para/> |
| </section> |
| |
| <section> |
| <title><olink targetdoc="newStackOverflowQuestion">Ask help on Stack |
| Overflow</olink></title> |
| |
| <para/> |
| </section> |
| |
| <section> |
| <title><olink targetdoc="twitter">Get news on Twitter</olink></title> |
| |
| <para/> |
| </section> |
| |
| <section xml:id="mailing-lists"> |
| <title>Discuss on mailing lists</title> |
| |
| <para>If you need help, you should ask on <olink |
| targetdoc="newStackOverflowQuestion">Stack Overflow with |
| <quote>freemarker</quote> tag</olink>! To discuss deeper issues, feature |
| requests, and other FreeMarker-related topics, subscribe to the |
| developer mailing list!</para> |
| |
| <para>The mailing lists (since 2015-09-03):</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para><emphasis role="bold">Developer list</emphasis>: |
| dev@freemarker.incubator.apache.org. <olink |
| targetdoc="devMailingListSubscribe"><link |
| xlink:href="mailto:dev-subscribe@freemarker.incubator.apache.org">Subscribe</link></olink>, |
| <olink targetdoc="devMailingListUnsubscribe"><link |
| xlink:href="mailto:dev-unsubscribe@freemarker.incubator.apache.org">Unsubscribe</link></olink> |
| (After clicking on these links, send the appearing empty mail as |
| is.)</para> |
| </listitem> |
| |
| <listitem> |
| <para><emphasis role="bold">Commit and Jira |
| notifications</emphasis>: |
| notifications@freemarker.incubator.apache.org. <olink |
| targetdoc="notificationsMailingListSubscribe"><link |
| xlink:href="mailto:notifications-subscribe@freemarker.incubator.apache.org">Subscribe</link></olink>, |
| <olink targetdoc="notificationsMailingListUnsubscribe"><link |
| xlink:href="mailto:notifications-unsubscribe@freemarker.incubator.apache.org">Unsubscribe</link></olink> |
| (After clicking on these links, send the appearing empty mail as |
| is.)</para> |
| </listitem> |
| </itemizedlist> |
| |
| <para>The above mailing lists are hosted by the Apache Software |
| Foundation. For more information about managing mailing lists, <link |
| xlink:href="http://apache.org/foundation/mailinglists.html">see this |
| page...</link></para> |
| |
| <simplesect> |
| <title>Retired mailing lists</title> |
| |
| <para>These are the lists on sourceforge.net, which |
| <emphasis>shouldn't be used anymore</emphasis>.</para> |
| |
| <para>Archives of <emphasis>retired</emphasis> lists:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para><olink |
| targetdoc="oldUserMailingListArchive">freemarker-user@lists.sourceforge.net</olink></para> |
| </listitem> |
| |
| <listitem> |
| <para><olink |
| targetdoc="oldDevelMailingListArchive">freemarker-devel@lists.sourceforge.net</olink></para> |
| </listitem> |
| </itemizedlist> |
| |
| <para><olink targetdoc="oldMailingListSubscription">Manage |
| <emphasis>retired</emphasis> list subscriptions...</olink></para> |
| </simplesect> |
| </section> |
| |
| <section xml:id="poweredBy"> |
| <title>Who uses FreeMarker?</title> |
| |
| <para>Below is a non-comprehensive list of products and sites that use |
| FreeMarker.</para> |
| |
| <para>If you are a developer (or otherwise a representative) of a |
| product or site that uses FreeMarker <emphasis>and has a substantial |
| user base for at least a year or so</emphasis>, <olink |
| targetdoc="devMailingList">drop us a note</olink> that includes a short |
| one paragraph description (preferably less than 300 characters, or 600 |
| for complex frameworks) and an URL. The description should also include |
| what FreeMarker is used for in your product.</para> |
| |
| <simplesect> |
| <title>Software that incorporates FreeMarker</title> |
| |
| <informaltable border="1"> |
| <tbody> |
| <tr valign="top"> |
| <td><link xlink:href="http://alfresco.org/">Alfresco</link></td> |
| |
| <td>Alfresco offers open source enterprise content management |
| (ECM) - Document Management, Collaboration, Records Management, |
| Knowledge Management, Web Content Management and Imaging. |
| Alfresco was founded in June 2005 by John Newton, co-founder of |
| Documentum, and John Powell, former COO of Business Objects. |
| Alfresco's templating system is based on exposing their custom |
| object model to FreeMarker templates. See <link |
| xlink:href="http://www.alfresco.org/mediawiki/index.php/Template_Guide">here</link> |
| for more information.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link xlink:href="http://marmotta.apache.org/">Apache |
| Marmotta</link></td> |
| |
| <td>Apache Marmotta is an Open Platform for Linked Data. |
| Internally it uses FreeMarker templates for building its |
| administration user interface. In addition Marmotta implements |
| an extension of FreeMarker that allows constructing <link |
| xlink:href="http://marmotta.apache.org/ldpath/template.html">templates |
| with LDPath statements</link> for inserting and iterating over |
| values from RDF data.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link xlink:href="http://ofbiz.apache.org/">Apache |
| OFBiz</link></td> |
| |
| <td>Apache OFBiz is a project to create a suite of open-source |
| enterprise/e-commerce applications and modules built on a common |
| framework. In 2003 the project decided to switch from JSP to |
| FreeMarker for their view component.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://apt-jelly.sourceforge.net/">APT-Jelly</link></td> |
| |
| <td>APT-Jelly is an engine for generating artifacts (e.g. source |
| code, config files) from Java source code. APT-Jelly provides a |
| template-oriented approach to artifact generation by providing |
| an interface for Sun's Annotation Processing Tool (APT) to your |
| favorite templating engine.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://auctionability.co.uk">AuctionAbility</link></td> |
| |
| <td>AuctionAbility is a live auction management system that uses |
| FreeMarker extensively to power our notifications (email, SMS, |
| Facebook, Twitter), newsletters (text, HTML, PDF from xHTML), |
| statements (PDF from xHTML) and eBay listing generation.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.clapper.org/software/java/curn/">Curn</link></td> |
| |
| <td>Curn is an RSS reader. It scans a configured set of RSS |
| feeds, and summarizes the results in files generated with |
| FreeMarker templates. It is a command-line utility, intended to |
| be run periodically in the background.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.dbsight.net">DBSight</link></td> |
| |
| <td>With DBSight you can quickly create a working scalable |
| full-text search engine based on your own database, just by |
| writing SQL and configuring via browser. DBSight provides a |
| customizable scaffolding engine to scaffold search result |
| templates.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.basilv.com/psd/software">EnvGen</link></td> |
| |
| <td>EnvGen is an <link |
| xlink:href="http://ant.apache.org/">Ant</link> task for |
| generating different versions of the same file parameterized for |
| different environments (i.e. development, test, and production) |
| using FreeMarker.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://fmpp.sourceforge.net/">FMPP</link></td> |
| |
| <td>FMPP is a general purpose text file preprocessor tool |
| (command-line, Ant task). It can generate complete homepages |
| (full directory structure with HTML-s, images, etc.). It is |
| extendable to display data from any data sources (as |
| database).</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://jcopist.sourceforge.net/">JCopist</link></td> |
| |
| <td>JCopist is a template-based document generation server based |
| on <link |
| xlink:href="http://www.openoffice.org/">OpenOffice.org</link>. |
| JCopist templates are regular OpenDocuments, enhanced with the |
| FreeMarker scripting language.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link xlink:href="http://www.jforum.net/">JForum</link></td> |
| |
| <td>JForum is an open source discussion board system. The lead |
| developer is Rafael Steil.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://jodreports.sourceforge.net/">JODReports</link></td> |
| |
| <td>JODReports is an open source solution for creating office |
| documents and reports in Java, using OpenOffice.org.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.liferay.com/products/liferay-portal/overview">Liferay |
| Portal</link></td> |
| |
| <td>Liferay Portal is one of the most widely adapted enterprise |
| portal solutions. It's free and open source with optional |
| enterprise subscription. It leverages existing technologies and |
| standards in its stack where reasonable. It has strong focus on |
| modularity, extensibility, and integration with other systems. |
| Core services include Enterprise Content Management, document |
| management, workflow integration, users/roles, web publishing. |
| Entire portals may be built solely using the web UI and |
| available components. It uses FreeMarker for themes, page |
| layout, fragments of structured content, email, portlet views, |
| code generation.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link xlink:href="http://www.lutece.paris.fr">Lutece |
| (2.0+)</link></td> |
| |
| <td>Lutece is a portal engine which allows you to easily create |
| your websites or intranets based upon HTML, XML, etc content. It |
| provides a user friendly interface for portal management so no |
| specific technical skills are required. BSD-like license.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.magnolia-cms.com">Magnolia</link></td> |
| |
| <td>Magnolia powers the websites of government as well as |
| leading Fortune 500 enterprises in more than 100 countries on |
| all continents of the world. It is a Content Management System |
| favored for its ease-of-use and availability under an Open |
| Source license. Magnolia contains best-of-breed Java technology |
| based on open standards to allow for tailor-made solutions.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://infiniteautomation.com/">Mango</link></td> |
| |
| <td>Mango is browser-based, Ajax-enabled software that enables |
| users to access and control electronic sensors, devices, and |
| machines. It provides an interface with which diverse data |
| sources can be created and configured along with an intuitive |
| rules engine for setting up access, monitoring, alerts, data |
| logging, control, transformation, and communication. It uses |
| FreeMarker to dynamically generate content for notification |
| emails.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.messagegears.com/">MessageGears</link></td> |
| |
| <td>MessageGears provides Email APIs and SMTP services. |
| MessageGears email templating system is powered by XML documents |
| which become the model to FreeMarker templates. Each message is |
| then merged, delivered, and tracked to optimize inbox |
| placement.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.mrc-productivity.com/">m-Power</link></td> |
| |
| <td>m-Power is software which automates enterprise web |
| application development and modernizes legacy business |
| applications. m-Power offers 15 standard Web templates like |
| prompted reports, graphs, pivot tables, maintenance apps, and |
| more. m-Power reduces Web application development time, lowers |
| development costs, and increases productivity.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link xlink:href="http://netbeans.org/">NetBeans</link></td> |
| |
| <td>The <link xlink:href="http://netbeans.org/">NetBeans |
| IDE</link> is a well-known open-source tool for Java, PHP, Ruby, |
| C/C++; it also uses FreeMarker for source code templates. |
| FreeMarker is also built into the <link |
| xlink:href="http://netbeans.org/features/platform/index.html">NetBeans |
| Platform</link>, allowing users to create and process FreeMarker |
| file templates as part of their RCP app.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.runmyprocess.com/">RunMyProcess</link></td> |
| |
| <td>RunMyProcess is a SaaS (software as a service) Web 2.0 |
| integration platform which allow to automate, without any |
| programming, the exchange between your internal information |
| system, your partners or your SaaS software. FreeMarker is used |
| to define data mappings and as a template tool for connectors' |
| design.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.superx-projekt.de">SuperX</link></td> |
| |
| <td>[German language only.] A German dataware house for |
| university administrations. Uses FreeMarker to dynamically |
| create SQL queries.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.trackstudio.com/">TrackStudio</link></td> |
| |
| <td>TrackStudio is a hierarchical issue tracking and bug |
| tracking system, created specifically for software development |
| companies. It uses FreeMarker to format the e-mail notification |
| messages.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.webperformanceinc.com/load_testing/">Web |
| Performance Load Tester</link></td> |
| |
| <td>Web Performance Load Tester software brings ease of use, |
| automatic configuration and sophisticated analysis to |
| performance testing at an affordable price.</td> |
| </tr> |
| </tbody> |
| </informaltable> |
| </simplesect> |
| |
| <simplesect> |
| <title>Web application frameworks that support FreeMarker |
| <quote>views</quote></title> |
| |
| <para>Note that this list is not complete, since we only list products |
| where the framework authors explicitly state that their product |
| supports FreeMarker. For some frameworks not listed here, it is easy |
| to plug any view component, and thus FreeMarker.</para> |
| |
| <para>Also, for most "Model 2" frameworks (like Maverick or Struts) it |
| is easy to use FreeMarker templates instead of the MVC-oriented JSP |
| pages. For more information <olink targetdoc="freemarkerServlet">click |
| here...</olink></para> |
| |
| <informaltable border="1"> |
| <tbody> |
| <tr valign="top"> |
| <td><link xlink:href="http://struts.apache.org/">Apache |
| Struts</link></td> |
| |
| <td>Apache Struts is a free, open-source, MVC framework for |
| creating elegant, modern Java web applications. It favors |
| convention over configuration, is extensible using a plugin |
| architecture, and ships with plugins to support REST, AJAX and |
| JSON.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.inductionframework.org">Induction</link></td> |
| |
| <td>Induction is a request-based MVC web application framework |
| for Java with support for dynamic application reloading, |
| type-based dependency injection and dependency analysis between |
| models, views and controllers using popular IDEs.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.jpublish.org/">JPublish</link></td> |
| |
| <td>Starting from version 2.0b1, JPublish supports FreeMarker as |
| a view layer. JPublish is a powerful web publishing system |
| designed to ensure a clean separation of developer roles.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.restlet.org">Restlet</link></td> |
| |
| <td>A framework that brings the simplicity and efficiency of the |
| REST architectural style to Java developers. As an alternative |
| to Servlet and JSP technologies, it uses FreeMarker to generate |
| dynamic representations.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.springframework.org/">Spring</link></td> |
| |
| <td>Spring is a complete Java/J2EE application framework based |
| around a lightweight Inversion of Control container. Spring |
| includes, among many other things, a full AOP interception |
| framework, JDBC and ORM support, declarative transaction |
| management (even without an application server) and a rich, |
| flexible MVC framework with various view technologies |
| integrated.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://tammi.sourceforge.net">Tammi</link></td> |
| |
| <td>Tammi is a development framework and run-time container for |
| JMX based web applications. Tammi MBeans can implement business |
| logic themselves or act as proxies to native libraries, remote |
| programs and other manageable systems. Tammi applications can be |
| executed either as a servlet or filter chain under a J2EE |
| compatible servlet container. In addition, it contains an |
| internal HTTP(S) 1.1 capable connector with competent |
| performance.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://velocityweb.sourceforge.net/">VelocityWeb</link></td> |
| |
| <td>VelocityWeb is a zero-configuration web framework for J2EE. |
| It's easy to debug/unit test without J2EE server, create view |
| with Velocity/FreeMarker, create DAO with Apache Common DBUtils, |
| SQL pagination, and transaction following |
| <literal>TRANSACTION_PER_REQUEST</literal>.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.ztemplates.org/">ztemplates</link></td> |
| |
| <td>ztemplates is a web framework that uses Java 5 annotations |
| and autodiscovery for virtually everything, so there is almost |
| no configuration. It features a new and unique action processing |
| module that allows clean, technology agnostic URL-s with |
| URL-variables. It has annotation-based AJAX and JavaScript |
| support.</td> |
| </tr> |
| </tbody> |
| </informaltable> |
| </simplesect> |
| |
| <simplesect> |
| <title>Websites generated by FreeMarker</title> |
| |
| <informaltable border="1"> |
| <tbody> |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.abclinuxu.cz">www.abclinuxu.cz</link></td> |
| |
| <td>Linux portal for czech and slovak users. Articles, |
| tutorials, hardware advices, discussion forum and much |
| more...</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.chemistaustralia.com.au">www.chemistaustralia.com.au</link></td> |
| |
| <td>Chemist Australia - an online pharmacy in Australia. Uses |
| the WebWork2 framework.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.chile.com">www.chile.com</link></td> |
| |
| <td>This portal for everything Chilean serves way many hits |
| every day.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.drivenow.com.au">www.drivenow.com.au</link></td> |
| |
| <td>DriveNow - A car rental website that allows customers to |
| book rental cars from major suppliers at discounted last minute |
| rates. Datacodex have developed a site DriveNow that utilises |
| FreeMarker for it's view layer inside it's framework, |
| WebWork2.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://freemarker.org">freemarker.org</link></td> |
| |
| <td>Not surprisingly, the pages you view right now are generated |
| using FreeMarker.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.hesteinfo.dk">www.hesteinfo.dk</link></td> |
| |
| <td>Denmark's largest equestrian site, where you will find |
| everything related to horses: latest world news, sales, jobs, |
| forums, studs, results, and breeding.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://dvd.indianajones.com">dvd.indianajones.com</link></td> |
| |
| <td>The official site for the online content accompanying the |
| "Complete Indiana Jones DVD Set".</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.javahispano.org">www.javahispano.org</link></td> |
| |
| <td>This is a popular Spanish-language portal for java |
| developers. It is built on top of the <link |
| xlink:href="http://canyamo.sourceforge.net">Canyamo</link> |
| framework which uses FreeMarker templates for its presentation |
| functionality.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://musikk.telenormobil.no">musikk.telenormobil.no</link> |
| and <link |
| xlink:href="http://mp3.platekompaniet.no">mp3.platekompaniet.no</link></td> |
| |
| <td>Together form Norway's second largest MP3-download |
| shop.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.nadir.org">www.nadir.org</link></td> |
| |
| <td>Nadir is a German political news portal that uses the |
| above-listed, FreeMarker based Mir CMS.</td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><link |
| xlink:href="http://www.vogella.com">www.vogella.com</link></td> |
| |
| <td>Popular portal for tutorials, books and trainings on Java, |
| Eclipse, Android and Web development.</td> |
| </tr> |
| </tbody> |
| </informaltable> |
| </simplesect> |
| </section> |
| |
| <section xml:id="contribute"> |
| <title>Contributors wanted!</title> |
| |
| <para>As it's the case with many opens source projects, FreeMarker |
| doesn't have and never had a payed staff, nor a backing corporate entity |
| who finances it otherwise. It's ran by volunteers since it started in |
| 1999. So we are always looking for people to help FreeMarker to |
| advance!</para> |
| |
| <section xml:id="how-to-contribute"> |
| <title>How do I contribute?</title> |
| |
| <para>First you should <link linkend="mailing-lists">subsrcribe to the |
| developer mailing list</link> to discuss what you plan to do.</para> |
| |
| <para>Then, fork the project on Github, and start working on the |
| appropriate branch (see <link linkend="sourcecode">the repositories |
| and branches here</link>). See the <literal>README</literal> file in |
| it for more information about building and IDE setup. When your |
| contribution is ready, send a pull request on Github. Then we can |
| still iterate over it until it becomes good enough for merging.</para> |
| |
| <para>Note that you will need an <link |
| xlink:href="http://www.apache.org/dev/new-committers-guide.html#cla">Individual |
| Contributor License Agreement (ICLA) or Corporate CLA at the Apache |
| Software Foundation</link>, or else we can't merge in your |
| contribution.</para> |
| |
| <para>For more generic guidelines, see <link |
| xlink:href="http://www.apache.org/foundation/getinvolved.html">how to |
| contribute to Apache projects</link>.</para> |
| </section> |
| |
| <section xml:id="what-to-contribute"> |
| <title>What should I contribute?</title> |
| |
| <para>Usually, contributors come because they want to fix/improve a |
| certain thing. But if you just want to help in general, here are some |
| topics that are not (that) hard to jump into and are considered to be |
| important:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>Improve tooling:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>Eclipse plugin. Either help improving the JBoss Tools |
| <quote>FreeMarker IDE</quote> (<link |
| xlink:href="https://issues.jboss.org/browse/JBIDE-20512?jql=project%20%3D%20JBIDE%20AND%20status%20in%20%28Open%2C%20%22Coding%20In%20Progress%22%2C%20Reopened%2C%20%22Pull%20Request%20Sent%22%29%20AND%20component%20%3D%20freemarker">see |
| open issues</link>), or if you have serious ambitions, even |
| start your own!</para> |
| </listitem> |
| |
| <listitem> |
| <para>IntelliJ plugin. Check how well it works (like support |
| for recent FreeMarker features), try to find a way to |
| contribute where needed.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Plugin or syntax highlighter for you favorite editor |
| (Notepad++, jEdit, VIM, etc.) that actually covers FTL |
| reasonably well, and is legally properly contributed to the |
| project.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Online editor, syntax highlighter. This might means |
| FreeMarker support for CodeMirror. This, among others, would |
| be useful in the <olink |
| targetdoc="onlineTemplateTester">online template |
| tester</olink>.</para> |
| </listitem> |
| </itemizedlist> |
| </listitem> |
| |
| <listitem> |
| <para>Improve framework integration:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>FreeMarker Spring MVC integration. Someone who know both |
| well should keep an eye on this, improving it where |
| necessary.</para> |
| </listitem> |
| |
| <listitem> |
| <para>FreeMarker Struts integration. Same as with Spring |
| MVC.</para> |
| </listitem> |
| </itemizedlist> |
| </listitem> |
| |
| <listitem> |
| <para>Android support. This is related to the next two points |
| too</para> |
| </listitem> |
| |
| <listitem> |
| <para>Bean introspection without |
| <literal>javax.bean.Introspector</literal> (or in additionally to |
| it). FreeMarker relies on this class for maximum conformance to |
| the JavaBeans specs., however, its limitations start to hurt too |
| much: It doesn't work on Android, it doesn't support Java 8 |
| default methods, and it's not lenient enough in many cases |
| (<literal>Boolean isXxx</literal> doesn't work, |
| <literal>xFoo</literal> is not a possible property name of |
| <literal>getXFoo</literal>, etc.), it doesn't work with static |
| methods (<literal>BeansWrapper.staticModels</literal>).</para> |
| </listitem> |
| |
| <listitem> |
| <para>Support for Java 8 date/time API-s (this is actually |
| certainly a difficult one)</para> |
| </listitem> |
| |
| <listitem> |
| <para><literal>javax.script</literal> (JSR-223) support</para> |
| </listitem> |
| |
| <listitem> |
| <para>Write <literal>TemplateLoader</literal> that loads from |
| database (<literal>DataSource</literal>)</para> |
| </listitem> |
| |
| <listitem> |
| <para>Migrate build from Ant to Gradle. Or for Docgen an Site, |
| Maven is certainly a good fit.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Performance tests, to spot performance regressions.</para> |
| </listitem> |
| </itemizedlist> |
| |
| <para>Continuous activities that are always welcome:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>Spotting mistakes in commits; more eyes see more</para> |
| </listitem> |
| |
| <listitem> |
| <para>Trying to break new features before they are released |
| (finding bugs)</para> |
| </listitem> |
| |
| <listitem> |
| <para>Improve JUnit coverage where it's due</para> |
| </listitem> |
| |
| <listitem> |
| <para>Fixing typos in the documentation (includes JavaDoc!)</para> |
| </listitem> |
| |
| <listitem> |
| <para>Help users. This mostly means monitoring FreeMarker related |
| questions on Stack Overflow.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Pick a bug from the bug tracker, and squash it.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Recommend using FreeMarker to others when there's a fitting |
| task</para> |
| </listitem> |
| </itemizedlist> |
| |
| <para>Last but not least, FreeMarker needs long standing/returning |
| contributors who tackle deeper issues.</para> |
| </section> |
| </section> |
| |
| <section xml:id="committer-howto"> |
| <title>Committer how-to</title> |
| |
| <para><emphasis>This page applies to Committers only, not to usual |
| contributors.</emphasis> A Committer is a person with extra rights who |
| receives his status via invitation. You don't need to be a Committer to |
| contribute, anyone can fork and send pull requests on Github; see more |
| on <link linkend="contribute">the page for contributors</link>.</para> |
| |
| <section xml:id="git-commit-policy"> |
| <title>Git commit policies</title> |
| |
| <para>A Committer can commit directly into the Apache Git repository |
| of FreeMarker, and so preferably doesn't use GitHub pull requests. |
| (See <link linkend="sourcecode">the repositories and branches |
| here</link>.)</para> |
| |
| <para>A Committer has the technical permissions to commit directly |
| into the <quote>main</quote> branch (or branches), and (s)he is |
| expected to use that wisely. Depending on the complexity of the |
| feature, the number of active Committers in the time period, and |
| whether the feature is expected to be discussed by the community, |
| (s)he may should work in a feature branch instead. If the feature is |
| finished and discussions were resolved (on some way described by |
| Apache policies), it can be merged back into the <quote>main</quote> |
| branch.</para> |
| |
| <para>All commits should have helpful comments; don't be afraid of |
| writing long descriptions. If the commit is related to a Jira issue, |
| the comment should start with the Jira issue identifier, like |
| <quote>FREEMARKER-16: ...</quote></para> |
| </section> |
| |
| <section xml:id="merging-pull-request"> |
| <title>Merging in pull requests from GitHub</title> |
| |
| <para>Pull requests from GitHub are merged in by Committers. Before |
| accepting a pull request, ensure that:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>The contributor has a CLA at Apache (see on <link |
| xlink:href="http://people.apache.org/">http://people.apache.org/</link>)</para> |
| </listitem> |
| |
| <listitem> |
| <para>The contributor has used the proper branch of the project |
| (it's sometimes looked over)</para> |
| </listitem> |
| </itemizedlist> |
| |
| <para>To merge the pull request:</para> |
| |
| <programlisting language="unknown">git pull --no-ff https://github.com/apache/<PROJECT> refs/pull/<PR_NUMBER>/head</programlisting> |
| |
| <para>Where:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para><literal> <replaceable><PROJECT></replaceable> |
| </literal> is usually |
| <literal>incubator-freemarker</literal></para> |
| </listitem> |
| |
| <listitem> |
| <para><literal> <replaceable><PR_NUMBER></replaceable> |
| </literal> is the pull request number that GitHub shows |
| prominently after a <quote>#</quote></para> |
| </listitem> |
| </itemizedlist> |
| |
| <para>The commit comment should automatically describe that it's a |
| merge and if from where. After that you may also want to add a summary |
| of what the merged branch does.</para> |
| |
| <para>In general, pull request merge commits should adhere to the same |
| policies as if the Committer who commits directly into the Apache git |
| repository.</para> |
| |
| <para>Pushing the merge commit to the ASF repo will automatically |
| close the pull request on Github.</para> |
| </section> |
| |
| <section xml:id="making-releases"> |
| <title>Making releases</title> |
| |
| <para>For each release, one of the Committers plays the role of |
| Release Manager. The Release Manager should follow the procedure here, |
| and (s)he should update this page where (s)he has to deviate from |
| it.</para> |
| |
| <para>For general info about making releases, please read <link |
| xlink:href="http://www.apache.org/legal/release-policy#archived">http://www.apache.org/legal/release-policy</link> |
| and <link |
| xlink:href="http://incubator.apache.org/guides/releasemanagement.html">http://incubator.apache.org/guides/releasemanagement.html</link>. |
| The FreeMarker-specific additions to those are:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>Releases with non-trivial changes should have at least one |
| Release Candidate (RC01) release, which is legally a normal |
| release (not just a internal/developer one), and is promoted for |
| at least 1 month on our web page. These are there differences to a |
| final release:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>RC-s aren't released to the Maven Central |
| Repository</para> |
| </listitem> |
| |
| <listitem> |
| <para>RC documentation (Manual + JavaDoc) is only published |
| under |
| http://freemarker.org/builds/<replaceable>X.X.X</replaceable>-rc<replaceable>X</replaceable>/</para> |
| </listitem> |
| </itemizedlist> |
| </listitem> |
| |
| <listitem> |
| <para>The official release is provided as source code to build the |
| project (src tar.gz). For the convenience of users the release is |
| also accompanied by compiled binaries (bin tar.gz, which also |
| contains the documentation). Both artifacts are downloadable from |
| the Apache Software Foundation, as usual</para> |
| </listitem> |
| |
| <listitem> |
| <para>The same two artifacts should also be released (uploaded for |
| download) on <link |
| xlink:href="https://sourceforge.net/projects/freemarker/">https://sourceforge.net/projects/freemarker/</link>. |
| We add a note there to the indicate that the canonical download is |
| the one from Apache.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Releases should have a usual jar artifact, an src artifact |
| and javadoc artifact either in the Apache Maven staging reposotory |
| (for RC-s), or in the Maven Central Repository (for |
| finals).</para> |
| </listitem> |
| </itemizedlist> |
| |
| <para>The steps of making a release:</para> |
| |
| <orderedlist> |
| <listitem> |
| <para>Check that <literal>version.properties</literal> is up to |
| date. Also that the version number in the title and version |
| history of the Manual are up to date.</para> |
| </listitem> |
| |
| <listitem> |
| <para><literal>ant dist</literal></para> |
| </listitem> |
| |
| <listitem> |
| <para><literal>ant rat</literal>, check output</para> |
| </listitem> |
| |
| <listitem> |
| <para>Ensure this is up to date: |
| https://dist.apache.org/repos/dist/<replaceable>{dev,release}</replaceable>/incubator/freemarker/KEY</para> |
| </listitem> |
| |
| <listitem> |
| <para>SVN commit the release files into the proper subdirectory of |
| https://dist.apache.org/repos/<emphasis |
| role="bold">dist</emphasis>/dev/incubator/freemarker. Note that |
| this is <quote>dev/</quote>, not <quote>release/</quote>!</para> |
| </listitem> |
| |
| <listitem> |
| <para>Upload to ASF Nexus staging</para> |
| |
| <orderedlist> |
| <listitem> |
| <para>If your Maven <literal>settings-security.xml</literal> |
| is relocated to an encrypted storage (recommended), mount it, |
| otherwise you will get 401 error when uploading.</para> |
| </listitem> |
| |
| <listitem> |
| <para><literal>ant maven-dist</literal></para> |
| </listitem> |
| |
| <listitem> |
| <para>Go to <link |
| xlink:href="http://repository.apache.org/">http://repository.apache.org/</link>, |
| log in, chose <quote>Staging Repositories</quote>, find and |
| click the repository just created. Check the upload files |
| manually (on the <quote>Content</quote> tab). Then |
| <quote>Close</quote> the repository. Press |
| <quote>Refresh</quote> until it's successfully |
| <quote>closed</quote>.</para> |
| </listitem> |
| </orderedlist> |
| </listitem> |
| |
| <listitem> |
| <para>Upload the release documentation under |
| http://freemarker.org/builds/<replaceable>X.X.X</replaceable>-voting/documentation/ |
| (see |
| https://git-wip-us.apache.org/repos/asf/incubator-freemarker-site.git, |
| <quote>asf-site</quote> branch). The change log will be a link |
| pointing to a page inside this.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Voting on the FreeMarker developer list (the podling project |
| list)</para> |
| |
| <orderedlist> |
| <listitem> |
| <para>Start a thread on the FreeMarker developer mailing list |
| with subject <quote>[VOTE] Release Apache FreeMarker |
| <replaceable>X.X.X</replaceable> (incubating)</quote>. You |
| should use an earlier release vote mail as a template.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Needs at least 3 binding +1, majority win, and minimum |
| 72 hours (but see Apache policies)</para> |
| </listitem> |
| |
| <listitem> |
| <para>Post <quote>[RESULT][VOTE]</quote> mail to the |
| FreeMarker developer list. Again, you should use an earlier |
| release vote result mail as a template.</para> |
| </listitem> |
| |
| <listitem> |
| <para>If it was a failed vote, after fixing the issues, the |
| release process restarts with a different dist.apache.org |
| URL-s (add an attempt number to the directory for |
| example)</para> |
| </listitem> |
| </orderedlist> |
| </listitem> |
| |
| <listitem> |
| <para>If the voting on the the FreeMarker developer list has |
| passed, start similar <quote>[VOTE]</quote> thread on |
| general@incubator</para> |
| |
| <orderedlist> |
| <listitem> |
| <para>Use an earlier FreeMarker release vote mail as the |
| template. Some notes:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>Use your apache.org e-mail address as the |
| sender</para> |
| </listitem> |
| |
| <listitem> |
| <para>Include short project description</para> |
| </listitem> |
| |
| <listitem> |
| <para>Link the FreeMarker developer mailing list |
| <quote>[RESULT][VOTE]</quote> mail</para> |
| </listitem> |
| |
| <listitem> |
| <para>Link artifacts. The src artifact is the release |
| that's voted upon. The bin is for convenience only.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Include and link via the Git commit |
| <emphasis>hash</emphasis></para> |
| </listitem> |
| |
| <listitem> |
| <para>Link the change log (page under |
| http://freemarker.org/builds/<replaceable>X.X.X</replaceable>/)</para> |
| </listitem> |
| |
| <listitem> |
| <para>Specify Maven staging coordinates</para> |
| </listitem> |
| </itemizedlist> |
| </listitem> |
| |
| <listitem> |
| <para>Needs at least 3 binding +1, majority wins, at least 72 |
| hours has passed</para> |
| </listitem> |
| |
| <listitem> |
| <para>Post <quote>[RESULT][VOTE]</quote> to general@incubator. |
| Use an earlier such mail as template. Some notes:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>Use your apache.org e-mail address as the |
| sender</para> |
| </listitem> |
| |
| <listitem> |
| <para>Include short project description</para> |
| </listitem> |
| </itemizedlist> |
| </listitem> |
| |
| <listitem> |
| <para>If it was a failed vote, after fixing the issues, the |
| release process restarts with a different dist.apache.org |
| URL-s (add an attempt number to the directory for |
| example)</para> |
| </listitem> |
| </orderedlist> |
| </listitem> |
| |
| <listitem> |
| <para>Copy the release files over from |
| https://dist.apache.org/repos/dist/<emphasis |
| role="bold">dev</emphasis>/incubator/freemarker into the proper |
| subdirectory of https://dist.apache.org/repos/dist/<emphasis |
| role="bold">release</emphasis>/incubator/freemarker and commit |
| them. (Of course get rid of any voting attempt numbers in the |
| directory names.) Now they should appear under <link |
| xlink:href="http://www.apache.org/dist/incubator/freemarker/">http://www.apache.org/dist/incubator/freemarker/</link>.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Go to <link |
| xlink:href="https://repository.apache.org/">https://repository.apache.org/</link> |
| and find the staging repository that belongs to the voted version. |
| Select it, press <quote>Release</quote> at the top. Now the |
| repository should appear under <link |
| xlink:href="https://repository.apache.org/content/repositories/releases/org/freemarker/">https://repository.apache.org/content/repositories/releases/org/freemarker/</link> |
| Later (like hours later) it will appear in the Maven Central |
| Repository too.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Wait 24 hours so that the mirrors get synced. Check <link |
| xlink:href="http://www.apache.org/dist/incubator/freemarker/">http://www.apache.org/dist/incubator/freemarker/</link> |
| and <link |
| xlink:href="http://archive.apache.org/dist/">http://archive.apache.org/dist/</link>. |
| Check Maven Central repository too (in the case of non-RC |
| releases).</para> |
| </listitem> |
| |
| <listitem> |
| <para>Delete the non-latest release of each maintained branch from |
| http://www.apache.org/dist/incubator/freemarker/ (Old ones are |
| automatically available on http://archive.apache.org/dist/)</para> |
| </listitem> |
| |
| <listitem> |
| <para>Tag the release on Git (see earlier tags for the tag name |
| format). Be careful not to tag a commit made since the voting has |
| succeeded.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Update http://freemarker.org:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>Add the release to the download section.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Upload latest JavaDoc</para> |
| </listitem> |
| |
| <listitem> |
| <para>Update release date in the Manual, regenerate it.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Upload the new Manual</para> |
| </listitem> |
| </itemizedlist> |
| </listitem> |
| |
| <listitem> |
| <para>Update other web pages:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>Release on sourceforge.net. The README.md should note |
| that it's for convenience only, and point to the official |
| download page.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Update Apache project status page:</para> |
| |
| <orderedlist> |
| <listitem> |
| <para>Update and commit: |
| https://svn.apache.org/repos/asf/incubator/public/trunk/content/projects/freemarker.xml</para> |
| </listitem> |
| |
| <listitem> |
| <para>Republish: |
| https://cms.apache.org/incubator/publish</para> |
| </listitem> |
| </orderedlist> |
| </listitem> |
| |
| <listitem> |
| <para>Update <link |
| xlink:href="https://en.wikipedia.org/wiki/FreeMarker">https://en.wikipedia.org/wiki/FreeMarker</link></para> |
| </listitem> |
| </itemizedlist> |
| </listitem> |
| |
| <listitem> |
| <para>Announce:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>On the FreeMarker developer list</para> |
| </listitem> |
| |
| <listitem> |
| <para>On announce@apache.org (see <link |
| xlink:href="https://lists.apache.org/list.html?announce@apache.org">https://lists.apache.org/list.html?announce@apache.org</link> |
| for examples).</para> |
| </listitem> |
| |
| <listitem> |
| <para>On <link |
| xlink:href="https://twitter.com/freemarker">https://twitter.com/freemarker</link></para> |
| </listitem> |
| |
| <listitem> |
| <para>On the old FreeMarker mailing lists: freemarker-user, |
| freemarker-devel, freemarker-announce</para> |
| </listitem> |
| </itemizedlist> |
| </listitem> |
| </orderedlist> |
| </section> |
| |
| <section xml:id="updating-homepage"> |
| <title>Updating the FreeMarker home page</title> |
| |
| <para>The content of the home page can be changed by committing it |
| into the <literal>asf-site</literal> branch of the |
| <literal>freemarker-site</literal> repository. However, you shouldn't |
| directly edit the content of most HTML files there, as pretty much all |
| of them are generated, and then is just manually copied over there. |
| The generated pieces are:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>The contents of the <literal>docs/api</literal> is generated |
| from the <literal>freemarker</literal> project, by issuing |
| <literal>ant javadoc</literal> there (not in the |
| <literal>site</literal> project). So to change the content, you |
| should edit the documentation comments in the java files.</para> |
| </listitem> |
| |
| <listitem> |
| <para>The contents of <literal>docs/</literal> is generated from |
| the <literal>freemarker</literal> project, by issuing <literal>ant |
| manualFreemarkerOrg</literal>. So to change the content, you |
| should edit |
| <literal><replaceable><freemarker-project></replaceable>/src/manual/en_US/book.xml</literal>.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Most other content is generated from the |
| <literal>site</literal> project, by issuing |
| <literal>ant</literal>. So to change the content, you should edit |
| <literal><replaceable><site-project></replaceable>/src/docgen/book.xml</literal>.</para> |
| </listitem> |
| </itemizedlist> |
| |
| <para>After you commit into the <literal>asf-site</literal> branch of |
| the <literal>freemarker-site</literal> repository, it will |
| automatically appear on the web site, with some small delay (a few |
| seconds usually). If it doesn't, that's probably because of a known |
| infrastructural glitch, where for too big commits this synchronization |
| doesn't happen. In such case, commit some small change to trigger |
| synchronization again.</para> |
| </section> |
| |
| <section xml:id="edit-docbook"> |
| <title>Regarding editing the Manual and the Site DocBook</title> |
| |
| <para>Both the site and the Manual is generated from the XML files |
| (DocBook format) by the custom Ant task defined in the |
| <literal>docgen</literal> project |
| (<literal>freemarker-docgen</literal> repository). That project also |
| provides an XMLMind XML Editor (XXE for short) addon for editing these |
| files. For more guide lines see |
| <literal>src/manual/en_US/docgen-help/editors-readme.txt</literal> in |
| the <literal>freemarker</literal> repository. About the same guide |
| lines apply to the site DocBook as well.</para> |
| </section> |
| </section> |
| </chapter> |
| |
| <chapter> |
| <title>Miscellaneous</title> |
| |
| <section xml:id="sourcecode"> |
| <title>Source code (Git)</title> |
| |
| <para>The key project repositories are at the Apache Software |
| Foundation, as part of the <link |
| xlink:href="http://incubator.apache.org/">Apache Incubation</link> |
| effort. These Apache repositories are mirrored back to GitHub |
| (read-only), which is practical for sending patches via usual GitHub |
| forking and pull requests. The key repositories are:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para><literal>freemarker</literal>: The engine itself (i.e., |
| <literal>freemarker.jar</literal>) and the documentation. URL: |
| <olink targetdoc="gitFreemarker"/>. GitHub mirror: <olink |
| targetdoc="githubMirrorFreemarker"/>. Relevant branches (as of |
| 2015-09-04):</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para><literal>2.3-gae</literal>: FreeMarker 2.3.x Google App |
| Engine compliant variant. <emphasis role="bold">Develop here by |
| default!</emphasis> This is where most developments are |
| committed, and are then merged into the other two branches |
| below.</para> |
| </listitem> |
| |
| <listitem> |
| <para><literal>2.3</literal>: FreeMarker 2.3.x, |
| <quote>normal</quote> variant (this is what most users use). We |
| hardly ever commit into this directly, instead changes are |
| coming from<literal>2.3-gae</literal> via merging.</para> |
| </listitem> |
| |
| <listitem> |
| <para><literal>master</literal>: FreeMarker 2.4.x. Had no |
| release as of this writing. This is <literal>2.3-gae</literal> |
| plus the changes that aren't 100% backward compatible. We only |
| commit 2.4-exclusive changes directly here, all other changes |
| are coming from <literal>2.3-gae</literal> via merging.</para> |
| </listitem> |
| </itemizedlist> |
| </listitem> |
| |
| <listitem> |
| <para><literal>freemarker-site</literal>: Web site (freemarker.org) |
| contents. URL: <olink targetdoc="gitSite"/>. GitHub mirror: <olink |
| targetdoc="githubMirrorSite"/>. Relevant branches: |
| <literal>master</literal></para> |
| </listitem> |
| |
| <listitem> |
| <para><literal>freemarker-docgen</literal>: DocBook transformation |
| used for generating both the FreeMarker Manual and the Web site. |
| URL: <olink targetdoc="gitDocgen"/>. GitHub mirror: <olink |
| targetdoc="githubMirrorDocgen"/>. Relevant branches: |
| <literal>master</literal></para> |
| </listitem> |
| </itemizedlist> |
| |
| <para>There are some other FreeMarker-related repositories, such FMPP |
| and Tutorials, which you can only find on the <olink |
| targetdoc="githubProjectOld">old GitHub project</olink> page, as they |
| aren't part of the ongoing Apache Incubation effort.</para> |
| |
| <para><emphasis>Disclaimer: Apache FreeMarker is an effort undergoing |
| incubation at The Apache Software Foundation (ASF). Incubation is |
| required of all newly accepted projects until a further review indicates |
| that the infrastructure, communications, and decision making process |
| have stabilized in a manner consistent with other successful ASF |
| projects. While incubation status is not necessarily a reflection of the |
| completeness or stability of the code, it does indicate that the project |
| has yet to be fully endorsed by the ASF.</emphasis></para> |
| </section> |
| |
| <section xml:id="history"> |
| <title>Project history</title> |
| |
| <para>Development history, key contributors:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>Later 1999, FreeMarker 1 has appeared on SourceForge.net. It |
| was originally written by Benjamin Geer and Mike Bayer. They defined |
| the basic syntax, and more importantly, the philosophy of the tool |
| that is carried on in FreeMarker 2. Significant contributions to |
| FreeMarker 1 were made by Nicholas Cull, Holger Arendt and |
| others.</para> |
| </listitem> |
| |
| <listitem> |
| <para>In early 2002, Jonathan Revusky rewrote the core |
| (parser/compiler) code using a popular parser generator tool, |
| JavaCC. This was really the basis of FreeMarker 2, which, though was |
| initially largely backward compatible with FreeMarker 1, is |
| virtually a complete rewrite. <link |
| xlink:href="http://www.szegedi.org/">Attila Szegedi</link> has made |
| significant contributions to the FreeMarker 2. Besides refactoring |
| and optimizing some of the core API's, Attila is the main author of |
| the date/time support, <literal>freemarker.ext.*</literal> packages |
| responsible for JavaBeans, Jython, and XML mappings, as well as for |
| HTTP servlet, JSP and Ant integration. Dániel Dékány is the main |
| author of the documentation, and has influenced many new features of |
| FreeMarker 2, and has helped in maintenance work. Many ideas and |
| feedback were provided by the various participants on the |
| freemarker-devel and freemarker-user mailing lists, like <link |
| xlink:href="http://sixlegs.com/">Chris Nokleberg</link>, <link |
| xlink:href="http://stephan.notatoaster.org/">Stephan Mueller</link>, |
| and many others.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Since 2011, Dániel Dékány does most of the maintenance work |
| and new features.</para> |
| </listitem> |
| </itemizedlist> |
| |
| <para>Legal history:</para> |
| |
| <itemizedlist> |
| <listitem> |
| <para>FreeMarker 1 was licensed under LGPL, and was copyright by |
| Benjamin Geer.</para> |
| </listitem> |
| |
| <listitem> |
| <para>By community consensus, FreeMarker 2 was released under a more |
| liberal BSD-style license. Benjamin Geer remained the copyright |
| holder of FreeMarker versions 2.0.x and 2.1.x. It was decided that, |
| since we did not at that point have a juridical entity (such as the |
| Apache Foundation) to play this role, that Benjamin Geer would |
| continue to be the sole copyright holder, make any future license |
| changes or clarifications simpler.</para> |
| </listitem> |
| |
| <listitem> |
| <para>As of FreeMarker 2.2, the copyright holder of the FreeMarker |
| codebase was the Visigoth Software Society (VSS), a non-profit |
| association based in Spain, and co-founded by Jonathan Revusky in |
| December of 2002. Benjamin Geer graciously agreed to cede the |
| copyright to VSS on the understanding that it would remain available |
| under a liberal open-source license. The terms of the license remain |
| the same.</para> |
| </listitem> |
| |
| <listitem> |
| <para>As of FreeMarker 2.3.21 (released at 2014-10-12), the license |
| has changed to the Apache License, Version 2.0, and the owner has |
| changed from Visigoth Software Society to the three main FreeMarker |
| 2 developers, Attila Szegedi, Daniel Dekany, and Jonathan Revusky. |
| The change was needed because the old BSD-style license wasn't OSI |
| approved, and because of the inactivity of the Visigoth Software |
| Society association.</para> |
| </listitem> |
| |
| <listitem> |
| <para>Around 2015-07-01, FreeMarker was voted in into the <link |
| xlink:href="http://incubator.apache.org/">Apache Incubator</link>, |
| and the project (all code from which the releases and the Web site |
| are created, along with the right for using the |
| <quote>FreeMarker</quote> product name) was granted to the Apache |
| Software Foundation by the earlier owners. The license remains |
| Apache License, Version 2.0. In 2015-09-02, the main code base was |
| imported from GitHub into the Apache Software Foundation |
| infrastructure, where development continues.</para> |
| |
| <para><emphasis>Disclaimer: Apache FreeMarker is an effort |
| undergoing incubation at The Apache Software Foundation (ASF). |
| Incubation is required of all newly accepted projects until a |
| further review indicates that the infrastructure, communications, |
| and decision making process have stabilized in a manner consistent |
| with other successful ASF projects. While incubation status is not |
| necessarily a reflection of the completeness or stability of the |
| code, it does indicate that the project has yet to be fully endorsed |
| by the ASF.</emphasis></para> |
| </listitem> |
| </itemizedlist> |
| </section> |
| |
| <section> |
| <title><olink targetdoc="sourceforgeProject">Sourceforge.net project |
| page</olink></title> |
| |
| <para/> |
| </section> |
| </chapter> |
| </book> |