http://git-wip-us.apache.org/repos/asf/polygene-website/blob/ba3a0fac/content/java/develop/build-system.html ---------------------------------------------------------------------- diff --git a/content/java/develop/build-system.html b/content/java/develop/build-system.html new file mode 100644 index 0000000..d4c5616 --- /dev/null +++ b/content/java/develop/build-system.html @@ -0,0 +1,142 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Polygene⢠Build System</title><link rel="stylesheet" type="text/css" href="css/style.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /><link rel="home" href="index.html" title="" /><link rel="up" href="tutorials.html" title="Tutorials" /><link rel="prev" href="howto-invocation-annotation.html" title="Use @Invocation" /><link rel="next" href="community-docs.html" title="Polygene⢠Documentation" /> + + +<!-- favicon --> + +<link rel="shortcut icon" href="http://polygene.apache.org/favicon.ico" type="image/vnd.microsoft.icon" /> +<link rel="icon" href="http://polygene.apache.org/favicon.ico" type="image/x-icon" /> + +<!-- style --> + +<link href="css/shCore.css" rel="stylesheet" type="text/css" /> +<link href="css/shCoreEclipse.css" rel="stylesheet" type="text/css" /> +<link href="css/shThemeEclipse.css" rel="stylesheet" type="text/css" /> +<link href="css/polygene.css" rel="stylesheet" type="text/css" /> + +<!-- Syntax Highlighter --> + +<script type="text/javascript" src="js/shCore.js"></script> +<script type="text/javascript" src="js/shBrushJava.js"></script> +<script type="text/javascript" src="js/shBrushScala.js"></script> +<script type="text/javascript" src="js/shBrushJScript.js"></script> +<script type="text/javascript" src="js/shBrushBash.js"></script> +<script type="text/javascript" src="js/shBrushPlain.js"></script> +<script type="text/javascript" src="js/shBrushXml.js"></script> +<script type="text/javascript" src="js/shBrushGroovy.js"></script> +<script type="text/javascript" src="js/shBrushPython.js"></script> +<script type="text/javascript" src="js/shBrushRuby.js"></script> +<script type="text/javascript" src="js/shBrushCSharp.js"></script> + +<script type="text/javascript"> + SyntaxHighlighter.defaults['tab-size'] = 4; + SyntaxHighlighter.defaults['gutter'] = false; + SyntaxHighlighter.defaults['toolbar'] = false; + SyntaxHighlighter.all() +</script> + +<!-- JQuery --> + +<script type="text/javascript" src="js/jquery-1.6.4.min.js"></script> + +<!-- Image Scaler --> + +<script type="text/javascript" src="js/imagescaler.js"></script> + +<!-- Table Styler --> + +<script type="text/javascript" src="js/tablestyler.js"></script> + +<!-- Apache Polygene WebSite Progressive Enhancement --> + +<link href="css/progressive-enhancement.css" rel="stylesheet" type="text/css" /> +<script type="text/javascript" src="js/jquery.scrollTo-1.4.2.js"></script> +<script type="text/javascript" src="js/progressive-enhancement.js"></script> + +<!-- Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-62007352-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + + </head><body><div xmlns="" xmlns:exsl="http://exslt.org/common" class="logo"><a href="index.html"><img src="images/logo-standard.png" /></a></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="top-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="index.html#home">Polygeneâ¢</a></span></dt><dt><span class="section"><a href="intro.html">Introduction</a></span></dt><dt><span class="section"><span xmlns="" href="tutorials.html">Tutorials</span></span></dt><dt><span class="section"><a href="javadocs.html">Javadoc</a></span></dt><dt><span class="section"><a href="samples.html">Samples</a></span></dt><dt><span class="section"><a href="core.html">Core</a></span></dt><dt><span class="section"><a href="libraries.html">Libraries</a></span></dt><dt><span class="section"><a href="extensions.html">Extensions</a></span></dt><dt><span class="section"><a href="tools.html">Tools</a></span></dt><dt><span class="section"><a href="glossary.ht ml">Glossary </a></span></dt></dl></div></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="sub-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="tutorials.html#_overview">Overview</a></span></dt><dt><span class="section"><a href="two-minutes-intro.html">Polygene⢠in 2 minutes</a></span></dt><dt><span class="section"><a href="ten-minutes-intro.html">Polygene⢠in 10 minutes</a></span></dt><dt><span class="section"><a href="thirty-minutes-intro.html">Polygene⢠in 30 minutes</a></span></dt><dt><span class="section"><a href="howto-depend-on-polygene.html">Depend on Polygeneâ¢</a></span></dt><dt><span class="section"><a href="howto-assemble-application.html">Assemble an Application</a></span></dt><dt><span class="section"><a href="tut-composites.html">Transient Composites Tutorial</a></span></dt><dt><span class="section"><a href="tut-services.html">Services Composites Tutorial</a></span></dt><dt><span class="section"><a href="howto-contextual-fragments.html">Use contextual fragments</a></span></dt><dt><span class="section"><a href="howto-leverage-properties.html">Leverage Properties</a></span></dt><dt><span class="section"><a href="howto-create-constraint.html">Create a Constraint</a></span></dt><dt><span class="section"><a href="howto-create-concern.html">Create a Concern</a></span></dt><dt><span class="section"><a href="howto-create-sideeffect.html">Create a SideEffect</a></span></dt><dt><span class="section"><a href="howto-create-entity.html">Create an Entity</a></span></dt><dt><span class="section"><a href="howto-configure-service.html">Configure a Service</a></span></dt><dt><span class="section"><a href="howto-invocation-annotation.html">Use @Invocation</a></span></dt><dt><span class="section"><span xmlns="" href="build-system.html">Polygene⢠Build System</span></span></dt><dt><span class="section"><a href="community-docs.html">Polygene⢠Documentation</a></span></dt><dt><span class="sectio n"><a href="releasing-apache.html">Releasing Polygeneâ¢</a></span></dt></dl></div></div><div class="section" title="Polygene⢠Build System"><div class="titlepage"><div><div><h3 class="title"><a id="build-system"></a>Polygene⢠Build System</h3></div></div></div><p>This tutorial is intended for developers who want to build the Polygene⢠SDK themselves. +It describe the Polygene⢠SDK Build System from compilation to publication of artifacts for consumption by other +applications.</p><p>If instead you want to setup your project build system to depend on modules of the Polygene⢠SDK see the +<a class="link" href="howto-depend-on-polygene.html" title="Depend on Polygeneâ¢">dedicated tutorial</a>.</p><div class="section" title="Gradle"><div class="titlepage"><div><div><h4 class="title"><a id="_gradle"></a>Gradle</h4></div></div></div><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>All major Java IDEs have great Gradle support. +Visit the <a class="ulink" href="http://www.gradle.org/tooling" target="_top">Gradle Tooling</a> page to learn how to import the Polygene⢠SDK build into your +favorite IDE.</p></div><p>Polygene⢠community migrated away from Maven after several years of frustration, especially around release management, +versioning and cross-module dependency resolution issues, in Feb 2011. +The tool of choice is now Gradle, and it doesnât require any installation, there are <code class="literal">gradlew</code> and <code class="literal">gradlew.bat</code> in +the root folder of the Polygene⢠SDK that will bootstrap Gradle if not done so already.</p><p>If you are new to Gradle, you should keep the <a class="ulink" href="http://www.gradle.org/documentation" target="_top">documentation</a> at hands.</p><p>Build System configuration is done through Gradle properties. +This can be done in many ways, see +<a class="ulink" href="http://gradle.org/docs/current/userguide/tutorial_this_and_that.html#sec:gradle_properties_and_system_properties" target="_top">Gradle properties and system properties</a>.</p></div><div class="section" title="Main tasks"><div class="titlepage"><div><div><h4 class="title"><a id="_main_tasks"></a>Main tasks</h4></div></div></div><p>The Polygene⢠SDK project has tasks that work with the whole SDK.</p><div class="variablelist"><dl><dt><span class="term"> +downloadDependencies +</span></dt><dd>Resolve, download and cache all needed dependencies. +Useful to go offline.</dd></dl></div><p title="/gradlew::"><strong>/gradlew:: </strong>+</p><p>The default build, triggered when running gradle without any command line arguments, compiles the code and run the +tests, but nothing else. A quick way to check that nothing broke.</p><p title="/gradlew clean::"><strong>/gradlew clean:: </strong>+</p><p>Clean up of all build output and restore the code base to a fresh state.</p><p title="/gradlew assemble::"><strong>/gradlew assemble:: </strong>+</p><p>Produces all the archives, javadocs, manuals and website content. +Global output is generated into <code class="literal">distributions/build</code>.</p><p title="/gradlew check::"><strong>/gradlew check:: </strong>+</p><p>Run the tests and other checks like checkstyle. +Global reports are generated in <code class="literal">reports/build/reports</code>.</p><p title="/gradlew build::"><strong>/gradlew build:: </strong>+</p><p>Equivalent to <code class="literal">./gradlew assemble check</code></p><p title="/gradlew checkDistributions::"><strong>/gradlew checkDistributions:: </strong>+</p><p>Run global checks against the assembled distributions. +Can take a while.</p><div class="variablelist"><dl><dt><span class="term"> +install +</span></dt><dd>Is roughly the same as Mavenâs install goal. +It produces the test reports, javadocs and installs all the Jars into the local disk repository, for consumption +by other applications.</dd></dl></div></div><div class="section" title="Other tasks"><div class="titlepage"><div><div><h4 class="title"><a id="_other_tasks"></a>Other tasks</h4></div></div></div><p>In addition to that, some submodules have specific tasks. +To see all available tasks, issue the following command:</p><pre class="programlisting brush: bash">./gradlew tasks</pre><p>All available tasks from all modules of the SDK are shown. +If you want to narrow your exploration to submodules use the following:</p><pre class="programlisting brush: bash">./gradlew :test:performance:tasks +./gradlew :release:tasks</pre><p>These examples will respectively output all gradle tasks available in the <code class="literal">:tests:performance</code> module where you should find +the <code class="literal">performanceTest</code> task that runs the Polygene⢠performance test suite and the <code class="literal">:release</code> module tasks.</p><p><code class="literal">tasks</code> itself is a task, in the same way we can target module(s) with tasks, e.g.:</p><pre class="programlisting brush: bash">./gradlew :core:check :libraries:alarm:check</pre></div><div class="section" title="Versions"><div class="titlepage"><div><div><h4 class="title"><a id="_versions"></a>Versions</h4></div></div></div><p>By default, the build system produces a "zero build". +It means that there is no version assigned to the build, and a "0" is used in the produced artifacts. +This is due to our disagreement (with Maven community) that the "next" version name/number is known prior to +the release. +This is in our opinion a delayed decision. +To build a particular version, you specify a <code class="literal">version</code> property on the command-line, like</p><pre class="programlisting brush: bash">./gradlew -Dversion=2.0-FLAVOUR install</pre><p>If a <code class="literal">version</code> property is not defined, the build system will refuse to make a release and upload. +It will also try hard to do less and not get in your way.</p></div><div class="section" title="Tests"><div class="titlepage"><div><div><h4 class="title"><a id="_tests"></a>Tests</h4></div></div></div><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>See the <a class="ulink" href="https://builds.apache.org/view/P/view/Polygene/" target="_top">Polygene⢠Continuous Integration</a> for current tests results</p></div><p>Unit and integration tests are located near the code under test. +Youâll find theses tests across the whole SDK.</p><div class="section" title="Unit tests requiring external services"><div class="titlepage"><div><div><h5 class="title"><a id="_unit_tests_requiring_external_services"></a>Unit tests requiring external services</h5></div></div></div><p>Among unit tests, some require an external service to be run. +For example, the MongoDB EntityStore extension requires an actual MongoDB server to run its tests.</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>The HTML test reports generated by Gradle shows skipped tests.</p></div><p>All thoses tests should be part of the default build and check if the service is available at its default location +on <code class="literal">localhost</code> and skip if not. +This is easily achieved using <a class="ulink" href="http://junit.sourceforge.net/javadoc/org/junit/Assume.html" target="_top">JUnit assumptions</a>.</p><p>Weâll list here services that the unit tests will use if available.</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> +Memcached, ASCII protocol, no authentication on <code class="literal">localhost:4444</code> for <code class="literal">extensions/cache-memcache</code> +</li><li class="listitem"> +MongoDB without authentication on <code class="literal">localhost:27017</code> for <code class="literal">extensions/entitystore-mongodb</code> +</li><li class="listitem"> +Riak without authentication on <code class="literal">localhost:8087</code> for <code class="literal">extensions/entitystore-riak</code> +</li><li class="listitem"> +Redis without authentication on <code class="literal">localhost:4444</code> for <code class="literal">extensions/entitystore-redis</code> +</li><li class="listitem"> +PostgreSQL for <code class="literal">extensions/entitystore-sql</code> and <code class="literal">extensions/indexing-sql</code> (need setup, see test source) +</li><li class="listitem"> +MySQL for <code class="literal">extensions/entitystore-sql</code> (need setup, see test source) +</li></ul></div></div><div class="section" title="Performance tests"><div class="titlepage"><div><div><h5 class="title"><a id="_performance_tests"></a>Performance tests</h5></div></div></div><p>Performance tests provide performance mesurements for typical Polygene⢠use cases. +They are not part of the default build and are located in the <code class="literal">tests/performance</code> directory of the SDK.</p><p>They can be run with the following Gradle command:</p><pre class="programlisting brush: bash">./gradlew :tests:performance:performanceTest</pre><p>Results will then be available in the test reports.</p></div></div><div class="section" title="Documentation generation"><div class="titlepage"><div><div><h4 class="title"><a id="_documentation_generation"></a>Documentation generation</h4></div></div></div><p>The build generates a documentation minisite:</p><pre class="programlisting brush: bash">./gradlew :manual:assemble</pre><p>Output is in <code class="literal">~/manual/build/docs/website</code>.</p><p>Youâll need Asciidoc and docbook-xsl installed.</p></div><div class="section" title="Build for releases"><div class="titlepage"><div><div><h4 class="title"><a id="_build_for_releases"></a>Build for releases</h4></div></div></div><div class="important " title="Important" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Important</h3><p>Remember that if a <code class="literal">version</code> property is not defined, the build system will refuse to make a release and upload.</p></div><p>The Polygene⢠SDK build system is setup for an easy release process. +This is very useful to the Polygene⢠Core Team but can also be useful to third parties that want to cut a in-house release. +In this regard, we try to make every aspect of the release process usable for such cases.</p><p>The following sections describe various aspects of the release process. +By default you need to have a proper PGP setup, see below.</p><div class="section" title="Release Criteria"><div class="titlepage"><div><div><h5 class="title"><a id="_release_criteria"></a>Release Criteria</h5></div></div></div><p>The Polygene⢠SDK modules are of varying maturity level and we try to maintain a STATUS (<code class="literal">dev-status.xml</code>) file indicating +how good the codebase, documentation and unit tests are for each of the modules. This is highly subjective and +potentially different individuals will judge this differently, but at least it gives a ballpark idea of the situation +for our users.</p><p>The Polygene⢠SDK build system use the values from the <code class="literal">dev-status.xml</code> files to filter out non-releasable modules out for +the <code class="literal">javadocs</code> and <code class="literal">uploadArchives</code> root project tasks. +Moreover, the <code class="literal">release</code> task ensure that no releasable module depends on module(s) that donât fit the release criteria +and throw a detailed exception if need be.</p><p>This can be relaxed by adding <code class="literal">-x checkReleaseSpec</code> arguments to gradle invocation.</p></div><div class="section" title="Signing"><div class="titlepage"><div><div><h5 class="title"><a id="_signing"></a>Signing</h5></div></div></div><p>Artifact signing is done using PGP. +You need to provide Gradle the following properties, <code class="literal">~/.gradle/gradle.properties</code> is a good place:</p><pre class="literallayout">signing.keyId=FB751943 +signing.password=foobar +signing.secretKeyRingFile=/home/foo/.gnupg/secring.gpg</pre><p>You can skip the signing process by adding <code class="literal">-x signArchives</code> arguments to gradle invocation.</p></div><div class="section" title="Artifact Upload"><div class="titlepage"><div><div><h5 class="title"><a id="_artifact_upload"></a>Artifact Upload</h5></div></div></div><p>Artifact upload behavior depends on the version assigned to the build.</p><p>By default RELEASES are signed, SNAPSHOTS are not. +Signing can be turned on or off by setting the <code class="literal">uploadSigned</code> property to false.</p><p>By default RELEASES must satisfy ReleaseSpecification, SNAPSHOT donât. +ReleaseSpecification usage can be turned on or off by setting the <code class="literal">uploadReleaseSpec</code> property to false.</p><p>By default RELEASES and SNAPHOTS are uploaded using HTTP. +Used Wagon can be overriden by setting the <code class="literal">uploadWagon</code> property.</p><p>By default RELEASES and SNAPSHOTS are uploaded to the Apache Nexus. +Target repository can be overriden by setting the <code class="literal">uploadRepository</code> property.</p><p>No username/password is provided by default. +If needed set them using the <code class="literal">uploadUsername</code> and <code class="literal">uploadPassword</code> properties.</p><p>For example here is how to deploy all artifacts as unsigned SNAPSHOTs to a given repository:</p><pre class="programlisting brush: bash">./gradlew uploadArchives -Dversion=3.2.1-SNAPSHOT -PuploadReleaseSpec=false \ + -PuploadWagon=what:ever:wagon -PuploadRepository=http://what.ever.repository/url \ + -PuploadUsername=foo -PuploadPassword=bar</pre><p>And here is how to deploy a signed release to the local filesystem:</p><pre class="programlisting brush: bash">./gradlew uploadArchives -Dversion=3.2.1 -PuploadRepository=file:///path/to/local/repository</pre><p>See the <a class="ulink" href="http://www.gradle.org/docs/current/userguide/maven_plugin.html#wagonLibs" target="_top">Gradle documentation</a> about +supported protocols.</p></div></div></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="footer"><p> + Copyright © 2015 The Apache Software Foundation, Licensed under the <a href="http://www.apache.org/licenses/" target="_blank">Apache License, Version 2.0</a>. + <br /><small> + Apache Polygene, Polygene, Apache, the Apache feather logo, and the Apache Polygene project logo are trademarks of The Apache Software Foundation.<br /> + All other marks mentioned may be trademarks or registered trademarks of their respective owners. + </small></p></div></body></html> \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/polygene-website/blob/ba3a0fac/content/java/develop/community-docs.html ---------------------------------------------------------------------- diff --git a/content/java/develop/community-docs.html b/content/java/develop/community-docs.html new file mode 100644 index 0000000..1209af1 --- /dev/null +++ b/content/java/develop/community-docs.html @@ -0,0 +1,203 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Polygene⢠Documentation</title><link rel="stylesheet" type="text/css" href="css/style.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /><link rel="home" href="index.html" title="" /><link rel="up" href="tutorials.html" title="Tutorials" /><link rel="prev" href="build-system.html" title="Polygene⢠Build System" /><link rel="next" href="releasing-apache.html" title="Releasing Polygeneâ¢" /> + + +<!-- favicon --> + +<link rel="shortcut icon" href="http://polygene.apache.org/favicon.ico" type="image/vnd.microsoft.icon" /> +<link rel="icon" href="http://polygene.apache.org/favicon.ico" type="image/x-icon" /> + +<!-- style --> + +<link href="css/shCore.css" rel="stylesheet" type="text/css" /> +<link href="css/shCoreEclipse.css" rel="stylesheet" type="text/css" /> +<link href="css/shThemeEclipse.css" rel="stylesheet" type="text/css" /> +<link href="css/polygene.css" rel="stylesheet" type="text/css" /> + +<!-- Syntax Highlighter --> + +<script type="text/javascript" src="js/shCore.js"></script> +<script type="text/javascript" src="js/shBrushJava.js"></script> +<script type="text/javascript" src="js/shBrushScala.js"></script> +<script type="text/javascript" src="js/shBrushJScript.js"></script> +<script type="text/javascript" src="js/shBrushBash.js"></script> +<script type="text/javascript" src="js/shBrushPlain.js"></script> +<script type="text/javascript" src="js/shBrushXml.js"></script> +<script type="text/javascript" src="js/shBrushGroovy.js"></script> +<script type="text/javascript" src="js/shBrushPython.js"></script> +<script type="text/javascript" src="js/shBrushRuby.js"></script> +<script type="text/javascript" src="js/shBrushCSharp.js"></script> + +<script type="text/javascript"> + SyntaxHighlighter.defaults['tab-size'] = 4; + SyntaxHighlighter.defaults['gutter'] = false; + SyntaxHighlighter.defaults['toolbar'] = false; + SyntaxHighlighter.all() +</script> + +<!-- JQuery --> + +<script type="text/javascript" src="js/jquery-1.6.4.min.js"></script> + +<!-- Image Scaler --> + +<script type="text/javascript" src="js/imagescaler.js"></script> + +<!-- Table Styler --> + +<script type="text/javascript" src="js/tablestyler.js"></script> + +<!-- Apache Polygene WebSite Progressive Enhancement --> + +<link href="css/progressive-enhancement.css" rel="stylesheet" type="text/css" /> +<script type="text/javascript" src="js/jquery.scrollTo-1.4.2.js"></script> +<script type="text/javascript" src="js/progressive-enhancement.js"></script> + +<!-- Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-62007352-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + + </head><body><div xmlns="" xmlns:exsl="http://exslt.org/common" class="logo"><a href="index.html"><img src="images/logo-standard.png" /></a></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="top-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="index.html#home">Polygeneâ¢</a></span></dt><dt><span class="section"><a href="intro.html">Introduction</a></span></dt><dt><span class="section"><span xmlns="" href="tutorials.html">Tutorials</span></span></dt><dt><span class="section"><a href="javadocs.html">Javadoc</a></span></dt><dt><span class="section"><a href="samples.html">Samples</a></span></dt><dt><span class="section"><a href="core.html">Core</a></span></dt><dt><span class="section"><a href="libraries.html">Libraries</a></span></dt><dt><span class="section"><a href="extensions.html">Extensions</a></span></dt><dt><span class="section"><a href="tools.html">Tools</a></span></dt><dt><span class="section"><a href="glossary.ht ml">Glossary </a></span></dt></dl></div></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="sub-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="tutorials.html#_overview">Overview</a></span></dt><dt><span class="section"><a href="two-minutes-intro.html">Polygene⢠in 2 minutes</a></span></dt><dt><span class="section"><a href="ten-minutes-intro.html">Polygene⢠in 10 minutes</a></span></dt><dt><span class="section"><a href="thirty-minutes-intro.html">Polygene⢠in 30 minutes</a></span></dt><dt><span class="section"><a href="howto-depend-on-polygene.html">Depend on Polygeneâ¢</a></span></dt><dt><span class="section"><a href="howto-assemble-application.html">Assemble an Application</a></span></dt><dt><span class="section"><a href="tut-composites.html">Transient Composites Tutorial</a></span></dt><dt><span class="section"><a href="tut-services.html">Services Composites Tutorial</a></span></dt><dt><span class="section"><a href="howto-contextual-fragments.html">Use contextual fragments</a></span></dt><dt><span class="section"><a href="howto-leverage-properties.html">Leverage Properties</a></span></dt><dt><span class="section"><a href="howto-create-constraint.html">Create a Constraint</a></span></dt><dt><span class="section"><a href="howto-create-concern.html">Create a Concern</a></span></dt><dt><span class="section"><a href="howto-create-sideeffect.html">Create a SideEffect</a></span></dt><dt><span class="section"><a href="howto-create-entity.html">Create an Entity</a></span></dt><dt><span class="section"><a href="howto-configure-service.html">Configure a Service</a></span></dt><dt><span class="section"><a href="howto-invocation-annotation.html">Use @Invocation</a></span></dt><dt><span class="section"><a href="build-system.html">Polygene⢠Build System</a></span></dt><dt><span class="section"><span xmlns="" href="community-docs.html">Polygene⢠Documentation</span></span></dt><dt><span class="sectio n"><a href="releasing-apache.html">Releasing Polygeneâ¢</a></span></dt></dl></div></div><div class="section" title="Polygene⢠Documentation"><div class="titlepage"><div><div><h3 class="title"><a id="community-docs"></a>Polygene⢠Documentation</h3></div></div></div><p>The documents use the asciidoc format, see:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> +<a class="ulink" href="http://www.methods.co.nz/asciidoc/" target="_top">Aciidoc Reference</a> +</li><li class="listitem"> +<a class="ulink" href="http://powerman.name/doc/asciidoc" target="_top">AsciiDoc cheatsheet</a> +</li></ul></div><p>The cheatsheet is really useful!</p><p>You need to install <code class="literal">asciidoc</code> and <code class="literal">docbook-xsl</code>.</p><div class="section" title="Overall Flow"><div class="titlepage"><div><div><h4 class="title"><a id="community-docs-overall-flow"></a>Overall Flow</h4></div></div></div><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>To generate the website locally use <code class="literal">./gradlew -p manual website</code>. Output is in <code class="literal">~/manual/build/docs/website</code>.</p></div><p>Each (sub)project has its own documentation, in <span class="emphasis"><em>src/docs/</em></span> and all the Asciidoc documents have the <code class="literal">.txt</code> file extension.</p><p>The documents can use code snippets which will extract code from the project. This is preferred way to include +source code in the documentation, since any refactoring will be reflected in the documentation.</p><p>The above files are all consumed by the build of the manual (by adding them as dependencies). +To get content included in the manual, it has to be explicitly included by a document in the manual as well.</p><p>The whole documentation set is generated from the <span class="emphasis"><em>*manual*</em></span> module in the SDK, and we are currently only creating the website. +The User Guide and Reference Manual are future projects.</p></div><div class="section" title="Headings and document structure"><div class="titlepage"><div><div><h4 class="title"><a id="_headings_and_document_structure"></a>Headings and document structure</h4></div></div></div><p>Each document starts over with headings from level zero (the document title). +Each document should have an id. +In some cases sections in the document need to have idâs as well, this depends on where they fit in the overall structure. +To be able to link to content, it has to have an id. +Missing idâs in mandatory places will produce warnings, or even fail (depending on severity), the build.</p><p>This is how a document should start:</p><pre class="programlisting brush: plain">[[unique-id-verbose-is-ok,Remember This Caption]] += The Document Title =</pre><p>To push the headings down to the right level in the output, the <code class="literal">leveloffset</code> +attribute is used when including the document inside of another document.</p><p>Subsequent headings in a document should use the following syntax:</p><pre class="programlisting brush: plain">== Subheading == + +... content here ... + +=== Subsubheading === + +content here ...</pre><p>Asciidoc comes with one more syntax for headings, but in this project itâs not used.</p></div><div class="section" title="Writing"><div class="titlepage"><div><div><h4 class="title"><a id="_writing"></a>Writing</h4></div></div></div><p>Try to put one sentence on each line. +Lines without empty lines between them still belongs to the same paragraph. +This makes it easy to move content around, and also easy to spot (too) long sentences.</p></div><div class="section" title="Gotchas"><div class="titlepage"><div><div><h4 class="title"><a id="_gotchas"></a>Gotchas</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> +A chapter canât be empty. (the build will fail on the docbook xml validity check) +</li><li class="listitem"> +The document title should be "underlined" by the same + number of <code class="literal">=</code> as there are characters in the title. +</li><li class="listitem"> +Always leave a blank line at the end of documents + (or the title of the next document might end up in the last + paragraph of the document) +</li><li class="listitem"> +As <code class="literal">{}</code> are used for Asciidoc attributes, everything inside will be treated as an attribute. + What you have to do is to escape the opening brace: <code class="literal">\{</code>. + If you donât, the braces and the text inside them will be removed without any warning being issued! +</li></ul></div></div><div class="section" title="Links"><div class="titlepage"><div><div><h4 class="title"><a id="_links"></a>Links</h4></div></div></div><p>To link to other parts of the manual the id of the target is used. +This is how such a reference looks:</p><pre class="programlisting brush: plain"><<community-docs-overall-flow>></pre><p>Which will render like: <a class="xref" href="community-docs.html#community-docs-overall-flow" title="Overall Flow">Documentation Flow</a></p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Just write "see <<target-id>>" and similar, thatâs enough in most cases.</p></div><p>If you need to link to another document with your own link text, this is what to do:</p><pre class="programlisting brush: plain"><<target-id, link text that fits in the context>></pre><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Having lots of linked text may work well in a web context but is a pain in print, and we aim for both!</p></div><p>External links are added like this:</p><pre class="programlisting brush: plain">https://polyg ene.apache.org/[Link text here]</pre><p>Which renders like: <a class="ulink" href="https://polygene.apache.org/" target="_top">Link text here</a></p><p>For short links it may be better not to add a link text, just do:</p><pre class="programlisting brush: plain">https://polygene.apache.org/</pre><p>Which renders like: <a class="ulink" href="https://polygene.apache.org/" target="_top">https://polygene.apache.org/</a></p><p>Itâs ok to have a dot right after the URL, it wonât be part of the link.</p><pre class="programlisting brush: plain">https://polygene.apache.org/.</pre><p>Which renders like: <a class="ulink" href="https://polygene.apache.org/" target="_top">https://polygene.apache.org/</a>.</p></div><div class="section" title="Text Formatting"><div class="titlepage"><div><div><h4 class="title"><a id="_text_formatting"></a>Text Formatting</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> +<span class="strong"><strong>Bold</strong></span> - just donât do it, the editor in charge is likely to remove it anyhow! +</li><li class="listitem"> +_Italics_ is rendered as <span class="emphasis"><em>Italics</em></span> +</li><li class="listitem"> ++methodName()+ is rendered as <code class="literal">methodName()</code> and is used for literals as well +</li><li class="listitem"> +`command` is rendered as <code class="literal">command</code> (typically used for command-line) +</li><li class="listitem"> +'my/path/' is rendered as <span class="emphasis"><em>my/path/</em></span> (used for file names and paths) +</li></ul></div></div><div class="section" title="Admonitions"><div class="titlepage"><div><div><h4 class="title"><a id="_admonitions"></a>Admonitions</h4></div></div></div><p>These are very useful and should be used where appropriate. +Choose from the following (write all caps and no, we canât easily add new ones):</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Note.</p></div><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>Tip.</p></div><div class="important" title="Important" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Important</h3><p>Important</p></div><div class="caution" title="Caution" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Caution</h3><p>Caution</p></div><div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>Warning</p></div><p>Hereâs how itâs done:</p><pre class="programlisting brush: plain">NOTE: Note.</pre><p>A multiline variation:</p><pre class="programlisting brush: plain">[TIP] +Tiptext. +Line 2.</pre><p>Which is rendered as:</p><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>Tiptext. +Line 2.</p></div></div><div class="section" title="Images"><div class="titlepage"><div><div><h4 class="title"><a id="_images"></a>Images</h4></div></div></div><div class="important" title="Important" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Important</h3><p><span class="emphasis"><em>All images in the entire manual share the same namespace.</em></span></p></div><div class="section" title="Images Files"><div class="titlepage"><div><div><h5 class="title"><a id="_images_files"></a>Images Files</h5></div></div></div><p>To include an image file, make sure it resides in the <span class="emphasis"><em>images/</em></span> directory relative to the document youâre including it from. +Then go:</p><pre class="programlisting brush: plain">image::logo-standard.png[]</pre><p>Which is rendered as:</p><div class="informalfigure"><a class="ulink" href="images/logo-standard.png" target="_top"> +<span class="inlinemediaobject"><img src="images/logo-standard.png" alt="logo-standard.png" /></span> +</a></div><p>Please note that the <span class="emphasis"><em>images/</em></span> directory is added automatically and not part of the link.</p><p>There are also global resources, residing in <span class="emphasis"><em>manual/src/resources</em></span>, which will be copied to the root of the documentation.</p></div></div><div class="section" title="Code Snippets"><div class="titlepage"><div><div><h4 class="title"><a id="_code_snippets"></a>Code Snippets</h4></div></div></div><div class="section" title="Import from codebase"><div class="titlepage"><div><div><h5 class="title"><a id="_import_from_codebase"></a>Import from codebase</h5></div></div></div><p>Most source code that is included in the documentation should be extract via <code class="literal">SNIPPET</code> markers and then included in document with;</p><pre class="programlisting brush: plain"> [snippet,java] + ----------- + source=tutorials/introduction/tenminutes/src/main/java/org/apache/polygene/demo/tenminute/OrderEntity.java + tag=mainClass + -----------</pre><p>The source file is relative to the SDK root, and the <span class="emphasis"><em>tag</em></span> is defined in the source file. +The above could be bringing in content that looks like;</p><pre class="programlisting brush: plain">package org.apache.polygene.demo.tenminute; + +import org.apache.polygene.api.concern.Concerns; +import org.apache.polygene.api.entity.EntityComposite; +import org.apache.polygene.api.sideeffect.SideEffects; + +// START SNIPPET: sideEffect +@SideEffects( MailNotifySideEffect.class ) +// START SNIPPET: mainClass +@Concerns({PurchaseLimitConcern.class, InventoryConcern.class}) +public interface OrderEntity + extends Order, HasSequenceNumber, HasCustomer, + HasLineItems, Confirmable, EntityComposite +{ +// END SNIPPET: sideEffect +} +// END SNIPPET: mainClass</pre><p>which will be rendered as;</p><pre class="programlisting brush: java">@Concerns( { PurchaseLimitConcern.class, InventoryConcern.class } ) +public interface OrderEntity + extends Order, Confirmable, + HasSequenceNumber, HasCustomer, HasLineItems, + EntityComposite +{ +} +</pre><p>Note that +1. The START and END doesnât need to be matching. +1. The AsciiDoc plugin will remove the <span class="emphasis"><em>START SNIPPET</em></span> and <span class="emphasis"><em>END SNIPPET</em></span> lines. +1. If you have more than one START/END section with the same tag, the plugin will insert a "[â¦snipâ¦]" for the excluded lines.</p></div><div class="section" title="Explicitly defined in the document"><div class="titlepage"><div><div><h5 class="title"><a id="_explicitly_defined_in_the_document"></a>Explicitly defined in the document</h5></div></div></div><div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>Use this kind of code snippets as little as possible. + They are well known to get out of sync with reality after a while.</p></div><p>This is how to do it:</p><pre class="programlisting brush: plain"> [source,java] + ---- + HashMap<String,String> result = new HashMap<String,String>(); + for( String name : names ) + { + if( !"".equals( name ) ) + result.put( name, value ); + } + ----</pre><p>Which is rendered as:</p><pre class="programlisting brush: java"> HashMap<String,String> result = new HashMap<String,String>(); + for( String name : names ) + { + if( !"".equals( name ) ) + result.put( name, value ); + }</pre></div><div class="section" title="Source code Highlighting"><div class="titlepage"><div><div><h5 class="title"><a id="_source_code_highlighting"></a>Source code Highlighting</h5></div></div></div><p>If thereâs no suitable syntax highlighter, just omit the language: <code class="literal">[source]</code>.</p><p>Currently the following syntax highlighters are enabled:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> +Bash +</li><li class="listitem"> +Groovy +</li><li class="listitem"> +Java +</li><li class="listitem"> +JavaScript +</li><li class="listitem"> +Python +</li><li class="listitem"> +Ruby +</li><li class="listitem"> +Scala +</li><li class="listitem"> +XML +</li></ul></div><p>For other highlighters we could add see <a class="ulink" href="http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/" target="_top">http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/</a>.</p></div></div><div class="section" title="Attributes"><div class="titlepage"><div><div><h4 class="title"><a id="_attributes"></a>Attributes</h4></div></div></div><p>Common attributes you can use in documents:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> +</li><li class="listitem"> +</li></ul></div><p>These can substitute part of URLs that point to for example APIdocs or source code.</p></div><div class="section" title="Toolchain"><div class="titlepage"><div><div><h4 class="title"><a id="_toolchain"></a>Toolchain</h4></div></div></div><p>Useful links when configuring the docbook toolchain:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> +<a class="ulink" href="http://www.methods.co.nz/asciidoc" target="_top">http://www.methods.co.nz/asciidoc</a> +</li><li class="listitem"> +<a class="ulink" href="http://powerman.name/doc/asciidoc" target="_top">http://powerman.name/doc/asciidoc</a> +</li><li class="listitem"> +alexgorbatchev.com/SyntaxHighlighter/manual/brushes/ +</li><li class="listitem"> +<a class="ulink" href="http://www.docbook.org/tdg/en/html/docbook.html" target="_top">http://www.docbook.org/tdg/en/html/docbook.html</a> +</li><li class="listitem"> +<a class="ulink" href="http://www.sagehill.net/docbookxsl/index.html" target="_top">http://www.sagehill.net/docbookxsl/index.html</a> +</li><li class="listitem"> +<a class="ulink" href="http://docbook.sourceforge.net/release/xsl/1.76.1/doc/html/index.html" target="_top">http://docbook.sourceforge.net/release/xsl/1.76.1/doc/html/index.html</a> +</li><li class="listitem"> +<a class="ulink" href="http://docbook.sourceforge.net/release/xsl/1.76.1/doc/fo/index.html" target="_top">http://docbook.sourceforge.net/release/xsl/1.76.1/doc/fo/index.html</a> +</li></ul></div></div></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="footer"><p> + Copyright © 2015 The Apache Software Foundation, Licensed under the <a href="http://www.apache.org/licenses/" target="_blank">Apache License, Version 2.0</a>. + <br /><small> + Apache Polygene, Polygene, Apache, the Apache feather logo, and the Apache Polygene project logo are trademarks of The Apache Software Foundation.<br /> + All other marks mentioned may be trademarks or registered trademarks of their respective owners. + </small></p></div></body></html> \ No newline at end of file
