| 
						 | 
					@ -1,5 +1,6 @@
 | 
				
			||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
					<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
				
			||||||
 | 
						xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
				
			||||||
	<modelVersion>4.0.0</modelVersion>
 | 
						<modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
	<parent>
 | 
						<parent>
 | 
				
			||||||
		<groupId>org.springframework.boot</groupId>
 | 
							<groupId>org.springframework.boot</groupId>
 | 
				
			||||||
| 
						 | 
					@ -41,7 +42,6 @@
 | 
				
			||||||
			<build>
 | 
								<build>
 | 
				
			||||||
				<plugins>
 | 
									<plugins>
 | 
				
			||||||
					<plugin>
 | 
										<plugin>
 | 
				
			||||||
						<groupId>org.apache.maven.plugins</groupId>
 | 
					 | 
				
			||||||
						<artifactId>maven-javadoc-plugin</artifactId>
 | 
											<artifactId>maven-javadoc-plugin</artifactId>
 | 
				
			||||||
						<executions>
 | 
											<executions>
 | 
				
			||||||
							<execution>
 | 
												<execution>
 | 
				
			||||||
| 
						 | 
					@ -65,9 +65,183 @@
 | 
				
			||||||
							</execution>
 | 
												</execution>
 | 
				
			||||||
						</executions>
 | 
											</executions>
 | 
				
			||||||
					</plugin>
 | 
										</plugin>
 | 
				
			||||||
 | 
										<plugin>
 | 
				
			||||||
 | 
											<groupId>org.asciidoctor</groupId>
 | 
				
			||||||
 | 
											<artifactId>asciidoctor-maven-plugin</artifactId>
 | 
				
			||||||
 | 
											<version>0.1.4</version>
 | 
				
			||||||
 | 
											<executions>
 | 
				
			||||||
 | 
												<execution>
 | 
				
			||||||
 | 
													<id>generate-docbook</id>
 | 
				
			||||||
 | 
													<phase>generate-resources</phase>
 | 
				
			||||||
 | 
													<goals>
 | 
				
			||||||
 | 
														<goal>process-asciidoc</goal>
 | 
				
			||||||
 | 
													</goals>
 | 
				
			||||||
 | 
													<configuration>
 | 
				
			||||||
 | 
														<sourceDocumentName>index.adoc</sourceDocumentName>
 | 
				
			||||||
 | 
														<backend>docbook5</backend>
 | 
				
			||||||
 | 
														<doctype>book</doctype>
 | 
				
			||||||
 | 
														<attributes>
 | 
				
			||||||
 | 
															<docinfo>true</docinfo>
 | 
				
			||||||
 | 
															<spring-boot-version>${project.version}</spring-boot-version>
 | 
				
			||||||
 | 
															<spring-boot-docs-version>${project.version}</spring-boot-docs-version>
 | 
				
			||||||
 | 
															<spring-boot-repo>${spring-boot-repo}</spring-boot-repo>
 | 
				
			||||||
 | 
															<github-tag>${github-tag}</github-tag>
 | 
				
			||||||
 | 
														</attributes>
 | 
				
			||||||
 | 
													</configuration>
 | 
				
			||||||
 | 
												</execution>
 | 
				
			||||||
 | 
											</executions>
 | 
				
			||||||
 | 
										</plugin>
 | 
				
			||||||
 | 
										<plugin>
 | 
				
			||||||
 | 
											<groupId>com.agilejava.docbkx</groupId>
 | 
				
			||||||
 | 
											<artifactId>docbkx-maven-plugin</artifactId>
 | 
				
			||||||
 | 
											<version>2.0.15</version>
 | 
				
			||||||
 | 
											<configuration>
 | 
				
			||||||
 | 
												<sourceDirectory>${basedir}/target/generated-docs</sourceDirectory>
 | 
				
			||||||
 | 
												<includes>index.xml</includes>
 | 
				
			||||||
 | 
												<xincludeSupported>true</xincludeSupported>
 | 
				
			||||||
 | 
												<chunkedOutput>false</chunkedOutput>
 | 
				
			||||||
 | 
												<foCustomization>${basedir}/src/main/docbook/xsl/pdf.xsl</foCustomization>
 | 
				
			||||||
 | 
												<useExtensions>1</useExtensions>
 | 
				
			||||||
 | 
												<highlightSource>1</highlightSource>
 | 
				
			||||||
 | 
												<highlightXslthlConfig>${basedir}/src/main/docbook/xsl/xslthl-config.xml</highlightXslthlConfig>
 | 
				
			||||||
 | 
											</configuration>
 | 
				
			||||||
 | 
											<dependencies>
 | 
				
			||||||
 | 
												<dependency>
 | 
				
			||||||
 | 
													<groupId>net.sf.xslthl</groupId>
 | 
				
			||||||
 | 
													<artifactId>xslthl</artifactId>
 | 
				
			||||||
 | 
													<version>2.1.0</version>
 | 
				
			||||||
 | 
												</dependency>
 | 
				
			||||||
 | 
												<dependency>
 | 
				
			||||||
 | 
													<groupId>net.sf.docbook</groupId>
 | 
				
			||||||
 | 
													<artifactId>docbook-xml</artifactId>
 | 
				
			||||||
 | 
													<version>5.0-all</version>
 | 
				
			||||||
 | 
													<classifier>resources</classifier>
 | 
				
			||||||
 | 
													<type>zip</type>
 | 
				
			||||||
 | 
													<scope>runtime</scope>
 | 
				
			||||||
 | 
												</dependency>
 | 
				
			||||||
 | 
											</dependencies>
 | 
				
			||||||
 | 
											<executions>
 | 
				
			||||||
 | 
												<execution>
 | 
				
			||||||
 | 
													<id>html-single</id>
 | 
				
			||||||
 | 
													<goals>
 | 
				
			||||||
 | 
														<goal>generate-html</goal>
 | 
				
			||||||
 | 
													</goals>
 | 
				
			||||||
 | 
													<phase>generate-resources</phase>
 | 
				
			||||||
 | 
													<configuration>
 | 
				
			||||||
 | 
														<htmlCustomization>${basedir}/src/main/docbook/xsl/html-singlepage.xsl</htmlCustomization>
 | 
				
			||||||
 | 
														<targetDirectory>${basedir}/target/docbook/htmlsingle</targetDirectory>
 | 
				
			||||||
 | 
														<postProcess>
 | 
				
			||||||
 | 
															<copy todir="${basedir}/target/contents/reference/htmlsingle">
 | 
				
			||||||
 | 
																<fileset dir="${basedir}/target/docbook/htmlsingle">
 | 
				
			||||||
 | 
																	<include name="**/*.html" />
 | 
				
			||||||
 | 
																</fileset>
 | 
				
			||||||
 | 
															</copy>
 | 
				
			||||||
 | 
															<copy todir="${basedir}/target/contents/reference/htmlsingle">
 | 
				
			||||||
 | 
																<fileset dir="${basedir}/src/main/docbook">
 | 
				
			||||||
 | 
																	<include name="**/*.css" />
 | 
				
			||||||
 | 
																	<include name="**/*.png" />
 | 
				
			||||||
 | 
																	<include name="**/*.gif" />
 | 
				
			||||||
 | 
																	<include name="**/*.jpg" />
 | 
				
			||||||
 | 
																</fileset>
 | 
				
			||||||
 | 
															</copy>
 | 
				
			||||||
 | 
														</postProcess>
 | 
				
			||||||
 | 
													</configuration>
 | 
				
			||||||
 | 
												</execution>
 | 
				
			||||||
 | 
												<execution>
 | 
				
			||||||
 | 
													<id>html</id>
 | 
				
			||||||
 | 
													<goals>
 | 
				
			||||||
 | 
														<goal>generate-html</goal>
 | 
				
			||||||
 | 
													</goals>
 | 
				
			||||||
 | 
													<phase>generate-resources</phase>
 | 
				
			||||||
 | 
													<configuration>
 | 
				
			||||||
 | 
														<htmlCustomization>${basedir}/src/main/docbook/xsl/html-multipage.xsl</htmlCustomization>
 | 
				
			||||||
 | 
														<targetDirectory>${basedir}/target/docbook/html</targetDirectory>
 | 
				
			||||||
 | 
														<chunkedOutput>true</chunkedOutput>
 | 
				
			||||||
 | 
														<postProcess>
 | 
				
			||||||
 | 
															<copy todir="${basedir}/target/contents/reference/html">
 | 
				
			||||||
 | 
																<fileset dir="${basedir}/target/docbook/html">
 | 
				
			||||||
 | 
																	<include name="**/*.html" />
 | 
				
			||||||
 | 
																</fileset>
 | 
				
			||||||
 | 
															</copy>
 | 
				
			||||||
 | 
															<copy todir="${basedir}/target/contents/reference/html">
 | 
				
			||||||
 | 
																<fileset dir="${basedir}/src/main/docbook">
 | 
				
			||||||
 | 
																	<include name="**/*.css" />
 | 
				
			||||||
 | 
																	<include name="**/*.png" />
 | 
				
			||||||
 | 
																	<include name="**/*.gif" />
 | 
				
			||||||
 | 
																	<include name="**/*.jpg" />
 | 
				
			||||||
 | 
																</fileset>
 | 
				
			||||||
 | 
															</copy>
 | 
				
			||||||
 | 
														</postProcess>
 | 
				
			||||||
 | 
													</configuration>
 | 
				
			||||||
 | 
												</execution>
 | 
				
			||||||
 | 
												<execution>
 | 
				
			||||||
 | 
													<id>pdf</id>
 | 
				
			||||||
 | 
													<goals>
 | 
				
			||||||
 | 
														<goal>generate-pdf</goal>
 | 
				
			||||||
 | 
													</goals>
 | 
				
			||||||
 | 
													<phase>generate-resources</phase>
 | 
				
			||||||
 | 
													<configuration>
 | 
				
			||||||
 | 
														<foCustomization>${basedir}/src/main/docbook/xsl/pdf.xsl</foCustomization>
 | 
				
			||||||
 | 
														<targetDirectory>${basedir}/target/docbook/pdf</targetDirectory>
 | 
				
			||||||
 | 
														<postProcess>
 | 
				
			||||||
 | 
															<copy todir="${basedir}/target/contents/reference">
 | 
				
			||||||
 | 
																<fileset dir="${basedir}/target/docbook">
 | 
				
			||||||
 | 
																	<include name="**/*.pdf" />
 | 
				
			||||||
 | 
																</fileset>
 | 
				
			||||||
 | 
															</copy>
 | 
				
			||||||
 | 
															<move file="${basedir}/target/contents/reference/pdf/index.pdf"
 | 
				
			||||||
 | 
																tofile="${basedir}/target/contents/reference/pdf/spring-boot-reference.pdf" />
 | 
				
			||||||
 | 
														</postProcess>
 | 
				
			||||||
 | 
													</configuration>
 | 
				
			||||||
 | 
												</execution>
 | 
				
			||||||
 | 
												<execution>
 | 
				
			||||||
 | 
													<id>epub</id>
 | 
				
			||||||
 | 
													<goals>
 | 
				
			||||||
 | 
														<goal>generate-epub3</goal>
 | 
				
			||||||
 | 
													</goals>
 | 
				
			||||||
 | 
													<phase>generate-resources</phase>
 | 
				
			||||||
 | 
													<configuration>
 | 
				
			||||||
 | 
														<epubCustomization>${basedir}/src/main/docbook/xsl/epub.xsl</epubCustomization>
 | 
				
			||||||
 | 
														<targetDirectory>${basedir}/target/docbook/epub</targetDirectory>
 | 
				
			||||||
 | 
														<postProcess>
 | 
				
			||||||
 | 
															<copy todir="${basedir}/target/contents/reference/epub">
 | 
				
			||||||
 | 
																<fileset dir="${basedir}/target/docbook">
 | 
				
			||||||
 | 
																	<include name="**/*.epub" />
 | 
				
			||||||
 | 
																</fileset>
 | 
				
			||||||
 | 
															</copy>
 | 
				
			||||||
 | 
															<move file="${basedir}/target/contents/reference/epub/index.epub"
 | 
				
			||||||
 | 
																tofile="${basedir}/target/contents/reference/epub/spring-boot-reference.epub" />
 | 
				
			||||||
 | 
														</postProcess>
 | 
				
			||||||
 | 
													</configuration>
 | 
				
			||||||
 | 
												</execution>
 | 
				
			||||||
 | 
											</executions>
 | 
				
			||||||
 | 
										</plugin>
 | 
				
			||||||
					<plugin>
 | 
										<plugin>
 | 
				
			||||||
						<groupId>org.apache.maven.plugins</groupId>
 | 
											<groupId>org.apache.maven.plugins</groupId>
 | 
				
			||||||
						<artifactId>maven-antrun-plugin</artifactId>
 | 
											<artifactId>maven-antrun-plugin</artifactId>
 | 
				
			||||||
 | 
											<dependencies>
 | 
				
			||||||
 | 
												<dependency>
 | 
				
			||||||
 | 
													<groupId>ant-contrib</groupId>
 | 
				
			||||||
 | 
													<artifactId>ant-contrib</artifactId>
 | 
				
			||||||
 | 
													<version>1.0b3</version>
 | 
				
			||||||
 | 
													<exclusions>
 | 
				
			||||||
 | 
														<exclusion>
 | 
				
			||||||
 | 
															<groupId>ant</groupId>
 | 
				
			||||||
 | 
															<artifactId>ant</artifactId>
 | 
				
			||||||
 | 
														</exclusion>
 | 
				
			||||||
 | 
													</exclusions>
 | 
				
			||||||
 | 
												</dependency>
 | 
				
			||||||
 | 
												<dependency>
 | 
				
			||||||
 | 
													<groupId>org.apache.ant</groupId>
 | 
				
			||||||
 | 
													<artifactId>ant-nodeps</artifactId>
 | 
				
			||||||
 | 
													<version>1.8.1</version>
 | 
				
			||||||
 | 
												</dependency>
 | 
				
			||||||
 | 
												<dependency>
 | 
				
			||||||
 | 
													<groupId>org.tigris.antelope</groupId>
 | 
				
			||||||
 | 
													<artifactId>antelopetasks</artifactId>
 | 
				
			||||||
 | 
													<version>3.2.10</version>
 | 
				
			||||||
 | 
												</dependency>
 | 
				
			||||||
 | 
											</dependencies>
 | 
				
			||||||
						<executions>
 | 
											<executions>
 | 
				
			||||||
							<execution>
 | 
												<execution>
 | 
				
			||||||
								<id>package-and-attach-docs-zip</id>
 | 
													<id>package-and-attach-docs-zip</id>
 | 
				
			||||||
| 
						 | 
					@ -77,10 +251,42 @@
 | 
				
			||||||
								</goals>
 | 
													</goals>
 | 
				
			||||||
								<configuration>
 | 
													<configuration>
 | 
				
			||||||
									<target>
 | 
														<target>
 | 
				
			||||||
										<zip destfile="${project.build.directory}/${project.name}-${project.version}.zip">
 | 
															<zip
 | 
				
			||||||
											<zipfileset src="${project.build.directory}/${project.name}-${project.version}-javadoc.jar" prefix="api" />
 | 
																destfile="${project.build.directory}/${project.name}-${project.version}.zip">
 | 
				
			||||||
 | 
																<zipfileset
 | 
				
			||||||
 | 
																	src="${project.build.directory}/${project.name}-${project.version}-javadoc.jar"
 | 
				
			||||||
 | 
																	prefix="api" />
 | 
				
			||||||
 | 
																<fileset dir="${project.build.directory}/contents" />
 | 
				
			||||||
										</zip>
 | 
															</zip>
 | 
				
			||||||
 | 
														</target>
 | 
				
			||||||
 | 
													</configuration>
 | 
				
			||||||
 | 
												</execution>
 | 
				
			||||||
 | 
												<execution>
 | 
				
			||||||
 | 
													<id>setup-maven-properties</id>
 | 
				
			||||||
 | 
													<phase>validate</phase>
 | 
				
			||||||
 | 
													<goals>
 | 
				
			||||||
 | 
														<goal>run</goal>
 | 
				
			||||||
 | 
													</goals>
 | 
				
			||||||
 | 
													<configuration>
 | 
				
			||||||
 | 
														<exportAntProperties>true</exportAntProperties>
 | 
				
			||||||
 | 
														<target>
 | 
				
			||||||
 | 
															<taskdef resource="net/sf/antcontrib/antcontrib.properties" />
 | 
				
			||||||
 | 
															<taskdef name="stringutil" classname="ise.antelope.tasks.StringUtilTask" />
 | 
				
			||||||
 | 
															<var name="version-type" value="${project.version}" />
 | 
				
			||||||
 | 
															<propertyregex property="version-type" override="true"
 | 
				
			||||||
 | 
																input="${version-type}" regexp=".*\.(.*)" replace="\1" />
 | 
				
			||||||
 | 
															<propertyregex property="version-type" override="true"
 | 
				
			||||||
 | 
																input="${version-type}" regexp="(M)\d+" replace="MILESTONE" />
 | 
				
			||||||
 | 
															<propertyregex property="version-type" override="true"
 | 
				
			||||||
 | 
																input="${version-type}" regexp="(RC)\d+" replace="MILESTONE" />
 | 
				
			||||||
 | 
															<propertyregex property="version-type" override="true"
 | 
				
			||||||
 | 
																input="${version-type}" regexp="BUILD-(.*)" replace="SNAPSHOT" />
 | 
				
			||||||
 | 
															<stringutil string="${version-type}" property="spring-boot-repo">
 | 
				
			||||||
 | 
																<lowercase />
 | 
				
			||||||
 | 
															</stringutil>
 | 
				
			||||||
 | 
															<var name="github-tag" value="v1.0.0.RELEASE" />
 | 
				
			||||||
 | 
															<propertyregex property="github-tag" override="true"
 | 
				
			||||||
 | 
																input="${github-tag}" regexp=".*SNAPSHOT" replace="master" />
 | 
				
			||||||
									</target>
 | 
														</target>
 | 
				
			||||||
								</configuration>
 | 
													</configuration>
 | 
				
			||||||
							</execution>
 | 
												</execution>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					*.html
 | 
				
			||||||
 | 
					*.css
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,20 @@
 | 
				
			||||||
 | 
					require 'asciidoctor'
 | 
				
			||||||
 | 
					require 'erb'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					guard 'shell' do
 | 
				
			||||||
 | 
						watch(/.*\.adoc$/) {|m|
 | 
				
			||||||
 | 
							Asciidoctor.render_file('index.adoc', \
 | 
				
			||||||
 | 
								:in_place => true, \
 | 
				
			||||||
 | 
								:safe => Asciidoctor::SafeMode::UNSAFE, \
 | 
				
			||||||
 | 
								:attributes=> { \
 | 
				
			||||||
 | 
									'source-highlighter' => 'prettify', \
 | 
				
			||||||
 | 
									'icons' => 'font', \
 | 
				
			||||||
 | 
									'linkcss'=> 'true', \
 | 
				
			||||||
 | 
									'copycss' => 'true', \
 | 
				
			||||||
 | 
									'doctype' => 'book'})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					guard 'livereload' do
 | 
				
			||||||
 | 
						watch(%r{^.+\.(css|js|html)$})
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,249 @@
 | 
				
			||||||
 | 
					:numbered!:
 | 
				
			||||||
 | 
					[appendix]
 | 
				
			||||||
 | 
					[[common-application-properties]]
 | 
				
			||||||
 | 
					== Common application properties
 | 
				
			||||||
 | 
					Various properties can be specified inside your `application.properties`/`application.yml`
 | 
				
			||||||
 | 
					file or as command line switches. This section provides a list common Spring Boot
 | 
				
			||||||
 | 
					properties and references to the underlying classes that consume them.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: Property contributions can come from additional jar files on your classpath so
 | 
				
			||||||
 | 
					you should not consider this an exhaustive list. It is also perfectly legal to define
 | 
				
			||||||
 | 
					your own properties.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WARNING: This sample file is meant as a guide only. Do **not** copy/paste the entire
 | 
				
			||||||
 | 
					content into your application; rather pick only the properties that you need.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,properties,indent=0,subs="verbatim,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					# ===================================================================
 | 
				
			||||||
 | 
					# COMMON SPRING BOOT PROPERTIES
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This sample file is provided as a guideline. Do NOT copy it in its
 | 
				
			||||||
 | 
					# entirety to your own application.               ^^^
 | 
				
			||||||
 | 
					# ===================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ----------------------------------------
 | 
				
			||||||
 | 
					# CORE PROPERTIES
 | 
				
			||||||
 | 
					# ----------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SPRING CONFIG (ConfigFileApplicationListner)
 | 
				
			||||||
 | 
					spring.config.name= # config file name (default to 'application')
 | 
				
			||||||
 | 
					spring.config.location= # location of config file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# PROFILES
 | 
				
			||||||
 | 
					spring.profiles= # comma list of active profiles
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# APPLICATION SETTINGS (SpringApplication_
 | 
				
			||||||
 | 
					spring.main.sources=
 | 
				
			||||||
 | 
					spring.main.web-environment= # detect by default
 | 
				
			||||||
 | 
					spring.main.show-bannder=true
 | 
				
			||||||
 | 
					spring.main.... # see class for all properties
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# LOGGING
 | 
				
			||||||
 | 
					logging.path=/var/logs
 | 
				
			||||||
 | 
					logging.file=myapp.log
 | 
				
			||||||
 | 
					logging.config=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# IDENTITY (ContextIdApplicationContextInitializer)
 | 
				
			||||||
 | 
					spring.application.name=
 | 
				
			||||||
 | 
					vcap.application.name=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# EMBEDDED SERVER CONFIGURATION (ServerProperties)
 | 
				
			||||||
 | 
					server.port=8080
 | 
				
			||||||
 | 
					server.address= # bind to a specific NIC
 | 
				
			||||||
 | 
					server.session-timeout= # session timeout in sections
 | 
				
			||||||
 | 
					server.context-path= # the context path, defaults to '/'
 | 
				
			||||||
 | 
					server.servlet-path= # the servlet path, defaults to '/'
 | 
				
			||||||
 | 
					server.tomcat.access-log-pattern= # log pattern of the access log
 | 
				
			||||||
 | 
					server.tomcat.access-log-enabled=false # is access logging enabled
 | 
				
			||||||
 | 
					server.tomcat.protocol-header="x-forwarded-proto" # ssl forward headers
 | 
				
			||||||
 | 
					server.tomcat.remote-ip-header="x-forwarded-for"
 | 
				
			||||||
 | 
					server.tomcat.basedir="/tmp" # base dir (usually not needed, defaults to tmp)
 | 
				
			||||||
 | 
					server.tomcat.background-processor-delay=30; # in seconds
 | 
				
			||||||
 | 
					server.tomcat.max-threads = 0 # number of threads in protocol handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SPRING MVC (HttpMapperProperties)
 | 
				
			||||||
 | 
					http.mappers.json-pretty-print=false # pretty print JSON
 | 
				
			||||||
 | 
					spring.view.prefix= # MVC view prefix
 | 
				
			||||||
 | 
					spring.view.suffix= # ... and suffix
 | 
				
			||||||
 | 
					spring.resources.cache-period # cache timeouts in headers sent to browser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# THYMELEAF (ThymeleafAutoConfiguration)
 | 
				
			||||||
 | 
					spring.thymeleaf.prefix="classpath:/templates/"
 | 
				
			||||||
 | 
					spring.thymeleaf.suffix=".html"
 | 
				
			||||||
 | 
					spring.thymeleaf.mode="HTML5"
 | 
				
			||||||
 | 
					spring.thymeleaf.encoding="UTF-8"
 | 
				
			||||||
 | 
					spring.thymeleaf.cache=true # set to false for hot refresh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# INTERNATIONALIZATION (MessageSourceAutoConfiguration)
 | 
				
			||||||
 | 
					spring.messages.basename="messages"
 | 
				
			||||||
 | 
					spring.messages.encoding="UTF-8"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SECURITY (SecurityProperties)
 | 
				
			||||||
 | 
					security.user.name="user" # login username
 | 
				
			||||||
 | 
					security.user.password= # login password
 | 
				
			||||||
 | 
					security.user.role="USER" # role assigned to the user
 | 
				
			||||||
 | 
					security.require-ssl=false # advanced settings ...
 | 
				
			||||||
 | 
					security.enable-csrf=false
 | 
				
			||||||
 | 
					security.basic.enabled=true
 | 
				
			||||||
 | 
					security.basic.realm="Spring"
 | 
				
			||||||
 | 
					security.basic.path="/**"
 | 
				
			||||||
 | 
					security.headers.xss=false
 | 
				
			||||||
 | 
					security.headers.cache=false
 | 
				
			||||||
 | 
					security.headers.frame=false
 | 
				
			||||||
 | 
					security.headers.contentType=false
 | 
				
			||||||
 | 
					security.headers.hsts=all # none / domain / all
 | 
				
			||||||
 | 
					security.sessions=stateless # always / never / if_required / stateless
 | 
				
			||||||
 | 
					security.ignored=false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DATASOURCE (DataSourceAutoConfiguration & AbstractDataSourceConfiguration)
 | 
				
			||||||
 | 
					spring.datasource.name= # name of the data source
 | 
				
			||||||
 | 
					spring.datasource.intialize=true # populate using data.sql
 | 
				
			||||||
 | 
					spring.datasource.schema= # a schema resource reference
 | 
				
			||||||
 | 
					spring.datasource.continueOnError=false # continue even if can't be initialized
 | 
				
			||||||
 | 
					spring.datasource.driverClassName= # JDBC Settings...
 | 
				
			||||||
 | 
					spring.datasource.url=
 | 
				
			||||||
 | 
					spring.datasource.username=
 | 
				
			||||||
 | 
					spring.datasource.password=
 | 
				
			||||||
 | 
					spring.datasource.max-active=100 # Advanced configuration...
 | 
				
			||||||
 | 
					spring.datasource.max-idle=8
 | 
				
			||||||
 | 
					spring.datasource.min-idle=8
 | 
				
			||||||
 | 
					spring.datasource.initial-size=10
 | 
				
			||||||
 | 
					spring.datasource.validation-query
 | 
				
			||||||
 | 
					spring.datasource.test-on-borrow=false
 | 
				
			||||||
 | 
					spring.datasource.test-on-return=false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MONGODB (MongoProperties)
 | 
				
			||||||
 | 
					spring.data.mongodb.host= # the db host
 | 
				
			||||||
 | 
					spring.data.mongodb.port=27017 # the connection port (defaults to 27107)
 | 
				
			||||||
 | 
					spring.data.mongodb.uri=mongodb://localhost/test # connection URL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JPA (JpaBaseConfiguration, HibernateJpaAutoConfiguration)
 | 
				
			||||||
 | 
					spring.jpa.properties.*= # properties to set on the JPA connection
 | 
				
			||||||
 | 
					spring.jpa.openInView=true
 | 
				
			||||||
 | 
					spring.jpa.show-sql=true
 | 
				
			||||||
 | 
					spring.jpa.database-platform=
 | 
				
			||||||
 | 
					spring.jpa.database=
 | 
				
			||||||
 | 
					spring.jpa.generate-ddl=
 | 
				
			||||||
 | 
					spring.jpa.hibernate.naming-strategy= # naming classname
 | 
				
			||||||
 | 
					spring.jpa.hibernate.ddl-auto= # defaults to create-drop for embedded dbs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JMX
 | 
				
			||||||
 | 
					spring.jmx.enabled=true # Expose MBeans from Spring
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# RABBIT (RabbitProperties)
 | 
				
			||||||
 | 
					spring.rabbitmq.host= # connection host
 | 
				
			||||||
 | 
					spring.rabbitmq.port= # connection port
 | 
				
			||||||
 | 
					spring.rabbitmq.username= # login user
 | 
				
			||||||
 | 
					spring.rabbitmq.password= # login password
 | 
				
			||||||
 | 
					spring.rabbitmq.virtualhost=
 | 
				
			||||||
 | 
					spring.rabbitmq.dynamic=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# REDIS (RedisProperties)
 | 
				
			||||||
 | 
					spring.redis.host="localhost" # server host
 | 
				
			||||||
 | 
					spring.redis.password= # server password
 | 
				
			||||||
 | 
					spring.redis.port=6379 # connection port
 | 
				
			||||||
 | 
					spring.redis.pool.max-idle=8 # pool settings ...
 | 
				
			||||||
 | 
					spring.redis.pool.min-idle=0
 | 
				
			||||||
 | 
					spring.redis.pool.max-active=8
 | 
				
			||||||
 | 
					spring.redis.pool.max-wait=-1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ACTIVEMQ (ActiveMQProperties)
 | 
				
			||||||
 | 
					spring.activemq.broker-url="tcp://localhost:61616" # connection URL
 | 
				
			||||||
 | 
					spring.activemq.in-memory=true
 | 
				
			||||||
 | 
					spring.activemq.pooled=false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JMS (JmsTemplateProperties)
 | 
				
			||||||
 | 
					spring.jms.pub-sub-domain=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SPRING BATCH (BatchDatabaseInitializer)
 | 
				
			||||||
 | 
					spring.batch.job.names="job1,job2"
 | 
				
			||||||
 | 
					spring.batch.job.enabled=true
 | 
				
			||||||
 | 
					spring.batch.initializer.enabled=true
 | 
				
			||||||
 | 
					spring.batch.schema= # batch schema to load
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# AOP
 | 
				
			||||||
 | 
					spring.aop.auto=
 | 
				
			||||||
 | 
					spring.aop.proxyTargetClass=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# FILE ENCODING (FileEncodingApplicationListener)
 | 
				
			||||||
 | 
					spring.mandatory-file-encoding=false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ----------------------------------------
 | 
				
			||||||
 | 
					# ACTUATOR PROPERTIES
 | 
				
			||||||
 | 
					# ----------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MANAGEMENT HTTP SERVER (ManagementServerProperties)
 | 
				
			||||||
 | 
					management.port= # defaults to 'server.port'
 | 
				
			||||||
 | 
					management.address= # bind to a specific NIC
 | 
				
			||||||
 | 
					management.contextPath= # default to '/'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ENDPOINTS (AbstractEndpoint subclasses)
 | 
				
			||||||
 | 
					endpoints.autoconfig.id="autoconfig"
 | 
				
			||||||
 | 
					endpoints.autoconfig.sensitive=true
 | 
				
			||||||
 | 
					endpoints.autoconfig.enabled=true
 | 
				
			||||||
 | 
					endpoints.beans.id="beans"
 | 
				
			||||||
 | 
					endpoints.beans.sensitive=true
 | 
				
			||||||
 | 
					endpoints.beans.enabled=true
 | 
				
			||||||
 | 
					endpoints.configprops.id="configprops"
 | 
				
			||||||
 | 
					endpoints.configprops.sensitive=true
 | 
				
			||||||
 | 
					endpoints.configprops.enabled=true
 | 
				
			||||||
 | 
					endpoints.configprops.keys-to-sanitize="password,secret"
 | 
				
			||||||
 | 
					endpoints.dump.id="dump"
 | 
				
			||||||
 | 
					endpoints.dump.sensitive=true
 | 
				
			||||||
 | 
					endpoints.dump.enabled=true
 | 
				
			||||||
 | 
					endpoints.env.id="env"
 | 
				
			||||||
 | 
					endpoints.env.sensitive=true
 | 
				
			||||||
 | 
					endpoints.env.enabled=true
 | 
				
			||||||
 | 
					endpoints.health.id="health"
 | 
				
			||||||
 | 
					endpoints.health.sensitive=false
 | 
				
			||||||
 | 
					endpoints.health.enabled=true
 | 
				
			||||||
 | 
					endpoints.info.id="info"
 | 
				
			||||||
 | 
					endpoints.info.sensitive=false
 | 
				
			||||||
 | 
					endpoints.info.enabled=true
 | 
				
			||||||
 | 
					endpoints.metrics.id="metrics"
 | 
				
			||||||
 | 
					endpoints.metrics.sensitive=true
 | 
				
			||||||
 | 
					endpoints.metrics.enabled=true
 | 
				
			||||||
 | 
					endpoints.shutdown.id="shutdown"
 | 
				
			||||||
 | 
					endpoints.shutdown.sensitive=true
 | 
				
			||||||
 | 
					endpoints.shutdown.enabled=false
 | 
				
			||||||
 | 
					endpoints.trace.id="trace"
 | 
				
			||||||
 | 
					endpoints.trace.sensitive=true
 | 
				
			||||||
 | 
					endpoints.trace.enabled=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MVC ONLY ENDPOINTS
 | 
				
			||||||
 | 
					endpoints.jolokia.path="jolokia"
 | 
				
			||||||
 | 
					endpoints.jolokia.sensitive=true
 | 
				
			||||||
 | 
					endpoints.jolokia.enabled=true # when using Jolokia
 | 
				
			||||||
 | 
					endpoints.error.path="/error"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JMX ENDPOINT (EndpointMBeanExportProperties)
 | 
				
			||||||
 | 
					endpoints.jmx.enabled=true
 | 
				
			||||||
 | 
					endpoints.jmx.domain= # the JMX domain, defaults to 'org.springboot'
 | 
				
			||||||
 | 
					endpoints.jmx.unique-names=false
 | 
				
			||||||
 | 
					endpoints.jmx.enabled=true
 | 
				
			||||||
 | 
					endpoints.jmx.staticNames=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JOLOKIA (JolokiaProperties)
 | 
				
			||||||
 | 
					jolokia.config.*= # See Jolokia manual
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# REMOTE SHELL
 | 
				
			||||||
 | 
					shell.auth=simple # jaas, key, simple, spring
 | 
				
			||||||
 | 
					shell.command-refresh-interval=-1
 | 
				
			||||||
 | 
					shell.command-path-pattern="classpath*:/commands/**, classpath*:/crash/commands/**"
 | 
				
			||||||
 | 
					shell.config-path-patterns="classpath*:/crash/*"
 | 
				
			||||||
 | 
					shell.disabled-plugins=false # don't expose plugins
 | 
				
			||||||
 | 
					shell.ssh.enabled= # ssh settings ...
 | 
				
			||||||
 | 
					shell.ssh.keyPath=
 | 
				
			||||||
 | 
					shell.ssh.port=
 | 
				
			||||||
 | 
					shell.telnet.enabled= # telnet settings ...
 | 
				
			||||||
 | 
					shell.telnet.port=
 | 
				
			||||||
 | 
					shell.auth.jaas.domain= # authentication settings ...
 | 
				
			||||||
 | 
					shell.auth.key.path=
 | 
				
			||||||
 | 
					shell.auth.simple.user.name=
 | 
				
			||||||
 | 
					shell.auth.simple.user.password=
 | 
				
			||||||
 | 
					shell.auth.spring.roles=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# GIT INFO
 | 
				
			||||||
 | 
					spring.git.properties= # resource ref to generated git info properties file
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,147 @@
 | 
				
			||||||
 | 
					[appendix]
 | 
				
			||||||
 | 
					[[auto-configuration-classes]]
 | 
				
			||||||
 | 
					== Auto-configuration classes
 | 
				
			||||||
 | 
					Here is a list of all auto configuration classes provided by Spring Boot with links to
 | 
				
			||||||
 | 
					documentation and source code. Remember to also look at the autoconfig report in your
 | 
				
			||||||
 | 
					application for more details of which features are switched on.
 | 
				
			||||||
 | 
					(start the app with `--debug` or `-Ddebug`, or in an Actuator application use the
 | 
				
			||||||
 | 
					`autoconfig` endpoint).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[auto-configuration-classes-from-autoconfigure-module]]
 | 
				
			||||||
 | 
					=== From the ``spring-boot-autoconfigure'' module
 | 
				
			||||||
 | 
					The following auto-configuration classes are from the `spring-boot-autoconfigure` module:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[cols="4,1"]
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					|Configuration Class | Links
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/MessageSourceAutoConfiguration.{sc-ext}[MessageSourceAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/MessageSourceAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/PropertyPlaceholderAutoConfiguration.{sc-ext}[PropertyPlaceholderAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/PropertyPlaceholderAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/amqp/RabbitAutoConfiguration.{sc-ext}[RabbitAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/amqp/RabbitAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/aop/AopAutoConfiguration.{sc-ext}[AopAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/aop/AopAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/batch/BatchAutoConfiguration.{sc-ext}[BatchAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/batch/BatchAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/data/JpaRepositoriesAutoConfiguration.{sc-ext}[JpaRepositoriesAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/data/JpaRepositoriesAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/data/MongoRepositoriesAutoConfiguration.{sc-ext}[MongoRepositoriesAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/data/MongoRepositoriesAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/data/MongoTemplateAutoConfiguration.{sc-ext}[MongoTemplateAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/data/MongoTemplateAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/jdbc/DataSourceAutoConfiguration.{sc-ext}[DataSourceAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/jdbc/DataSourceAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/jdbc/DataSourceTransactionManagerAutoConfiguration.{sc-ext}[DataSourceTransactionManagerAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/jdbc/DataSourceTransactionManagerAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/jms/JmsTemplateAutoConfiguration.{sc-ext}[JmsTemplateAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/jms/JmsTemplateAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/jmx/JmxAutoConfiguration.{sc-ext}[JmxAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/jmx/JmxAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/mobile/DeviceResolverAutoConfiguration.{sc-ext}[DeviceResolverAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/mobile/DeviceResolverAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/mongo/MongoAutoConfiguration.{sc-ext}[MongoAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/mongo/MongoAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/orm/jpa/HibernateJpaAutoConfiguration.{sc-ext}[HibernateJpaAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/orm/jpa/HibernateJpaAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/reactor/ReactorAutoConfiguration.{sc-ext}[ReactorAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/reactor/ReactorAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/redis/RedisAutoConfiguration.{sc-ext}[RedisAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/redis/RedisAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/security/SecurityAutoConfiguration.{sc-ext}[SecurityAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/security/SecurityAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/thymeleaf/ThymeleafAutoConfiguration.{sc-ext}[ThymeleafAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/thymeleaf/ThymeleafAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/web/DispatcherServletAutoConfiguration.{sc-ext}[DispatcherServletAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/web/DispatcherServletAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/web/EmbeddedServletContainerAutoConfiguration.{sc-ext}[EmbeddedServletContainerAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/web/EmbeddedServletContainerAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/web/HttpMessageConvertersAutoConfiguration.{sc-ext}[HttpMessageConvertersAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/web/HttpMessageConvertersAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/web/MultipartAutoConfiguration.{sc-ext}[MultipartAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/web/MultipartAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/web/ServerPropertiesAutoConfiguration.{sc-ext}[ServerPropertiesAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/web/ServerPropertiesAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/web/WebMvcAutoConfiguration.{sc-ext}[WebMvcAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/web/WebMvcAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-autoconfigure}/websocket/WebSocketAutoConfiguration.{sc-ext}[WebSocketAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-autoconfigure}/websocket/WebSocketAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[auto-configuration-classes-from-actuator]]
 | 
				
			||||||
 | 
					=== From the ``spring-boot-actuator'' module
 | 
				
			||||||
 | 
					The following auto-configuration classes are from the `spring-boot-actuator` module:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[cols="4,1"]
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					|Configuration Class |Links
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-actuator}/autoconfigure/AuditAutoConfiguration.{sc-ext}[AuditAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-actuator}/autoconfigure/AuditAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-actuator}/autoconfigure/CrshAutoConfiguration.{sc-ext}[CrshAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-actuator}/autoconfigure/CrshAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-actuator}/autoconfigure/EndpointAutoConfiguration.{sc-ext}[EndpointAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-actuator}/autoconfigure/EndpointAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-actuator}/autoconfigure/EndpointMBeanExportAutoConfiguration.{sc-ext}[EndpointMBeanExportAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-actuator}/autoconfigure/EndpointMBeanExportAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-actuator}/autoconfigure/EndpointWebMvcAutoConfiguration.{sc-ext}[EndpointWebMvcAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-actuator}/autoconfigure/EndpointWebMvcAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-actuator}/autoconfigure/ErrorMvcAutoConfiguration.{sc-ext}[ErrorMvcAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-actuator}/autoconfigure/ErrorMvcAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-actuator}/autoconfigure/JolokiaAutoConfiguration.{sc-ext}[JolokiaAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-actuator}/autoconfigure/JolokiaAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-actuator}/autoconfigure/ManagementSecurityAutoConfiguration.{sc-ext}[ManagementSecurityAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-actuator}/autoconfigure/ManagementSecurityAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-actuator}/autoconfigure/ManagementServerPropertiesAutoConfiguration.{sc-ext}[ManagementServerPropertiesAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-actuator}/autoconfigure/ManagementServerPropertiesAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-actuator}/autoconfigure/MetricFilterAutoConfiguration.{sc-ext}[MetricFilterAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-actuator}/autoconfigure/MetricFilterAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-actuator}/autoconfigure/MetricRepositoryAutoConfiguration.{sc-ext}[MetricRepositoryAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-actuator}/autoconfigure/MetricRepositoryAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-actuator}/autoconfigure/TraceRepositoryAutoConfiguration.{sc-ext}[TraceRepositoryAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-actuator}/autoconfigure/TraceRepositoryAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|{sc-spring-boot-actuator}/autoconfigure/TraceWebFilterAutoConfiguration.{sc-ext}[TraceWebFilterAutoConfiguration]
 | 
				
			||||||
 | 
					|{dc-spring-boot-actuator}/autoconfigure/TraceWebFilterAutoConfiguration.{dc-ext}[javadoc]
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,277 @@
 | 
				
			||||||
 | 
					[appendix]
 | 
				
			||||||
 | 
					[[executable-jar]]
 | 
				
			||||||
 | 
					== The executable jar format
 | 
				
			||||||
 | 
					The `spring-boot-loader` modules allows Spring Boot to support executable jar and
 | 
				
			||||||
 | 
					war files. If you're using the Maven or Gradle plugin, executable jars are
 | 
				
			||||||
 | 
					automatically generated and you generally won't need to know the details of how
 | 
				
			||||||
 | 
					they work.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you need to create executable jars from a different build system, or if you are just
 | 
				
			||||||
 | 
					curious about the underlying technology, this section provides some background.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[executable-jar-nested-jars]]
 | 
				
			||||||
 | 
					=== Nested JARs
 | 
				
			||||||
 | 
					Java does not provide any standard way to load nested jar files (i.e. jar files that
 | 
				
			||||||
 | 
					are themselves contained within a jar). This can be problematic if you are looking
 | 
				
			||||||
 | 
					to distribute a self contained application that you can just run from the command line
 | 
				
			||||||
 | 
					without unpacking.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To solve this problem, many developers use ``shaded'' jars. A shaded jar simply packages
 | 
				
			||||||
 | 
					all classes, from all jars, into a single 'uber jar'. The problem with shaded jars is
 | 
				
			||||||
 | 
					that it becomes hard to see which libraries you are actually using in your application.
 | 
				
			||||||
 | 
					It can also be problematic if the the same filename is used (but with different content)
 | 
				
			||||||
 | 
					in multiple jars. Spring Boot takes a different approach and allows you to actually nest
 | 
				
			||||||
 | 
					jars directly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[executable-jar-jar-file-structure]]
 | 
				
			||||||
 | 
					==== The executable jar file structure
 | 
				
			||||||
 | 
					Spring Boot Loader compatible jar files should be structured in the following way:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						example.jar
 | 
				
			||||||
 | 
						 |
 | 
				
			||||||
 | 
						 +-META-INF
 | 
				
			||||||
 | 
						 |  +-MANIFEST.MF
 | 
				
			||||||
 | 
						 +-org
 | 
				
			||||||
 | 
						 |  +-springframework
 | 
				
			||||||
 | 
						 |     +-boot
 | 
				
			||||||
 | 
						 |        +-loader
 | 
				
			||||||
 | 
						 |           +-<spring boot loader classes>
 | 
				
			||||||
 | 
						 +-com
 | 
				
			||||||
 | 
						 |  +-mycompany
 | 
				
			||||||
 | 
						 |     + project
 | 
				
			||||||
 | 
						 |        +-YouClasses.class
 | 
				
			||||||
 | 
						 +-lib
 | 
				
			||||||
 | 
						    +-dependency1.jar
 | 
				
			||||||
 | 
						    +-dependency2.jar
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Dependencies should be placed in a nested `lib` directory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[executable-jar-war-file-structure]]
 | 
				
			||||||
 | 
					==== The executable war file structure
 | 
				
			||||||
 | 
					Spring Boot Loader compatible war files should be structured in the following way:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						example.jar
 | 
				
			||||||
 | 
						 |
 | 
				
			||||||
 | 
						 +-META-INF
 | 
				
			||||||
 | 
						 |  +-MANIFEST.MF
 | 
				
			||||||
 | 
						 +-org
 | 
				
			||||||
 | 
						 |  +-springframework
 | 
				
			||||||
 | 
						 |     +-boot
 | 
				
			||||||
 | 
						 |        +-loader
 | 
				
			||||||
 | 
						 |           +-<spring boot loader classes>
 | 
				
			||||||
 | 
						 +-WEB-INF
 | 
				
			||||||
 | 
						    +-classes
 | 
				
			||||||
 | 
						    |  +-com
 | 
				
			||||||
 | 
						    |     +-mycompany
 | 
				
			||||||
 | 
						    |        +-project
 | 
				
			||||||
 | 
						    |           +-YouClasses.class
 | 
				
			||||||
 | 
						    +-lib
 | 
				
			||||||
 | 
						    |  +-dependency1.jar
 | 
				
			||||||
 | 
						    |  +-dependency2.jar
 | 
				
			||||||
 | 
						    +-lib-provided
 | 
				
			||||||
 | 
						       +-servlet-api.jar
 | 
				
			||||||
 | 
						       +-dependency3.jar
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Dependencies should be placed in a nested `WEB-INF/lib` directory. Any dependencies
 | 
				
			||||||
 | 
					that are required when running embedded but are not required when deploying to
 | 
				
			||||||
 | 
					a traditional web container should be placed in `WEB-INF/lib-provided`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[executable-jar-jarfile]]
 | 
				
			||||||
 | 
					=== Spring Boot's ``JarFile'' class
 | 
				
			||||||
 | 
					The core class used to support loading nested jars is
 | 
				
			||||||
 | 
					`org.springframework.boot.loader.jar.JarFile`. It allows  you load jar
 | 
				
			||||||
 | 
					content from a standard jar file, or from nested child jar data. When first  loaded, the
 | 
				
			||||||
 | 
					location of each  `JarEntry` is mapped to a physical file offset of the outer jar:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						myapp.jar
 | 
				
			||||||
 | 
						+---------+---------------------+
 | 
				
			||||||
 | 
						|         | /lib/mylib.jar      |
 | 
				
			||||||
 | 
						| A.class |+---------+---------+|
 | 
				
			||||||
 | 
						|         || B.class | B.class ||
 | 
				
			||||||
 | 
						|         |+---------+---------+|
 | 
				
			||||||
 | 
						+---------+---------------------+
 | 
				
			||||||
 | 
						^          ^          ^
 | 
				
			||||||
 | 
						0063       3452       3980
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The example above shows how `A.class` can be found in `myapp.jar` position `0063`.
 | 
				
			||||||
 | 
					`B.class` from the nested jar can actually be found in `myapp.jar` position `3452`
 | 
				
			||||||
 | 
					and `B.class` is at position `3980`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Armed with this information, we can load specific nested entries by simply seeking to
 | 
				
			||||||
 | 
					appropriate part if the outer jar. We don't need to unpack the archive and we don't
 | 
				
			||||||
 | 
					need to read all entry data into memory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[executable-jar-jarfile-compatibility]]
 | 
				
			||||||
 | 
					==== Compatibility with the standard Java ``JarFile''
 | 
				
			||||||
 | 
					Spring Boot Loader strives to remain compatible with existing code and libraries.
 | 
				
			||||||
 | 
					`org.springframework.boot.loader.jar.JarFile` extends from `java.util.jar.JarFile` and
 | 
				
			||||||
 | 
					should work as a drop-in replacement. The `RandomAccessJarFile.getURL()` method will
 | 
				
			||||||
 | 
					return a `URL` that opens a `java.net.JarURLConnection` compatible connection.
 | 
				
			||||||
 | 
					`RandomAccessJarFile` URLs can be used with Java's `URLClassLoader`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[executable-jar-launching]]
 | 
				
			||||||
 | 
					=== Launching executable jars
 | 
				
			||||||
 | 
					The `org.springframework.boot.loader.Launcher` class is a special bootstrap class that
 | 
				
			||||||
 | 
					is used as an executable jars main entry point. It is the actual `Main-Class` in your jar
 | 
				
			||||||
 | 
					file and it's used to setup an appropriate `URLClassLoader` and ultimately call your
 | 
				
			||||||
 | 
					`main()` method.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					There are 3 launcher subclasses (`JarLauncher`, `WarLauncher` and `PropertiesLauncher`).
 | 
				
			||||||
 | 
					Their purpose is to load resources (`.class` files etc.) from nested jar files or war
 | 
				
			||||||
 | 
					files in directories (as opposed to explicitly on the classpath). In the case of the
 | 
				
			||||||
 | 
					`[Jar|War]Launcher` the nested paths are fixed `(lib/*.jar` and `lib-provided/*.jar` for
 | 
				
			||||||
 | 
					the war case) so you just add extra jars in those locations if you want more. The
 | 
				
			||||||
 | 
					`PropertiesLauncher` looks in `lib/` by default, but you can add additional locations by
 | 
				
			||||||
 | 
					setting an environment variable `LOADER_PATH` or `loader.path` in `application.properties`
 | 
				
			||||||
 | 
					(colon-separated list of directories or archives).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[executable-jar-launcher-manifest]]
 | 
				
			||||||
 | 
					==== Launcher manifest
 | 
				
			||||||
 | 
					You need specify an appropriate `Launcher` as the `Main-Class` attribute of
 | 
				
			||||||
 | 
					`META-INF/MANIFEST.MF`. The actual class that you want to launch (i.e. the class that
 | 
				
			||||||
 | 
					you wrote that contains a `main` method) should be specified  in the `Start-Class`
 | 
				
			||||||
 | 
					attribute.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For example, here is a typical `MANIFEST.MF` for a executable jar file:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						Main-Class: org.springframework.boot.loader.JarLauncher
 | 
				
			||||||
 | 
						Start-Class: com.mycompany.project.MyApplication
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For a war file, it would be:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						Main-Class: org.springframework.boot.loader.WarLauncher
 | 
				
			||||||
 | 
						Start-Class: com.mycompany.project.MyApplication
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: You do not need to specify `Class-Path` entries in your manifest file, the classpath
 | 
				
			||||||
 | 
					will be deduced from the nested jars.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[executable-jar-exploded-archives]]
 | 
				
			||||||
 | 
					==== Exploded archives
 | 
				
			||||||
 | 
					Certain PaaS implementations may choose to unpack archives before they run. For example,
 | 
				
			||||||
 | 
					Cloud Foundry operates in this way. You can run an unpacked archive by simply starting
 | 
				
			||||||
 | 
					the appropriate launcher:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ unzip -q myapp.jar
 | 
				
			||||||
 | 
						$ java org.springframework.boot.loader.JarLauncher
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[executable-jar-property-launcher-features]]
 | 
				
			||||||
 | 
					=== PropertiesLauncher Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`PropertiesLauncher` has a few special features that can be enabled with external
 | 
				
			||||||
 | 
					properties (System properties, environment variables, manifest entries or
 | 
				
			||||||
 | 
					`application.properties`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[cols="2,4"]
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					|Key |Purpose
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`loader.path`
 | 
				
			||||||
 | 
					|Colon-separated Classpath, e.g. `lib:${HOME}/app/lib`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`loader.home`
 | 
				
			||||||
 | 
					|Location of additional properties file, e.g. `file:///opt/app`
 | 
				
			||||||
 | 
					 (defaults to `${user.dir}`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`loader.args`
 | 
				
			||||||
 | 
					|Default arguments for the main method (space separated)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`loader.main`
 | 
				
			||||||
 | 
					|Name of main class to launch, e.g. `com.app.Application`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`loader.config.name`
 | 
				
			||||||
 | 
					|Name of properties file, e.g. `loader` (defaults to `application`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`loader.config.location`
 | 
				
			||||||
 | 
					|Path to properties file, e.g. `classpath:loader.properties` (defaults to
 | 
				
			||||||
 | 
					 `application/.properties`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`loader.system`
 | 
				
			||||||
 | 
					|Boolean flag to indicate that all properties should be added to System properties
 | 
				
			||||||
 | 
					 (defaults to `false`)
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Manifest entry keys are formed by capitalizing initial letters of words and changing the
 | 
				
			||||||
 | 
					separator to "`-`" from "`.`" (e.g. `Loader-Path`). The exception is `loader.main` which
 | 
				
			||||||
 | 
					is looked up as `Start-Class` in the manifest for compatibility with `JarLauncher`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Environment variables can be capitalized with underscore separators instead of periods.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* `loader.home` is the directory location of an additional properties file (overriding
 | 
				
			||||||
 | 
					  the default) as long as `loader.config.location` is   not specified.
 | 
				
			||||||
 | 
					* `loader.path` can contain directories (scanned recursively for jar and zip files),
 | 
				
			||||||
 | 
					  archive paths, or wildcard patterns (for the default JVM behavior).
 | 
				
			||||||
 | 
					* Placeholder replacement is done from System and environment variables plus the
 | 
				
			||||||
 | 
					  properties file itself on all values before use.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[executable-jar-restrictions]]
 | 
				
			||||||
 | 
					=== Executable jar restrictions
 | 
				
			||||||
 | 
					There are a number of restrictions that you need to consider when working with a Spring
 | 
				
			||||||
 | 
					Boot Loader packaged application.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[executable-jar-zip-entry-compression]]
 | 
				
			||||||
 | 
					==== Zip entry compression
 | 
				
			||||||
 | 
					The `ZipEntry` for a nested jar must be saved using the `ZipEntry.STORED` method. This
 | 
				
			||||||
 | 
					is required so that we can seek directly to individual content within the nested jar.
 | 
				
			||||||
 | 
					The content of the nested jar file itself can still be compressed, as can any other
 | 
				
			||||||
 | 
					entries in the outer jar.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[executable-jar-system-classloader]]
 | 
				
			||||||
 | 
					==== System ClassLoader
 | 
				
			||||||
 | 
					Launched applications should use `Thread.getContextClassLoader()` when loading classes
 | 
				
			||||||
 | 
					(most libraries and frameworks will do this by default). Trying to load nested jar
 | 
				
			||||||
 | 
					classes via `ClassLoader.getSystemClassLoader()` will fail. Please be aware that
 | 
				
			||||||
 | 
					`java.util.Logging` always uses the system classloader, for this reason you should
 | 
				
			||||||
 | 
					consider a different logging implementation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[executable-jar-alternatives]]
 | 
				
			||||||
 | 
					=== Alternative single jar solutions
 | 
				
			||||||
 | 
					If the above restrictions mean that you cannot use Spring Boot Loader the following
 | 
				
			||||||
 | 
					alternatives could be considered:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* http://maven.apache.org/plugins/maven-shade-plugin/[Maven Shade Plugin]
 | 
				
			||||||
 | 
					* http://www.jdotsoft.com/JarClassLoader.php[JarClassLoader]
 | 
				
			||||||
 | 
					* http://one-jar.sourceforge.net[OneJar]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					[[appendix]]
 | 
				
			||||||
 | 
					= Appendices
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include::appendix-application-properties.adoc[]
 | 
				
			||||||
 | 
					include::appendix-auto-configuration-classes.adoc[]
 | 
				
			||||||
 | 
					include::appendix-executable-jar-format.adoc[]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,578 @@
 | 
				
			||||||
 | 
					[[build-tool-plugins]]
 | 
				
			||||||
 | 
					= Build tool plugins
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[partintro]
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					Spring Boot provides build tool plugins for Maven and Gradle. The plugins offer a
 | 
				
			||||||
 | 
					variety of features, including the packaging of executable jars. The section provides
 | 
				
			||||||
 | 
					more details on both plugins, as well as some help should you need to extend an
 | 
				
			||||||
 | 
					unsupported build system. If you are just getting started, you might want to read
 | 
				
			||||||
 | 
					``<<using-spring-boot.adoc#using-boot-build-systems>>'' from the
 | 
				
			||||||
 | 
					<<using-spring-boot.adoc#using-boot>> section first.
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-maven-plugin]]
 | 
				
			||||||
 | 
					== Spring Boot Maven plugin
 | 
				
			||||||
 | 
					The Spring Boot Maven Plugin provides Spring Boot support in Maven, allowing you to
 | 
				
			||||||
 | 
					package executable jar or war archives and run an application ``in-place''. To use it you
 | 
				
			||||||
 | 
					must be using Maven 3 (or better).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-include-maven-plugin]]
 | 
				
			||||||
 | 
					=== Including the plugin
 | 
				
			||||||
 | 
					To use the Spring Boot Maven Plugin simply include the appropriate XML in the `plugins`
 | 
				
			||||||
 | 
					section of your `pom.xml`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0,subs="verbatim,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
						<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
				
			||||||
 | 
							xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
				
			||||||
 | 
							<modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
 | 
							<!-- ... -->
 | 
				
			||||||
 | 
							<build>
 | 
				
			||||||
 | 
								<plugins>
 | 
				
			||||||
 | 
									<plugin>
 | 
				
			||||||
 | 
										<groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
										<artifactId>spring-boot-maven-plugin</artifactId>
 | 
				
			||||||
 | 
										<version>{spring-boot-version}</version>
 | 
				
			||||||
 | 
										<executions>
 | 
				
			||||||
 | 
											<execution>
 | 
				
			||||||
 | 
												<goals>
 | 
				
			||||||
 | 
													<goal>repackage</goal>
 | 
				
			||||||
 | 
												</goals>
 | 
				
			||||||
 | 
											</execution>
 | 
				
			||||||
 | 
										</executions>
 | 
				
			||||||
 | 
									</plugin>
 | 
				
			||||||
 | 
								</plugins>
 | 
				
			||||||
 | 
							</build>
 | 
				
			||||||
 | 
						</project>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This configuration will repackage a jar or war that is built during the `package` phase of
 | 
				
			||||||
 | 
					the Maven lifecycle. The following example shows both the repackaged jar, as well as the
 | 
				
			||||||
 | 
					original jar, in the `target` directory:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ mvn package
 | 
				
			||||||
 | 
						$ ls target/*.jar
 | 
				
			||||||
 | 
						target/myproject-1.0.0.jar target/myproject-1.0.0.jar.original
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you don't include the `<execution/>` configuration as above, you can run the plugin on
 | 
				
			||||||
 | 
					its own (but only if the package goal is used as well). For example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ mvn package spring-boot:repackage
 | 
				
			||||||
 | 
						$ ls target/*.jar
 | 
				
			||||||
 | 
						target/myproject-1.0.0.jar target/myproject-1.0.0.jar.original
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you are using a milestone or snapshot release you will also need to add appropriate
 | 
				
			||||||
 | 
					`pluginRepository` elements:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0,subs="verbatim,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<pluginRepositories>
 | 
				
			||||||
 | 
							<pluginRepository>
 | 
				
			||||||
 | 
								<id>spring-snapshots</id>
 | 
				
			||||||
 | 
								<url>http://repo.spring.io/snapshot</url>
 | 
				
			||||||
 | 
							</pluginRepository>
 | 
				
			||||||
 | 
							<pluginRepository>
 | 
				
			||||||
 | 
								<id>spring-milestones</id>
 | 
				
			||||||
 | 
								<url>http://repo.spring.io/milestone</url>
 | 
				
			||||||
 | 
							</pluginRepository>
 | 
				
			||||||
 | 
						</pluginRepositories>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-maven-packaging]]
 | 
				
			||||||
 | 
					=== Packaging executable jar and war files
 | 
				
			||||||
 | 
					Once `spring-boot-maven-plugin` has been included in your `pom.xml` it will automatically
 | 
				
			||||||
 | 
					attempt to rewrite archives to make them executable using the `spring-boot:repackage`
 | 
				
			||||||
 | 
					goal. You should configure your project to build a jar or war (as appropriate) using the
 | 
				
			||||||
 | 
					usual `packaging` element:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0,subs="verbatim,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
						<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
				
			||||||
 | 
							xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
				
			||||||
 | 
							<!-- ... -->
 | 
				
			||||||
 | 
							<packaging>jar</packaging>
 | 
				
			||||||
 | 
							<!-- ... -->
 | 
				
			||||||
 | 
						</project>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Your existing archive will be enhanced by Spring Boot during the `package` phase. The
 | 
				
			||||||
 | 
					main class that you want to launch can either be specified using a configuration option,
 | 
				
			||||||
 | 
					or by adding a `Main-Class` attribute to the manifest in the usual way. If you don't
 | 
				
			||||||
 | 
					specify a main class the plugin will search for a class with a
 | 
				
			||||||
 | 
					`public static void main(String[] args)` method.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To build and run a project artifact, you can type the following:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ mvn package
 | 
				
			||||||
 | 
						$ java -jar target/mymodule-0.0.1-SNAPSHOT.jar
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-maven-packaging-configuration]]
 | 
				
			||||||
 | 
					=== Repackage configuration
 | 
				
			||||||
 | 
					The following configuration options are available for the `spring-boot:repackage` goal:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-maven-packaging-required-params]]
 | 
				
			||||||
 | 
					==== Required parameters
 | 
				
			||||||
 | 
					[cols="2,4"]
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					|Name |Description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`outputDirectory`
 | 
				
			||||||
 | 
					|Directory containing the generated archive (defaults to `${project.build.directory}`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`finalName`
 | 
				
			||||||
 | 
					|Name of the generated archive (defaults to `${project.build.finalName}`).
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-maven-packaging-optional-params]]
 | 
				
			||||||
 | 
					==== Optional parameters
 | 
				
			||||||
 | 
					[cols="2,4"]
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					|Name |Description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`classifier`
 | 
				
			||||||
 | 
					|Classifier to add to the artifact generated. If given, the artifact will be attached. If
 | 
				
			||||||
 | 
					 this is not given, it will merely be written to the output directory according to the
 | 
				
			||||||
 | 
					 `finalName`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`mainClass`
 | 
				
			||||||
 | 
					|The name of the main class. If not specified will search for a single compiled class
 | 
				
			||||||
 | 
					 that contains a `main` method.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`layout`
 | 
				
			||||||
 | 
					|The type of archive (which corresponds to how the dependencies are laid out inside it).
 | 
				
			||||||
 | 
					 Defaults to a guess based on the archive type.
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The plugin rewrites your manifest, and in particular it manages the `Main-Class` and
 | 
				
			||||||
 | 
					`Start-Class` entries, so if the defaults don't work you have to configure those there
 | 
				
			||||||
 | 
					(not in the jar plugin). The `Main-Class` in the manifest is actually controlled by the
 | 
				
			||||||
 | 
					`layout` property of the boot plugin, e.g.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0,subs="verbatim,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<plugin>
 | 
				
			||||||
 | 
							<groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
							<artifactId>spring-boot-maven-plugin</artifactId>
 | 
				
			||||||
 | 
							<version>{spring-boot-version}</version>
 | 
				
			||||||
 | 
							<configuration>
 | 
				
			||||||
 | 
								<mainClass>${start-class}</mainClass>
 | 
				
			||||||
 | 
								<layout>ZIP</layout>
 | 
				
			||||||
 | 
							</configuration>
 | 
				
			||||||
 | 
							<executions>
 | 
				
			||||||
 | 
								<execution>
 | 
				
			||||||
 | 
									<goals>
 | 
				
			||||||
 | 
										<goal>repackage</goal>
 | 
				
			||||||
 | 
									</goals>
 | 
				
			||||||
 | 
								</execution>
 | 
				
			||||||
 | 
							</executions>
 | 
				
			||||||
 | 
						</plugin>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The layout property defaults to a guess based on the archive type (jar or war). For the
 | 
				
			||||||
 | 
					`PropertiesLauncher` the layout is ``ZIP'' (even though the output might be a jar file).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: The executable jar format is <<appendix-executable-jar-format.adoc#executable-jar,
 | 
				
			||||||
 | 
					described in the appendix>>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-maven-running-applications]]
 | 
				
			||||||
 | 
					=== Running applications
 | 
				
			||||||
 | 
					The Spring Boot Maven Plugin includes a `run` goal which can be used to launch your
 | 
				
			||||||
 | 
					application from the command line. Type the following from the root of your Maven
 | 
				
			||||||
 | 
					project:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ mvn spring-boot:run
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					By default, any `src/main/resources` folder will be added to the application classpath
 | 
				
			||||||
 | 
					when you run via the maven plugin. This allows hot refreshing of resources which can be
 | 
				
			||||||
 | 
					very useful when developing web applications. For example, you can work on HTML, CSS or
 | 
				
			||||||
 | 
					JavaScipt files and see your changes immediately without recompiling your application. It
 | 
				
			||||||
 | 
					is also a helpful way of allowing your front end developers to work without needing to
 | 
				
			||||||
 | 
					download and install a Java IDE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-maven-run-configuration]]
 | 
				
			||||||
 | 
					=== Run configuration
 | 
				
			||||||
 | 
					The following configuration options are available for the `spring-boot:run` goal:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-maven-run-configuration-required-params]]
 | 
				
			||||||
 | 
					=== Required parameters
 | 
				
			||||||
 | 
					[cols="2,4"]
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					|Name |Description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`classesDirectrory`
 | 
				
			||||||
 | 
					|Directory containing the classes and resource files that should be packaged into the
 | 
				
			||||||
 | 
					 archive (defaults to `${project.build.outputDirectory}`).
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-maven-run-configuration-optional-params]]
 | 
				
			||||||
 | 
					=== Optional parameters
 | 
				
			||||||
 | 
					[cols="2,4"]
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					|Name |Description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`arguments` or `-Drun.arguments`
 | 
				
			||||||
 | 
					|Arguments that should be passed to the application.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`addResources` or `-Drun.addResources`
 | 
				
			||||||
 | 
					|Add Maven resources to the classpath directly, this allows live in-place editing or
 | 
				
			||||||
 | 
					 resources. Since resources will be added directly, and via the target/classes folder
 | 
				
			||||||
 | 
					 they will appear twice if `ClassLoader.getResources()` is called. In practice, however,
 | 
				
			||||||
 | 
					 most applications call `ClassLoader.getResource()` which will always return the first
 | 
				
			||||||
 | 
					 resource (defaults to `true`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`mainClass`
 | 
				
			||||||
 | 
					|The name of the main class. If not specified the first compiled class found that
 | 
				
			||||||
 | 
					 contains a 'main' method will be used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`folders`
 | 
				
			||||||
 | 
					|Folders that should be added to the classpath (defaults to
 | 
				
			||||||
 | 
					 `${project.build.outputDirectory}`).
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-gradle-plugin]]
 | 
				
			||||||
 | 
					== Spring Boot Gradle plugin
 | 
				
			||||||
 | 
					The Spring Boot Gradle Plugin provides Spring Boot support in Gradle, allowing you to
 | 
				
			||||||
 | 
					package executable jar or war archives, run Spring Boot applications and omit version
 | 
				
			||||||
 | 
					information from your `build.gradle` file for ``blessed'' dependencies.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-including-the-gradle-plugin]]
 | 
				
			||||||
 | 
					=== Including the plugin
 | 
				
			||||||
 | 
					To use the Spring Boot Gradle Plugin simply include a `buildscript` dependency and apply
 | 
				
			||||||
 | 
					the `spring-boot` plugin:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0,subs="verbatim,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						buildscript {
 | 
				
			||||||
 | 
							dependencies {
 | 
				
			||||||
 | 
								classpath("org.springframework.boot:spring-boot-gradle-plugin:{spring-boot-version}")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						apply plugin: 'spring-boot'
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you are using a milestone or snapshot release you will also need to add appropriate
 | 
				
			||||||
 | 
					`repositories` reference:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0,subs="verbatim,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						buildscript {
 | 
				
			||||||
 | 
							repositories {
 | 
				
			||||||
 | 
								maven.url "http://repo.spring.io/snapshot"
 | 
				
			||||||
 | 
								maven.url "http://repo.spring.io/milestone"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// ...
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-gradle-dependencies-without-versions]]
 | 
				
			||||||
 | 
					=== Declaring dependencies without versions
 | 
				
			||||||
 | 
					The `spring-boot` plugin will register a custom Gradle `ResolutionStrategy` with your
 | 
				
			||||||
 | 
					build that allows you to omit version numbers when declaring dependencies to ``blessed''
 | 
				
			||||||
 | 
					artifacts. All artifacts with a `org.springframework.boot` group ID, and any of the
 | 
				
			||||||
 | 
					artifacts declared in the `managementDependencies` section of the
 | 
				
			||||||
 | 
					{github-code}/spring-boot-dependencies/pom.xml[`spring-dependencies`]
 | 
				
			||||||
 | 
					POM can have their version number resolved automatically.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Simply declare dependencies in the usual way, but leave the version number empty:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0,subs="verbatim,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						dependencies {
 | 
				
			||||||
 | 
							compile("org.springframework.boot:spring-boot-starter-web")
 | 
				
			||||||
 | 
							compile("org.thymeleaf:thymeleaf-spring4")
 | 
				
			||||||
 | 
							compile("nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-gradle-packaging]]
 | 
				
			||||||
 | 
					=== Packaging executable jar and war files
 | 
				
			||||||
 | 
					Once the `spring-boot` plugin has been applied to your project it will automatically
 | 
				
			||||||
 | 
					attempt to rewrite archives to make them executable using the `bootRepackage` task. You
 | 
				
			||||||
 | 
					should configure your project to build a jar or war (as appropriate) in the usual way.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The main class that you want to launch can either be specified using a configuration
 | 
				
			||||||
 | 
					option, or by adding a `Main-Class` attribute to the manifest. If you don't specify a
 | 
				
			||||||
 | 
					main class the plugin will search for a class with a
 | 
				
			||||||
 | 
					`public static void main(String[] args)` method.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To build and run a project artifact, you can type the following:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ gradle build
 | 
				
			||||||
 | 
						$ java -jar build/libs/mymodule-0.0.1-SNAPSHOT.jar
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-gradle-running-applications]]
 | 
				
			||||||
 | 
					=== Running a project in-place
 | 
				
			||||||
 | 
					To run a project in place without building a jar first you can use the "bootRun" task:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ gradle bootRun
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Running this way makes your static classpath resources (i.e. in `src/main/resources` by
 | 
				
			||||||
 | 
					default) reloadable in the live application, which can be helpful at development time.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-gradle-repackage-configuration]]
 | 
				
			||||||
 | 
					=== Repackage configuration
 | 
				
			||||||
 | 
					The gradle plugin automatically extends your build script DSL with a `springBoot` element
 | 
				
			||||||
 | 
					for configuration. Simply set the appropriate properties as you would any other Gradle
 | 
				
			||||||
 | 
					extension (see below for a list of configuration options):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0,subs="verbatim,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						springBoot {
 | 
				
			||||||
 | 
							backupSource = false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-gradle-repackage-custom-configuration]]
 | 
				
			||||||
 | 
					=== Repackage with custom Gradle configuration
 | 
				
			||||||
 | 
					Sometimes it may be more appropriate to not package default dependencies resolved from
 | 
				
			||||||
 | 
					`compile`, `runtime` and `provided` scopes. If the created executable jar file
 | 
				
			||||||
 | 
					is intended to be run as it is, you need to have all dependencies nested inside it;
 | 
				
			||||||
 | 
					however, if the plan is to explode a jar file and run main class manually, you may already
 | 
				
			||||||
 | 
					have some of the libraries available via `CLASSPATH`. This is a situation where
 | 
				
			||||||
 | 
					you can repackage your jar with a different set of dependencies.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Using a custom
 | 
				
			||||||
 | 
					configuration will automatically disable dependency resolving from
 | 
				
			||||||
 | 
					`compile`, `runtime` and `provided` scopes. Custom configuration can be either
 | 
				
			||||||
 | 
					defined globally (inside the `springBoot` section) or per task.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0,subs="verbatim,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						task clientJar(type: Jar) {
 | 
				
			||||||
 | 
							appendix = 'client'
 | 
				
			||||||
 | 
							from sourceSets.main.output
 | 
				
			||||||
 | 
							exclude('**/*Something*')
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						task clientBoot(type: BootRepackage, dependsOn: clientJar) {
 | 
				
			||||||
 | 
							withJarTask = clientJar
 | 
				
			||||||
 | 
							customConfiguration = "mycustomconfiguration"
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In above example, we created a new `clientJar` Jar task to package a customized
 | 
				
			||||||
 | 
					file set from your compiled sources. Then we created a new `clientBoot`
 | 
				
			||||||
 | 
					BootRepackage task and instructed it to work with only `clientJar` task and
 | 
				
			||||||
 | 
					`mycustomconfiguration`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0,subs="verbatim,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						configurations {
 | 
				
			||||||
 | 
							mycustomconfiguration.exclude group: 'log4j'
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dependencies {
 | 
				
			||||||
 | 
							mycustomconfiguration configurations.runtime
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The configuration that we are referring to in `BootRepackage` is a normal
 | 
				
			||||||
 | 
					http://www.gradle.org/docs/current/dsl/org.gradle.api.artifacts.Configuration.html[Gradle
 | 
				
			||||||
 | 
					configuration]. In the above example we created a new configuration named
 | 
				
			||||||
 | 
					`mycustomconfiguration` instructing it to derive from a `runtime` and exclude the `log4j`
 | 
				
			||||||
 | 
					group. If the `clientBoot` task is executed, the repackaged boot jar will have all
 | 
				
			||||||
 | 
					dependencies from `runtime` but no `log4j` jars.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-gradle-configuration-options]]
 | 
				
			||||||
 | 
					==== Configuration options
 | 
				
			||||||
 | 
					The following configuration options are available:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[cols="2,4"]
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					|Name |Description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`mainClass`
 | 
				
			||||||
 | 
					|The main class that should be run. If not specified the value from the manifest will be
 | 
				
			||||||
 | 
					 used, or if no manifest entry is the archive will be searched for a suitable class.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`providedConfiguration`
 | 
				
			||||||
 | 
					|The name of the provided configuration (defaults to `providedRuntime`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`backupSource`
 | 
				
			||||||
 | 
					|If the original source archive should be backed-up before being repackaged (defaults
 | 
				
			||||||
 | 
					 to `true`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`customConfiguration`
 | 
				
			||||||
 | 
					|The name of the custom configuration.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`layout`
 | 
				
			||||||
 | 
					|The type of archive, corresponding to how the dependencies are laid out inside
 | 
				
			||||||
 | 
					 (defaults to a guess based on the archive type).
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-understanding-the-gradle-plugin]]
 | 
				
			||||||
 | 
					=== Understanding how the Gradle plugin works
 | 
				
			||||||
 | 
					When `spring-boot` is applied to your Gradle project a default task named `bootRepackage`
 | 
				
			||||||
 | 
					is created automatically. The `bootRepackage` task depends on Gradle `assemble` task, and
 | 
				
			||||||
 | 
					when executed, it tries to find all jar artifacts whose qualifier is empty (i.e. tests and
 | 
				
			||||||
 | 
					sources jars are automatically skipped).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Due to the fact that `bootRepackage` finds 'all' created jar artifacts, the order of
 | 
				
			||||||
 | 
					Gradle task execution is important. Most projects only create a single jar file, so
 | 
				
			||||||
 | 
					usually this is not an issue; however, if you are planning to create a more complex
 | 
				
			||||||
 | 
					project setup, with custom `Jar` and `BootRepackage` tasks, there are few tweaks to
 | 
				
			||||||
 | 
					consider.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you are 'just' creating custom jar files from your project you can simply disables
 | 
				
			||||||
 | 
					default `jar` and `bootRepackage` tasks:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0,subs="verbatim,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						jar.enabled = false
 | 
				
			||||||
 | 
						bootRepackage.enabled = false
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Another option is to instruct the default `bootRepackage` task to only work with a
 | 
				
			||||||
 | 
					default `jar` task.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0,subs="verbatim,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						bootRepackage.withJarTask = jar
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you have a default project setup where the main jar file is created and repackaged,
 | 
				
			||||||
 | 
					'and' you still want to create additional custom jars, you can combine your custom
 | 
				
			||||||
 | 
					repackage tasks together and use `dependsOn` so that the `bootJars` task will run after
 | 
				
			||||||
 | 
					the default `bootRepackage` task is executed:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0,subs="verbatim,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						task bootJars
 | 
				
			||||||
 | 
						bootJars.dependsOn = [clientBoot1,clientBoot2,clientBoot3]
 | 
				
			||||||
 | 
						build.dependsOn(bootJars)
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					All the above tweaks are usually used to avoid situations where an already created boot
 | 
				
			||||||
 | 
					jar is repackaged again. Repackaging an existing boot jar will not break anything, but
 | 
				
			||||||
 | 
					you may find that it includes unnecessary dependencies.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-other-build-systems]]
 | 
				
			||||||
 | 
					== Supporting other build systems
 | 
				
			||||||
 | 
					If you want to use a build tool other than Maven or Gradle, you will likely need to develop
 | 
				
			||||||
 | 
					your own plugin. Executable jars need to follow a specific format and certain entries need
 | 
				
			||||||
 | 
					to be written in an uncompressed form (see the
 | 
				
			||||||
 | 
					``<<appendix-executable-jar-format.adoc#executable-jar, executable jar format>>'' section
 | 
				
			||||||
 | 
					in the appendix for details).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The Spring Boot Maven and Gradle plugins both make use of `spring-boot-loader-tools` to
 | 
				
			||||||
 | 
					actually generate jars. You are also free to use this library directly yourself if you
 | 
				
			||||||
 | 
					need to.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-repackaging-archives]]
 | 
				
			||||||
 | 
					=== Repackaging archives
 | 
				
			||||||
 | 
					To repackage an existing archive so that it becomes a self-contained executable archive
 | 
				
			||||||
 | 
					use `org.springframework.boot.loader.tools.Repackager`. The `Repackager` class takes a
 | 
				
			||||||
 | 
					single constructor argument that refers to an existing jar or war archive. Use one of the
 | 
				
			||||||
 | 
					two available `repackage()` methods to either replace the original file or write to a new
 | 
				
			||||||
 | 
					destination. Various settings can also be configured on the repackager before it is
 | 
				
			||||||
 | 
					run.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-nested-libraries]]
 | 
				
			||||||
 | 
					=== Nested libraries
 | 
				
			||||||
 | 
					When repackaging an archive you can include references to dependency files using the
 | 
				
			||||||
 | 
					`org.springframework.boot.loader.tools.Libraries` interface. We don't provide any
 | 
				
			||||||
 | 
					concrete implementations of `Libraries` here as they are usually build system specific.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If your archive already includes libraries you can use `Libraries.NONE`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-find-a-main-class]]
 | 
				
			||||||
 | 
					=== Finding a main class
 | 
				
			||||||
 | 
					If you don't use `Repackager.setMainClass()` to specify a main class, the repackager will
 | 
				
			||||||
 | 
					use http://asm.ow2.org/[ASM] to read class files and attempt to find a suitable class
 | 
				
			||||||
 | 
					with a `public static void main(String[] args)` method. An exception is thrown if more
 | 
				
			||||||
 | 
					than one candidate is found.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-repackage-implementation]]
 | 
				
			||||||
 | 
					=== Example repackage implementation
 | 
				
			||||||
 | 
					Here is a typical example repackage:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,java,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						Repackager repackager = new Repackager(sourceJarFile);
 | 
				
			||||||
 | 
						repackager.setBackupSource(false);
 | 
				
			||||||
 | 
						repackager.repackage(new Libraries() {
 | 
				
			||||||
 | 
									@Override
 | 
				
			||||||
 | 
									public void doWithLibraries(LibraryCallback callback) throws IOException {
 | 
				
			||||||
 | 
										// Build system specific implementation, callback for each dependency
 | 
				
			||||||
 | 
										// callback.library(nestedFile, LibraryScope.COMPILE);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[build-tool-plugins-whats-next]]
 | 
				
			||||||
 | 
					== What to read next
 | 
				
			||||||
 | 
					If your interested to looking at how the build tool plugins were developed you can
 | 
				
			||||||
 | 
					look at the {github-code}/spring-boot-tools[`spring-boot-tools`] module on GitHub. More
 | 
				
			||||||
 | 
					technical details of the <<appendix-executable-jar-format.adoc#executable-jar, executable
 | 
				
			||||||
 | 
					jar format>> are covered in the appendix.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you have specific build related questions, you can check out the
 | 
				
			||||||
 | 
					``<<howto.adoc#howto, how-to>>'' guides.
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,245 @@
 | 
				
			||||||
 | 
					[[cloud-deployment]]
 | 
				
			||||||
 | 
					= Deploying to the cloud
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[partintro]
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					Spring Boot's executable jars are ready-made for most popular cloud PaaS
 | 
				
			||||||
 | 
					(platform-as-a-service) providers. These providers tend to require that you
 | 
				
			||||||
 | 
					_`bring your own container'_; they manage application processes (not Java applications
 | 
				
			||||||
 | 
					specifically), so they need some intermediary layer that adapts _your_ application to the
 | 
				
			||||||
 | 
					_cloud's_ notion of a running process.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Two popular cloud providers, Heroku and Cloud Foundry, employ a ``buildpack'' approach.
 | 
				
			||||||
 | 
					The buildpack wraps your deployed code in whatever is needed to _start_ your
 | 
				
			||||||
 | 
					application: it might be a JDK and a call to `java`, it might be an embedded webserver,
 | 
				
			||||||
 | 
					or it might be a full fledged application server. A buildpack is pluggable, but ideally
 | 
				
			||||||
 | 
					you should be able to get by with as few customizations to it as possible.
 | 
				
			||||||
 | 
					This reduces the footprint of functionality that is not under your control. It minimizes
 | 
				
			||||||
 | 
					divergence between deployment and production environments.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Ideally, your application, like a Spring Boot executable jar, has everything that it needs
 | 
				
			||||||
 | 
					to run packaged within it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In this section we'll look at what it takes to get the
 | 
				
			||||||
 | 
					<<getting-started.adoc#getting-started-first-application, simple application that we
 | 
				
			||||||
 | 
					developed>> in the ``Getting Started'' section up and running in the Cloud.
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cloud-deployment-cloud-foundry]]
 | 
				
			||||||
 | 
					== Cloud Foundry
 | 
				
			||||||
 | 
					Cloud Foundry provides default buildpacks that come into play if no other buildpack is
 | 
				
			||||||
 | 
					specified. The Cloud Foundry buildpack has excellent support for Spring applications,
 | 
				
			||||||
 | 
					including Spring Boot.  You can deploy stand-alone executable jar applications, as well as
 | 
				
			||||||
 | 
					traditional `war` packaged applications.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Once you've built your application (using, for example, `mvn clean install`) and
 | 
				
			||||||
 | 
					http://docs.cloudfoundry.org/devguide/installcf/[installed the `cf` command line tool],
 | 
				
			||||||
 | 
					simply answer the `cf push` command's prompts as follows:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ cf push --path target/demo-0.0.1-SNAPSHOT.jar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Name> *_$YOURAPP_*
 | 
				
			||||||
 | 
						Instances> *1*
 | 
				
			||||||
 | 
						Memory Limit> *256M*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Creating _$YOURAPP_... *OK*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						1: _$YOURAPP_
 | 
				
			||||||
 | 
						2: none
 | 
				
			||||||
 | 
						Subdomain> *_$YOURAPP_*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						1: cfapps.io
 | 
				
			||||||
 | 
						2: none
 | 
				
			||||||
 | 
						Domain> *cfapps.io*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Creating route _$YOURAPP_.cfapps.io... OK
 | 
				
			||||||
 | 
						Binding _$YOURAPP_.cfapps.io to _$YOURAPP_... OK
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Create services for application?> *n*
 | 
				
			||||||
 | 
						Bind other services to application?> *n*
 | 
				
			||||||
 | 
						Save configuration?> *y*
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					At this point `cf` will start uploading your application:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						Saving to manifest.yml... *OK*
 | 
				
			||||||
 | 
						Uploading $YOURAPP... *OK*
 | 
				
			||||||
 | 
						Preparing to start _$YOURAPP_... *OK*
 | 
				
			||||||
 | 
						-----> Downloaded app package (8.7M)
 | 
				
			||||||
 | 
						-----> Java Buildpack source: system
 | 
				
			||||||
 | 
						-----> Downloading Open JDK 1.7.0_51 from .../openjdk-1.7.0_51.tar.gz (*1.4s*)
 | 
				
			||||||
 | 
						       Expanding Open JDK to .java-buildpack/open_jdk (*1.3s*)
 | 
				
			||||||
 | 
						-----> Downloading Spring Auto Reconfiguration 0.8.7 from .../auto-reconfiguration-0.8.7.jar (*0.0s*)
 | 
				
			||||||
 | 
						-----> Uploading droplet (*43M*)
 | 
				
			||||||
 | 
						Checking status of app '_$YOURAPP_'...
 | 
				
			||||||
 | 
						 0 of 1 instances running (1 starting)
 | 
				
			||||||
 | 
						 0 of 1 instances running (1 starting)
 | 
				
			||||||
 | 
						 1 of 1 instances running (1 running)
 | 
				
			||||||
 | 
						Push successful! App '_$YOURAPP_' available at http://_$YOURAPP_.cfapps.io
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: Here we are substituting `$YOURAPP` for whatever value you give `cf` when it asks
 | 
				
			||||||
 | 
					for the `name` of your application.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Once Cloud Foundry acknowledges that your application has been deployed, you should be
 | 
				
			||||||
 | 
					able to hit the application at the URI provided:
 | 
				
			||||||
 | 
					`http://$YOURAPP.cfapps.io/`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cloud-deployment-cloud-foundry-services]]
 | 
				
			||||||
 | 
					=== Binding to services
 | 
				
			||||||
 | 
					By default, meta-data about the running application as well as service connection
 | 
				
			||||||
 | 
					information is exposed to the application as environment variables (for example:
 | 
				
			||||||
 | 
					`$VCAP_SERVICES`). This architecture decision is due to Cloud Foundry's polyglot
 | 
				
			||||||
 | 
					(any language and platform can be supported as a buildpack) nature; process-scoped
 | 
				
			||||||
 | 
					environment variables are language agnostic.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Environment variables don't always make for the easiest API so Spring Boot automatically
 | 
				
			||||||
 | 
					extracts then and flattens the data into properties that can be accessed through
 | 
				
			||||||
 | 
					Spring's `Environment` abstraction:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,java,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						@Component
 | 
				
			||||||
 | 
						class MyBean implements EnvironmentAware {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private String instanceId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@Override
 | 
				
			||||||
 | 
							public void setEnvironment(Environment environment) {
 | 
				
			||||||
 | 
								this.instanceId = environment.getProperty("vcap.application.instance_id");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// ...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					All Cloud Foundry properties are prefixed with `vcap`. You can use vcap properties to
 | 
				
			||||||
 | 
					access application information (such as the public URL of the application) and service
 | 
				
			||||||
 | 
					information (such as database credentials). See `VcapApplicationListener` Javdoc for
 | 
				
			||||||
 | 
					complete details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: The http://spring.io/projects/spring-cloud[Spring Cloud] project is a better fit
 | 
				
			||||||
 | 
					for tasks such as configuring a DataSource; and you can also use Spring Cloud with
 | 
				
			||||||
 | 
					Heroku too!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cloud-deployment-heroku]]
 | 
				
			||||||
 | 
					== Heroku
 | 
				
			||||||
 | 
					Heroku is another popular PaaS platform. To customize Heroku builds, you provide a
 | 
				
			||||||
 | 
					`Procfile`, which provides the incantation required to deploy an application. Heroku
 | 
				
			||||||
 | 
					assigns a `port` for the Java application to use and then ensures that routing to the
 | 
				
			||||||
 | 
					external URI works.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You must configure your application to listen on the correct port. This is a breeze with
 | 
				
			||||||
 | 
					Spring Boot. Here's the `Procfile` for our starter REST application:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						web: java -Dserver.port=$PORT -jar target/demo-0.0.1-SNAPSHOT.jar
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Spring Boot makes `-D` arguments available as properties accessible from a Spring
 | 
				
			||||||
 | 
					`Environment` instance. The `server.port` configuration property is fed to the embedded
 | 
				
			||||||
 | 
					Tomcat or Jetty instance which then uses it when it starts up. The `$PORT` environment
 | 
				
			||||||
 | 
					variable is assigned to us by the Heroku PaaS.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Heroku by default will use Java 1.6. This is fine as long as your Maven or Gradle build
 | 
				
			||||||
 | 
					is set to use the same version (Maven users can use the `java.version` property). If you
 | 
				
			||||||
 | 
					want to use JDK 1.7, create a new file adjacent to your `pom.xml` and `Procfile`,
 | 
				
			||||||
 | 
					called `system.properties`. In this file add the following:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,java]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					java.runtime.version=1.7
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This should be everything you need. The most common workflow for Heroku deployments is to
 | 
				
			||||||
 | 
					`git push` the code to production.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ git push heroku master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Initializing repository, *done*.
 | 
				
			||||||
 | 
						Counting objects: 95, *done*.
 | 
				
			||||||
 | 
						Delta compression using up to 8 threads.
 | 
				
			||||||
 | 
						Compressing objects: 100% (78/78), *done*.
 | 
				
			||||||
 | 
						Writing objects: 100% (95/95), 8.66 MiB | 606.00 KiB/s, *done*.
 | 
				
			||||||
 | 
						Total 95 (delta 31), reused 0 (delta 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-----> Java app detected
 | 
				
			||||||
 | 
						-----> Installing OpenJDK 1.7... *done*
 | 
				
			||||||
 | 
						-----> Installing Maven 3.0.3... *done*
 | 
				
			||||||
 | 
						-----> Installing settings.xml... *done*
 | 
				
			||||||
 | 
						-----> executing /app/tmp/cache/.maven/bin/mvn -B
 | 
				
			||||||
 | 
						       -Duser.home=/tmp/build_0c35a5d2-a067-4abc-a232-14b1fb7a8229
 | 
				
			||||||
 | 
						       -Dmaven.repo.local=/app/tmp/cache/.m2/repository
 | 
				
			||||||
 | 
						       -s /app/tmp/cache/.m2/settings.xml -DskipTests=true clean install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						       [INFO] Scanning for projects...
 | 
				
			||||||
 | 
						       Downloading: http://repo.spring.io/...
 | 
				
			||||||
 | 
						       Downloaded: http://repo.spring.io/... (818 B at 1.8 KB/sec)
 | 
				
			||||||
 | 
								....
 | 
				
			||||||
 | 
						       Downloaded: http://s3pository.heroku.com/jvm/... (152 KB at 595.3 KB/sec)
 | 
				
			||||||
 | 
						       [INFO] Installing /tmp/build_0c35a5d2-a067-4abc-a232-14b1fb7a8229/target/...
 | 
				
			||||||
 | 
						       [INFO] Installing /tmp/build_0c35a5d2-a067-4abc-a232-14b1fb7a8229/pom.xml ...
 | 
				
			||||||
 | 
						       [INFO] ------------------------------------------------------------------------
 | 
				
			||||||
 | 
						       [INFO] *BUILD SUCCESS*
 | 
				
			||||||
 | 
						       [INFO] ------------------------------------------------------------------------
 | 
				
			||||||
 | 
						       [INFO] Total time: 59.358s
 | 
				
			||||||
 | 
						       [INFO] Finished at: Fri Mar 07 07:28:25 UTC 2014
 | 
				
			||||||
 | 
						       [INFO] Final Memory: 20M/493M
 | 
				
			||||||
 | 
						       [INFO] ------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-----> Discovering process types
 | 
				
			||||||
 | 
						       Procfile declares types -> *web*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-----> Compressing... *done*, 70.4MB
 | 
				
			||||||
 | 
						-----> Launching... *done*, v6
 | 
				
			||||||
 | 
						       http://agile-sierra-1405.herokuapp.com/ *deployed to Heroku*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						To git@heroku.com:agile-sierra-1405.git
 | 
				
			||||||
 | 
						 * [new branch]      master -> master
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					That should be it! Your application should be up and running on Heroku.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cloud-deployment-cloudbees]]
 | 
				
			||||||
 | 
					== CloudBees
 | 
				
			||||||
 | 
					CloudBees provides cloud-based ``continuous integration'' and ``continuous delevery''
 | 
				
			||||||
 | 
					services as well as Java PaaS hosting. https://github.com/msgilligan[Sean Gilligan]
 | 
				
			||||||
 | 
					has contributed an excellent
 | 
				
			||||||
 | 
					https://github.com/CloudBees-community/springboot-gradle-cloudbees-sample[Spring Boot
 | 
				
			||||||
 | 
					sample application] to the CloudBees community GitHub repository. The project includes
 | 
				
			||||||
 | 
					an extensive  https://github.com/CloudBees-community/springboot-gradle-cloudbees-sample/blob/master/README.asciidoc[README]
 | 
				
			||||||
 | 
					that covers the steps that you need to follow when deploying to CloudBees.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cloud-deployment-whats-next]]
 | 
				
			||||||
 | 
					== What to read next
 | 
				
			||||||
 | 
					Check out the http://www.cloudfoundry.com/[Cloud Foundry], https://www.heroku.com/[Heroku]
 | 
				
			||||||
 | 
					and http://www.cloudbees.com[CloudBees] web sites for more information about the kinds of
 | 
				
			||||||
 | 
					features that a PaaS can offer. These are just three of the more popular Java PaaS
 | 
				
			||||||
 | 
					providers, since Spring Boot is so amenable to cloud-based deployment you free to
 | 
				
			||||||
 | 
					consider other providers as well.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The next section goes on to cover the <<spring-boot-cli.adoc#cli, ``Spring Boot CLI''>>;
 | 
				
			||||||
 | 
					or you can jump ahead to read about
 | 
				
			||||||
 | 
					<<build-tool-plugins.adoc#build-tool-plugins, ``build tool plugins''>>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,127 @@
 | 
				
			||||||
 | 
					[[boot-documentation]]
 | 
				
			||||||
 | 
					= Spring Boot Documentation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[partintro]
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					This section provides a brief overview of Spring Boot reference documentation. Think of
 | 
				
			||||||
 | 
					it as map for the rest of the document. You can read this reference guide in a linear
 | 
				
			||||||
 | 
					fashion, or you can skip sections if something doesn't interest you.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[boot-documentation-getting-help]]
 | 
				
			||||||
 | 
					== Getting help
 | 
				
			||||||
 | 
					Having trouble with Spring Boot, We'd like to help!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Try the <<howto.adoc#howto, How-to's>> -- they provide solutions to the most common
 | 
				
			||||||
 | 
					  questions
 | 
				
			||||||
 | 
					* Learn the Spring basics -- Spring Boot is builds on many other Spring projects, check
 | 
				
			||||||
 | 
					  the http://spring.io[spring.io] web-site for a wealth of reference documentation. If
 | 
				
			||||||
 | 
					  you are just starting out with Spring, try one of the http://spring.io/guides[guides]
 | 
				
			||||||
 | 
					* Ask a questions - we monitor http://stackoverflow.com[stackoverflow.com] for questions
 | 
				
			||||||
 | 
					  tagged with http://stackoverflow.com/tags/spring-boot[`spring-boot`]
 | 
				
			||||||
 | 
					* Report bugs with Spring Boot at https://github.com/spring-projects/spring-boot/issues
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: All of Spring Boot is open source, including the documentation! If you find problems
 | 
				
			||||||
 | 
					with the docs; or if you just want to improve them, please <<github-code, get involved>>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[boot-documentation-first-steps]]
 | 
				
			||||||
 | 
					== First steps
 | 
				
			||||||
 | 
					If your just getting started with Spring Boot, or 'Spring' in general,
 | 
				
			||||||
 | 
					<<getting-started.adoc#getting-started, this is the place to start!>>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* *From scratch:*
 | 
				
			||||||
 | 
					  <<getting-started.adoc#getting-started-introducing-spring-boot, Overview>> |
 | 
				
			||||||
 | 
					  <<getting-started.adoc#getting-started-installing-spring-boot, Installation>>
 | 
				
			||||||
 | 
					* *Tutorial:*
 | 
				
			||||||
 | 
					  <<getting-started.adoc#getting-started-first-application, Part 1>> |
 | 
				
			||||||
 | 
					  <<getting-started.adoc#getting-started-first-application-code, Part 2>>
 | 
				
			||||||
 | 
					* *Running your example:*
 | 
				
			||||||
 | 
					  <<getting-started.adoc#getting-started-first-application-run, Part 1>> |
 | 
				
			||||||
 | 
					  <<getting-started.adoc#getting-started-first-application-executable-jar, Part 2>>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					== Working with Spring Boot
 | 
				
			||||||
 | 
					Ready to actually start using Spring Boot? <<using-spring-boot.adoc#using-boot, We've
 | 
				
			||||||
 | 
					got you covered>>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* *Build systems:*
 | 
				
			||||||
 | 
					  <<using-spring-boot.adoc#using-boot-maven, Maven>> |
 | 
				
			||||||
 | 
					  <<using-spring-boot.adoc#using-boot-gradle, Gradle>> |
 | 
				
			||||||
 | 
					  <<using-spring-boot.adoc#using-boot-ant, Ant>> |
 | 
				
			||||||
 | 
					  <<using-spring-boot.adoc#using-boot-starter-poms, Starter POMs>>
 | 
				
			||||||
 | 
					* *Best practices:*
 | 
				
			||||||
 | 
					  <<using-spring-boot.adoc#using-boot-structuring-your-code, Code Structure>> |
 | 
				
			||||||
 | 
					  <<using-spring-boot.adoc#using-boot-configuration-classes, @Configuration>> |
 | 
				
			||||||
 | 
					  <<using-spring-boot.adoc#using-boot-auto-configuration, @EnableAutoConfiguration>> |
 | 
				
			||||||
 | 
					  <<using-spring-boot.adoc#using-boot-spring-beans-and-dependency-injection, Beans and Dependency Injection>>
 | 
				
			||||||
 | 
					* *Running your code*
 | 
				
			||||||
 | 
					  <<using-spring-boot.adoc#using-boot-running-from-an-ide, IDE>> |
 | 
				
			||||||
 | 
					  <<using-spring-boot.adoc#using-boot-running-as-a-packaged-application, Packaged>> |
 | 
				
			||||||
 | 
					  <<using-spring-boot.adoc#using-boot-running-with-the-maven-plugin, Maven>> |
 | 
				
			||||||
 | 
					  <<using-spring-boot.adoc#using-boot-running-with-the-gradle-plugin, Gradle>>
 | 
				
			||||||
 | 
					* *Packaging your app:*
 | 
				
			||||||
 | 
					  <<using-spring-boot.adoc#using-boot-packaging-for-production, Production jars>>
 | 
				
			||||||
 | 
					* *Spring Boot CLI:*
 | 
				
			||||||
 | 
					<<using-spring-boot-cli.adoc#cli, Using the CLI>>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					== Learning about Spring Boot features
 | 
				
			||||||
 | 
					Need more details about Spring Boot's core features?
 | 
				
			||||||
 | 
					<<spring-boot-features.adoc#boot-features, This is for you>>!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* *Core Features:*
 | 
				
			||||||
 | 
					  <<spring-boot-features.adoc#boot-features-spring-application, SpringApplication>> |
 | 
				
			||||||
 | 
					  <<spring-boot-features.adoc#boot-features-external-config, External Configuration>> |
 | 
				
			||||||
 | 
					  <<spring-boot-features.adoc#boot-features-profiles, Profiles>> |
 | 
				
			||||||
 | 
					  <<spring-boot-features.adoc#boot-features-logging, Logging>>
 | 
				
			||||||
 | 
					* *Web Applications:*
 | 
				
			||||||
 | 
					  <<spring-boot-features.adoc#boot-features-spring-mvc, MVC>> |
 | 
				
			||||||
 | 
					  <<spring-boot-features.adoc#boot-features-embedded-container, Embedded Containers>>
 | 
				
			||||||
 | 
					* *Working with data:*
 | 
				
			||||||
 | 
					  <<spring-boot-features.adoc#boot-features-sql, SQL>> |
 | 
				
			||||||
 | 
					  <<spring-boot-features.adoc#boot-features-nosql, NO-SQL>>
 | 
				
			||||||
 | 
					* *Testing:*
 | 
				
			||||||
 | 
					  <<spring-boot-features.adoc#boot-features-testing, Overview>> |
 | 
				
			||||||
 | 
					  <<spring-boot-features.adoc#boot-features-testing-spring-boot-applications, Boot Applications>> |
 | 
				
			||||||
 | 
					  <<spring-boot-features.adoc#boot-features-test-utilities, Utils>>
 | 
				
			||||||
 | 
					* *Extending:*
 | 
				
			||||||
 | 
					  <<spring-boot-features.adoc#boot-features-developing-auto-configuration, Auto-configuration>> |
 | 
				
			||||||
 | 
					  <<spring-boot-features.adoc#boot-features-condition-annotations, @Conditions>>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					== Moving to production
 | 
				
			||||||
 | 
					When your ready to push your Spring Boot application to production, we've got
 | 
				
			||||||
 | 
					<<production-ready-features.adoc#production-ready, some tricks that you might like>>!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* *Management endpoints:*
 | 
				
			||||||
 | 
					<<production-ready-features.adoc#production-ready-endpoints, Overview>> |
 | 
				
			||||||
 | 
					<<production-ready-features.adoc#production-ready-customizing-endpoints, Customization>>
 | 
				
			||||||
 | 
					* *Connection options:*
 | 
				
			||||||
 | 
					<<production-ready-features.adoc#production-ready-monitoring, HTTP>> |
 | 
				
			||||||
 | 
					<<production-ready-features.adoc#production-ready-jmx, JMX>> |
 | 
				
			||||||
 | 
					<<production-ready-features.adoc#production-ready-remote-shell, SSH>>
 | 
				
			||||||
 | 
					* *Monitoring:*
 | 
				
			||||||
 | 
					<<production-ready-features.adoc#production-ready-metrics, Metrics>> |
 | 
				
			||||||
 | 
					<<production-ready-features.adoc#production-ready-auditing, Auditing>> |
 | 
				
			||||||
 | 
					<<production-ready-features.adoc#production-ready-tracing, Tracing>>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					== Advanced topics
 | 
				
			||||||
 | 
					Lastly, we have a few topics for the more advanced user.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* *Deploy to the cloud:*
 | 
				
			||||||
 | 
					<<cloud-deployment.adoc#cloud-deployment-cloud-foundry, Cloud Foundry>> |
 | 
				
			||||||
 | 
					<<cloud-deployment.adoc#cloud-deployment-heroku, Heroku>> |
 | 
				
			||||||
 | 
					<<cloud-deployment.adoc#cloud-deployment-cloudbees, CloudBees>>
 | 
				
			||||||
 | 
					* *Build tool plugins:*
 | 
				
			||||||
 | 
					<<build-tool-plugins.adoc#build-tool-plugins-maven-plugin, Maven>> |
 | 
				
			||||||
 | 
					<<build-tool-plugins.adoc#build-tool-plugins-gradle-plugin, Gradle>>
 | 
				
			||||||
 | 
					* *Appendix:*
 | 
				
			||||||
 | 
					<<appendix-application-properties.adoc#common-application-properties, Application Properties>> |
 | 
				
			||||||
 | 
					<<appendix-auto-configuration-classes.adoc#auto-configuration-classes, Auto-configuration classes>> |
 | 
				
			||||||
 | 
					<<appendix-executable-jar-format.adoc#executable-jar, Executable Jars>>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,731 @@
 | 
				
			||||||
 | 
					[[getting-started]]
 | 
				
			||||||
 | 
					= Getting started
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[partintro]
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					If your just getting started with Spring Boot, or 'Spring' in general, this is the section
 | 
				
			||||||
 | 
					for you! Here we answer the basic '``what?''', '``how?''' and '``why?''' questions. You'll
 | 
				
			||||||
 | 
					find a gentle introduction to Spring Boot along with installation instructions.
 | 
				
			||||||
 | 
					We'll then build our first Spring Boot application, discussing some core principles as
 | 
				
			||||||
 | 
					we go.
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-introducing-spring-boot]]
 | 
				
			||||||
 | 
					== Introducing Spring Boot
 | 
				
			||||||
 | 
					Spring Boot makes it easy to create stand-alone, production-grade Spring based
 | 
				
			||||||
 | 
					Applications that can you can ``just run''. We take an opinionated view of the Spring
 | 
				
			||||||
 | 
					platform and third-party libraries so you can get started with minimum fuss. Most Spring
 | 
				
			||||||
 | 
					Boot applications need very little Spring configuration.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can use Spring Boot to create Java applications that can be started using `java -jar`
 | 
				
			||||||
 | 
					or more traditional war deployments. We also provide a command line tool that runs
 | 
				
			||||||
 | 
					``spring scripts''.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Our primary goals are:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Provide a radically faster and widely accessible getting started experience for all
 | 
				
			||||||
 | 
					Spring development.
 | 
				
			||||||
 | 
					* Be opinionated out of the box, but get out of the way quickly as requirements start to
 | 
				
			||||||
 | 
					diverge from the defaults.
 | 
				
			||||||
 | 
					* Provide a range of non-functional features that are common to large classes of projects
 | 
				
			||||||
 | 
					(e.g. embedded servers, security, metrics, health checks, externalized configuration).
 | 
				
			||||||
 | 
					* Absolutely no code generation and no requirement for XML configuration.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-installing-spring-boot]]
 | 
				
			||||||
 | 
					== Installing Spring Boot
 | 
				
			||||||
 | 
					Spring Boot can be used with ``classic'' Java development tools or installed as a command
 | 
				
			||||||
 | 
					line tool. Regardless, you will need http://www.java.com[Java SDK v1.6] or higher. You
 | 
				
			||||||
 | 
					should check your current Java installation before you begin:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ java -version
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you are new to Java development, or if you just want to experiment with Spring Boot
 | 
				
			||||||
 | 
					you might want to try the <<getting-started-installing-the-cli, Spring Boot CLI>> first,
 | 
				
			||||||
 | 
					otherwise, read on for ``classic'' installation instructions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: Although Spring Boot is compatible with Java 1.6, if possible, you should consider
 | 
				
			||||||
 | 
					using the latest version of Java.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-installation-instructions-for-java]]
 | 
				
			||||||
 | 
					=== Installation instructions for the Java developer
 | 
				
			||||||
 | 
					You can use Spring Boot in the same way as any standard java library. Simply include the
 | 
				
			||||||
 | 
					appropriate `spring-boot-*.jar` files on your classpath. Spring Boot does not require
 | 
				
			||||||
 | 
					any special ``tools'' integration, so you can use any IDE or text editor; and there is
 | 
				
			||||||
 | 
					nothing special about a Spring Boot application, so you can run and debug as you would
 | 
				
			||||||
 | 
					any other Java program.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Although you _could_ just copy Spring Boot jars, we generally recommend that you use a
 | 
				
			||||||
 | 
					build tool that supports dependency management (such as Maven or Gradle).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-maven-installation]]
 | 
				
			||||||
 | 
					==== Maven installation
 | 
				
			||||||
 | 
					Spring Boot is compatible with Apache Maven 3.0 or above. If you don't already have Maven
 | 
				
			||||||
 | 
					installed you can follow the instructions at http://maven.apache.org.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: On many operating systems Maven can be installed via a package manager. If you're an
 | 
				
			||||||
 | 
					OSX Homebrew user try `brew install maven`. Ubuntu users can run
 | 
				
			||||||
 | 
					`sudo apt-get install maven`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Spring Boot dependencies use the `org.springframework.boot` `groupId`. Typically your
 | 
				
			||||||
 | 
					Maven POM file will inherit from the `spring-boot-starter-parent` project and declare
 | 
				
			||||||
 | 
					dependencies to one or more <<using-spring-boot.adoc#using-boot-starter-poms, ``Starter
 | 
				
			||||||
 | 
					POMs''>>. Spring Boot also provides an optional
 | 
				
			||||||
 | 
					<<build-tool-plugins.adoc#build-tool-plugins-maven-plugin, Maven plugin>> to create
 | 
				
			||||||
 | 
					executable jars.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Here is a typical `pom.xml` file:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
						<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
				
			||||||
 | 
							xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
				
			||||||
 | 
							<modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<groupId>com.example</groupId>
 | 
				
			||||||
 | 
							<artifactId>myproject</artifactId>
 | 
				
			||||||
 | 
							<version>0.0.1-SNAPSHOT</version>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<!-- Inherit defaults from Spring Boot -->
 | 
				
			||||||
 | 
							<parent>
 | 
				
			||||||
 | 
								<groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
								<artifactId>spring-boot-starter-parent</artifactId>
 | 
				
			||||||
 | 
								<version>{spring-boot-version}</version>
 | 
				
			||||||
 | 
							</parent>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<!-- Add typical dependencies for a web application -->
 | 
				
			||||||
 | 
							<dependencies>
 | 
				
			||||||
 | 
								<dependency>
 | 
				
			||||||
 | 
									<groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
									<artifactId>spring-boot-starter-web</artifactId>
 | 
				
			||||||
 | 
								</dependency>
 | 
				
			||||||
 | 
							</dependencies>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<!-- Package as an executable jar -->
 | 
				
			||||||
 | 
							<build>
 | 
				
			||||||
 | 
								<plugins>
 | 
				
			||||||
 | 
									<plugin>
 | 
				
			||||||
 | 
										<groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
										<artifactId>spring-boot-maven-plugin</artifactId>
 | 
				
			||||||
 | 
									</plugin>
 | 
				
			||||||
 | 
								</plugins>
 | 
				
			||||||
 | 
							</build>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifeval::["{spring-boot-repo}" != "release"]
 | 
				
			||||||
 | 
							<!-- Add Spring repoistories -->
 | 
				
			||||||
 | 
							<!-- (you don't need this if you are using a .RELEASE version) -->
 | 
				
			||||||
 | 
							<repositories>
 | 
				
			||||||
 | 
								<repository>
 | 
				
			||||||
 | 
									<id>spring-snapshots</id>
 | 
				
			||||||
 | 
									<url>http://repo.spring.io/snapshot</url>
 | 
				
			||||||
 | 
									<snapshots><enabled>true</enabled></snapshots>
 | 
				
			||||||
 | 
								</repository>
 | 
				
			||||||
 | 
								<repository>
 | 
				
			||||||
 | 
									<id>spring-milestones</id>
 | 
				
			||||||
 | 
									<url>http://repo.spring.io/milestone</url>
 | 
				
			||||||
 | 
								</repository>
 | 
				
			||||||
 | 
							</repositories>
 | 
				
			||||||
 | 
							<pluginRepositories>
 | 
				
			||||||
 | 
								<pluginRepository>
 | 
				
			||||||
 | 
									<id>spring-snapshots</id>
 | 
				
			||||||
 | 
									<url>http://repo.spring.io/snapshot</url>
 | 
				
			||||||
 | 
								</pluginRepository>
 | 
				
			||||||
 | 
								<pluginRepository>
 | 
				
			||||||
 | 
									<id>spring-milestones</id>
 | 
				
			||||||
 | 
									<url>http://repo.spring.io/milestone</url>
 | 
				
			||||||
 | 
								</pluginRepository>
 | 
				
			||||||
 | 
							</pluginRepositories>
 | 
				
			||||||
 | 
					endif::[]
 | 
				
			||||||
 | 
						</project>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-gradle-installation]]
 | 
				
			||||||
 | 
					==== Gradle installation
 | 
				
			||||||
 | 
					Spring Boot is compatible with Gradle 1.6 or above. If you don't already have Gradle
 | 
				
			||||||
 | 
					installed you can follow the instructions at http://www.gradle.org/.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Spring Boot dependencies can be declared using the `org.springframework.boot` `group`.
 | 
				
			||||||
 | 
					Typically your project will declare dependencies to one or more
 | 
				
			||||||
 | 
					<<using-spring-boot.adoc#using-boot-starter-poms, ``Starter POMs''>>. Spring Boot
 | 
				
			||||||
 | 
					provides a useful <<build-tool-plugins.adoc#build-tool-plugins-gradle, Gradle plugin>>
 | 
				
			||||||
 | 
					that can be used to simplify dependency declarations and to create executable jars.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.Gradle Wrapper
 | 
				
			||||||
 | 
					****
 | 
				
			||||||
 | 
					The Gradle Wrapper provides a nice way of ``obtaining'' Gradle when you need to build a
 | 
				
			||||||
 | 
					project. It's a small script and library that you commit alongside your code to bootstrap
 | 
				
			||||||
 | 
					the build process. See http://www.gradle.org/docs/current/userguide/gradle_wrapper.html
 | 
				
			||||||
 | 
					for details.
 | 
				
			||||||
 | 
					****
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Here is a typical `build.gradle` file:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0,subs="verbatim,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						buildscript {
 | 
				
			||||||
 | 
							repositories {
 | 
				
			||||||
 | 
								mavenCentral()
 | 
				
			||||||
 | 
					ifndef::release[]
 | 
				
			||||||
 | 
								maven { url "http://repo.spring.io/snapshot" }
 | 
				
			||||||
 | 
								maven { url "http://repo.spring.io/milestone" }
 | 
				
			||||||
 | 
					endif::release[]
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							dependencies {
 | 
				
			||||||
 | 
								classpath("org.springframework.boot:spring-boot-gradle-plugin:{spring-boot-version}")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						apply plugin: 'java'
 | 
				
			||||||
 | 
						apply plugin: 'spring-boot'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						jar {
 | 
				
			||||||
 | 
							baseName = 'myproject'
 | 
				
			||||||
 | 
							version =  '0.0.1-SNAPSHOT'
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						repositories {
 | 
				
			||||||
 | 
							mavenCentral()
 | 
				
			||||||
 | 
					ifndef::release[]
 | 
				
			||||||
 | 
							maven { url "http://repo.spring.io/snapshot" }
 | 
				
			||||||
 | 
							maven { url "http://repo.spring.io/milestone" }
 | 
				
			||||||
 | 
					endif::release[]
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dependencies {
 | 
				
			||||||
 | 
							compile("org.springframework.boot:spring-boot-starter-web")
 | 
				
			||||||
 | 
							testCompile("junit:junit")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-installing-the-cli]]
 | 
				
			||||||
 | 
					=== Installing the Spring Boot CLI
 | 
				
			||||||
 | 
					The Spring Boot CLI is a command line tool that can be used if you want to quickly
 | 
				
			||||||
 | 
					prototype with Spring. It allows you to run http://groovy.codehaus.org/[Groovy] scripts,
 | 
				
			||||||
 | 
					which means that you have a familiar Java-like syntax, without so much boilerplate code.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You don't need to use the CLI to work with Spring Boot but it's definitely the quickest
 | 
				
			||||||
 | 
					way to get a Spring application off the ground.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-manual-cli-installation]]
 | 
				
			||||||
 | 
					==== Manual installation
 | 
				
			||||||
 | 
					You can download the Spring CLI distribution from the Spring software repository:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* http://repo.spring.io/{spring-boot-repo}/org/springframework/boot/spring-boot-cli/{spring-boot-version}/spring-boot-cli-{spring-boot-version}-bin.zip[spring-boot-cli-{spring-boot-version}-bin.zip]
 | 
				
			||||||
 | 
					* http://repo.spring.io/{spring-boot-repo}/org/springframework/boot/spring-boot-cli/{spring-boot-version}/spring-boot-cli-{spring-boot-version}-bin.tar.gz[spring-boot-cli-{spring-boot-version}-bin.tar.gz]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Cutting edge http://repo.spring.io/snapshot/org/springframework/boot/spring-boot-cli/[snapshot distributions]
 | 
				
			||||||
 | 
					are also available.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Once downloaded, follow the {github-raw}/spring-boot-cli/src/main/content/INSTALL.txt[INSTALL.txt]
 | 
				
			||||||
 | 
					instructions from the unpacked archive. In summary: there is a `spring` script
 | 
				
			||||||
 | 
					(`spring.bat` for Windows) in a `bin/` directory in the `.zip` file, or alternatively you
 | 
				
			||||||
 | 
					can use `java -jar` with the `.jar` file (the script helps you to be sure that the
 | 
				
			||||||
 | 
					classpath is set correctly).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-gvm-cli-installation]]
 | 
				
			||||||
 | 
					==== Installation with GVM
 | 
				
			||||||
 | 
					GVM (the Groovy Environment Manager) can be used for managing multiple versions of
 | 
				
			||||||
 | 
					various Groovy and Java binary packages, including Groovy itself and the Spring Boot CLI.
 | 
				
			||||||
 | 
					Get `gvm` from http://gvmtool.net and install Spring Boot with
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ gvm install springboot
 | 
				
			||||||
 | 
						$ spring --version
 | 
				
			||||||
 | 
						Spring Boot v{spring-boot-version}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you are developing features for the CLI and want easy access to the version you just
 | 
				
			||||||
 | 
					built, follow these extra instructions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ gvm install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-{spring-boot-version}-bin/spring-{spring-boot-version}/
 | 
				
			||||||
 | 
						$ gvm use springboot dev
 | 
				
			||||||
 | 
						$ spring --version
 | 
				
			||||||
 | 
						Spring CLI v{spring-boot-version}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This will install a local instance of `spring` called the `dev` instance inside your gvm
 | 
				
			||||||
 | 
					repository. It points at your target build location, so every time you rebuild Spring
 | 
				
			||||||
 | 
					Boot, `spring` will be up-to-date.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can see it by doing this:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ gvm ls springboot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						================================================================================
 | 
				
			||||||
 | 
						Available Springboot Versions
 | 
				
			||||||
 | 
						================================================================================
 | 
				
			||||||
 | 
						> + dev
 | 
				
			||||||
 | 
						* {spring-boot-version}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						================================================================================
 | 
				
			||||||
 | 
						+ - local version
 | 
				
			||||||
 | 
						* - installed
 | 
				
			||||||
 | 
						> - currently in use
 | 
				
			||||||
 | 
						================================================================================
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-homebrew-cli-installation]]
 | 
				
			||||||
 | 
					==== OSX Homebrew installation
 | 
				
			||||||
 | 
					If you are on a Mac and using http://brew.sh/[Homebrew], all you need to do to install
 | 
				
			||||||
 | 
					the Spring Boot CLI is:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ brew tap pivotal/tap
 | 
				
			||||||
 | 
						$ brew install springboot
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Homebrew will install `spring` to `/usr/local/bin`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: If you don't see the formula, you're installation of brew might be out-of-date.
 | 
				
			||||||
 | 
					Just execute `brew update` and try again.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-cli-command-line-completion]]
 | 
				
			||||||
 | 
					==== Command-line completion
 | 
				
			||||||
 | 
					Spring Boot CLI ships with scripts that provide command completion for
 | 
				
			||||||
 | 
					http://en.wikipedia.org/wiki/Bash_%28Unix_shell%29[BASH] and
 | 
				
			||||||
 | 
					http://en.wikipedia.org/wiki/Zsh[zsh] shells. You can `source` the script (also named
 | 
				
			||||||
 | 
					`spring`) in any shell, or put it in your personal or system-wide bash completion
 | 
				
			||||||
 | 
					initialization. On a Debian system the system-wide scripts are in `/etc/bash_completion.d`
 | 
				
			||||||
 | 
					and all scripts in that directory are executed when a new shell starts. To run the script
 | 
				
			||||||
 | 
					manually, e.g. if you have installed using `GVM`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ . ~/.gvm/springboot/current/bash_completion.d/spring
 | 
				
			||||||
 | 
						$ spring <HIT TAB HERE>
 | 
				
			||||||
 | 
						  grab  help  jar  run  test  version
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: If you install Spring Boot CLI using Homebrew, the command-line completion scripts
 | 
				
			||||||
 | 
					are automatically registered with your shell.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-cli-example]]
 | 
				
			||||||
 | 
					==== Quick start Spring CLI example
 | 
				
			||||||
 | 
					Here's a really simple web application that you can use to test you installation. Create
 | 
				
			||||||
 | 
					a file called `app.groovy`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						@Controller
 | 
				
			||||||
 | 
						class ThisWillActuallyRun {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@RequestMapping("/")
 | 
				
			||||||
 | 
							@ResponseBody
 | 
				
			||||||
 | 
							String home() {
 | 
				
			||||||
 | 
								return "Hello World!"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then simply run it from a shell:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ spring run app.groovy
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: It will take some time when you first run the application as dependencies are
 | 
				
			||||||
 | 
					downloaded, subsequent runs will be much quicker.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Open http://localhost:8080 in your favorite web browser and you should see the following
 | 
				
			||||||
 | 
					output:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						Hello World!
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-first-application]]
 | 
				
			||||||
 | 
					== Developing your first Spring Boot application
 | 
				
			||||||
 | 
					Let's develop a simple ``Hello World!'' web application in Java that highlights some
 | 
				
			||||||
 | 
					of Spring Boot's key features. We'll use Maven to build this project since most IDEs
 | 
				
			||||||
 | 
					support it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: The http://spring.io[spring.io] web site contains many ``Getting Started'' guides
 | 
				
			||||||
 | 
					that use Spring Boot. If you're looking to solve a specific problem; check there first.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Before we begin, open a terminal to check that you have valid versions of Java and Maven
 | 
				
			||||||
 | 
					installed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ java -version
 | 
				
			||||||
 | 
						java version "1.7.0_51"
 | 
				
			||||||
 | 
						Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
 | 
				
			||||||
 | 
						Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ mvn -v
 | 
				
			||||||
 | 
						Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 08:22:22-0700)
 | 
				
			||||||
 | 
						Maven home: /Users/user/tools/apache-maven-3.1.1
 | 
				
			||||||
 | 
						Java version: 1.7.0_51, vendor: Oracle Corporation
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: This sample needs to be created in its own folder. Subsequent instructions assume
 | 
				
			||||||
 | 
					that you have created a suitable folder and that it is your ``current directory''.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-first-application-pom]]
 | 
				
			||||||
 | 
					=== Creating the POM
 | 
				
			||||||
 | 
					We need to start by creating a Maven `pom.xml` file. The `pom.xml` is the recipe that
 | 
				
			||||||
 | 
					will be used to build your project. Open you favorite text editor and add the following:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
						<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
				
			||||||
 | 
							xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
				
			||||||
 | 
							<modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<groupId>com.example</groupId>
 | 
				
			||||||
 | 
							<artifactId>myproject</artifactId>
 | 
				
			||||||
 | 
							<version>0.0.1-SNAPSHOT</version>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<parent>
 | 
				
			||||||
 | 
								<groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
								<artifactId>spring-boot-starter-parent</artifactId>
 | 
				
			||||||
 | 
								<version>{spring-boot-version}</version>
 | 
				
			||||||
 | 
							</parent>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<!-- Additional lines to be added here... -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifeval::["{spring-boot-repo}" != "release"]
 | 
				
			||||||
 | 
							<!-- (you don't need this if you are using a .RELEASE version) -->
 | 
				
			||||||
 | 
							<repositories>
 | 
				
			||||||
 | 
								<repository>
 | 
				
			||||||
 | 
									<id>spring-snapshots</id>
 | 
				
			||||||
 | 
									<url>http://repo.spring.io/snapshot</url>
 | 
				
			||||||
 | 
									<snapshots><enabled>true</enabled></snapshots>
 | 
				
			||||||
 | 
								</repository>
 | 
				
			||||||
 | 
								<repository>
 | 
				
			||||||
 | 
									<id>spring-milestones</id>
 | 
				
			||||||
 | 
									<url>http://repo.spring.io/milestone</url>
 | 
				
			||||||
 | 
								</repository>
 | 
				
			||||||
 | 
							</repositories>
 | 
				
			||||||
 | 
							<pluginRepositories>
 | 
				
			||||||
 | 
								<pluginRepository>
 | 
				
			||||||
 | 
									<id>spring-snapshots</id>
 | 
				
			||||||
 | 
									<url>http://repo.spring.io/snapshot</url>
 | 
				
			||||||
 | 
								</pluginRepository>
 | 
				
			||||||
 | 
								<pluginRepository>
 | 
				
			||||||
 | 
									<id>spring-milestones</id>
 | 
				
			||||||
 | 
									<url>http://repo.spring.io/milestone</url>
 | 
				
			||||||
 | 
								</pluginRepository>
 | 
				
			||||||
 | 
							</pluginRepositories>
 | 
				
			||||||
 | 
					endif::[]
 | 
				
			||||||
 | 
						</project>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This should give you a working build, you can test it out by running `mvn package` (you
 | 
				
			||||||
 | 
					can ignore the '``jar will be empty - no content was marked for inclusion!''' warning for
 | 
				
			||||||
 | 
					now).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: At this point you could import the project into an IDE (most modern Java IDE's
 | 
				
			||||||
 | 
					include built-in support for Maven). For simplicity, we will continue to use a plain
 | 
				
			||||||
 | 
					text editor for this example.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-first-application-dependencies]]
 | 
				
			||||||
 | 
					=== Adding classpath dependencies
 | 
				
			||||||
 | 
					Spring Boot provides a number of ``Starter POMs'' that make easy to add jars to your
 | 
				
			||||||
 | 
					classpath. Our sample application has already used `spring-boot-starter-parent` in the
 | 
				
			||||||
 | 
					`parent` section of the POM. The `spring-boot-starter-parent` is a special starter
 | 
				
			||||||
 | 
					that provides useful Maven defaults. It also provides a `dependency-management` section
 | 
				
			||||||
 | 
					so that you can omit `version` tags for ``blessed'' dependencies.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Other ``Starter POMs'' simply provide dependencies that you are likely to need when
 | 
				
			||||||
 | 
					developing a specific type of application. Since we are developing web application we will
 | 
				
			||||||
 | 
					add a `spring-boot-starter-web` dependency -- but before that, lets look at what we
 | 
				
			||||||
 | 
					currently have.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ mvn dependency:tree
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
 | 
				
			||||||
 | 
						[INFO] +- junit:junit:jar:4.11:test
 | 
				
			||||||
 | 
						[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
 | 
				
			||||||
 | 
						[INFO] +- org.mockito:mockito-core:jar:1.9.5:test
 | 
				
			||||||
 | 
						[INFO] |  \- org.objenesis:objenesis:jar:1.0:test
 | 
				
			||||||
 | 
						[INFO] \- org.hamcrest:hamcrest-library:jar:1.3:test
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The `mvn dependency:tree` command prints tree representation of your project dependencies.
 | 
				
			||||||
 | 
					You can see that `spring-boot-starter-parent` has already provides some useful test
 | 
				
			||||||
 | 
					dependencies. Lets edit our `pom.xml` and add the `spring-boot-starter-web` dependency
 | 
				
			||||||
 | 
					just below the `parent` section:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<dependencies>
 | 
				
			||||||
 | 
							<dependency>
 | 
				
			||||||
 | 
								<groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
								<artifactId>spring-boot-starter-web</artifactId>
 | 
				
			||||||
 | 
							</dependency>
 | 
				
			||||||
 | 
						</dependencies>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you run `mvn dependency:tree` again, you will see that there are now a number of
 | 
				
			||||||
 | 
					additional dependencies, including the Tomcat web server and Spring Boot itself.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-first-application-code]]
 | 
				
			||||||
 | 
					=== Writing the code
 | 
				
			||||||
 | 
					To finish our application we need to create a single Java file. Maven will compile sources
 | 
				
			||||||
 | 
					from `src/main/java` so you need to create that folder structure, then add a file named
 | 
				
			||||||
 | 
					`src/main/java/Example.java`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,java,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						import org.springframework.boot.*;
 | 
				
			||||||
 | 
						import org.springframework.boot.autoconfigure.*;
 | 
				
			||||||
 | 
						import org.springframework.stereotype.*;
 | 
				
			||||||
 | 
						import org.springframework.web.bind.annotation.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Controller
 | 
				
			||||||
 | 
						@EnableAutoConfiguration
 | 
				
			||||||
 | 
						public class Example {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@RequestMapping("/")
 | 
				
			||||||
 | 
							@ResponseBody
 | 
				
			||||||
 | 
							String home() {
 | 
				
			||||||
 | 
								return "Hello World!";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public static void main(String[] args) throws Exception {
 | 
				
			||||||
 | 
								SpringApplication.run(Example.class, args);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Although there isn't much code here, quite a lot is going on. Lets step though the
 | 
				
			||||||
 | 
					important parts.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-first-application-annotations]]
 | 
				
			||||||
 | 
					==== The @Controller, @RequestMapping and @ResponseBody annotations
 | 
				
			||||||
 | 
					The first annotation on our `Example` class is `@Controller`. This is known as a
 | 
				
			||||||
 | 
					_stereotype_ annotation. It provides hints for people reading the code, and for Spring,
 | 
				
			||||||
 | 
					that the class plays a specific role. In this case, our class is a web `@Controller` so
 | 
				
			||||||
 | 
					Spring will consider it when handling incoming web requests.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The `@RequestMapping` annotation provides ``routing'' information. It is telling Spring
 | 
				
			||||||
 | 
					that any HTTP request with the path "`/`" should be mapped to the `home` method. The
 | 
				
			||||||
 | 
					additional `@ResponseBody` annotation tells Spring to render the resulting string directly
 | 
				
			||||||
 | 
					back to the caller.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: The `@Controller`, `@RequestMapping` and `@ResponseBody` annotations are Spring MVC
 | 
				
			||||||
 | 
					annotations (they are not specific to Spring Boot). See the
 | 
				
			||||||
 | 
					<{spring-reference}/#mvc>[MVC section] in the Spring
 | 
				
			||||||
 | 
					Reference Documentation for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-first-application-auto-configuration]]
 | 
				
			||||||
 | 
					==== The @EnableAutoConfiguration annotation
 | 
				
			||||||
 | 
					The second class-level annotation is `@EnableAutoConfiguration`. This annotation tells
 | 
				
			||||||
 | 
					Spring Boot to ``guess'' how you will want to configure Spring, based on the jar
 | 
				
			||||||
 | 
					dependencies that you have added. Since `spring-boot-starter-web` added Tomcat and
 | 
				
			||||||
 | 
					Spring MVC, the auto-configuration will assume that you are developing a web application
 | 
				
			||||||
 | 
					and setup Spring accordingly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.Starter POMs and Auto-Configuration
 | 
				
			||||||
 | 
					****
 | 
				
			||||||
 | 
					Auto-configuration is designed to work well with ``Starter POMs'', but the two concepts
 | 
				
			||||||
 | 
					are not directly tied. You are free to pick-and-choose jar dependencies outside of the
 | 
				
			||||||
 | 
					starter POMs and Spring Boot will still do its best to auto-configure your application.
 | 
				
			||||||
 | 
					****
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-first-application-main-method]]
 | 
				
			||||||
 | 
					==== The ``main'' method
 | 
				
			||||||
 | 
					The final part of our application is the `main` method. This is just a standard method
 | 
				
			||||||
 | 
					that follows the Java convention for an application entry point. Our main method delegates
 | 
				
			||||||
 | 
					to Spring Boot's `SpringApplication` class by calling `run`. `SpringApplication` will
 | 
				
			||||||
 | 
					bootstrap our application, starting Spring which will in turn start the auto-configured
 | 
				
			||||||
 | 
					Tomcat web server. We need to pass `Example.class` as an argument to the `run` method to
 | 
				
			||||||
 | 
					tell `SpringApplication` which is the primary Spring component. The `args` array is also
 | 
				
			||||||
 | 
					passed though to expose any command-line arguments.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-first-application-run]]
 | 
				
			||||||
 | 
					=== Running the example
 | 
				
			||||||
 | 
					At this point out application should work. Since we have used the
 | 
				
			||||||
 | 
					`spring-boot-starter-parent` POM we have a useful `run` goal that we can use to start
 | 
				
			||||||
 | 
					the application. Type `mvn spring-boot:run` from the root project directory to start the
 | 
				
			||||||
 | 
					application:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ mvn spring-boot:run
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						  .   ____          _            __ _ _
 | 
				
			||||||
 | 
						 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
 | 
				
			||||||
 | 
						( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 | 
				
			||||||
 | 
						 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
 | 
				
			||||||
 | 
						  '  |____| .__|_| |_|_| |_\__, | / / / /
 | 
				
			||||||
 | 
						 =========|_|==============|___/=/_/_/_/
 | 
				
			||||||
 | 
						 :: Spring Boot ::  (v{spring-boot-version})
 | 
				
			||||||
 | 
						....... . . .
 | 
				
			||||||
 | 
						....... . . . (log output here)
 | 
				
			||||||
 | 
						....... . . .
 | 
				
			||||||
 | 
						........ Started Example in 2.222 seconds (JVM running for 6.514)
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you open a web browser to http://localhost:8080 you should see the following output:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						Hello World!
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To gracefully exit the application hit `ctrl-c`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-first-application-executable-jar]]
 | 
				
			||||||
 | 
					=== Creating an executable jar
 | 
				
			||||||
 | 
					Lets finish our example by creating a completely self-contained executable jar file that
 | 
				
			||||||
 | 
					we could run in production. Executable jars (sometimes called ``fat jars'') are archives
 | 
				
			||||||
 | 
					containing your compiled classes along with all of the jar dependencies that your code
 | 
				
			||||||
 | 
					needs to run.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.Executable jars and Java
 | 
				
			||||||
 | 
					****
 | 
				
			||||||
 | 
					Java does not provide any standard way to load nested jar files (i.e. jar files that are
 | 
				
			||||||
 | 
					themselves contained within a jar). This can be problematic if you are looking to
 | 
				
			||||||
 | 
					distribute a self contained application.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To solve this problem, many developers use ``shaded'' jars. A shaded jar simply packages
 | 
				
			||||||
 | 
					all classes, from all jars, into a single ``uber jar''. The problem with shaded jars is that
 | 
				
			||||||
 | 
					it becomes hard to see which libraries you are actually using in your application. It can
 | 
				
			||||||
 | 
					also be problematic if the the same filename is used (but with different content) in
 | 
				
			||||||
 | 
					multiple jars.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Spring Boot takes a <<appendix-executable-jar-format.adoc#executable-jar, different
 | 
				
			||||||
 | 
					approach>> and allows you to actually nest jars directly.
 | 
				
			||||||
 | 
					****
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To create an executable jar we need to add the `spring-boot-maven-plugin` to our
 | 
				
			||||||
 | 
					`pom.xml`. Insert the following lines just below the `dependencies` section:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<build>
 | 
				
			||||||
 | 
							<plugins>
 | 
				
			||||||
 | 
								<plugin>
 | 
				
			||||||
 | 
									<groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
									<artifactId>spring-boot-maven-plugin</artifactId>
 | 
				
			||||||
 | 
								</plugin>
 | 
				
			||||||
 | 
							</plugins>
 | 
				
			||||||
 | 
						</build>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Save your `pom.xml` and run `mvn package` from the command line:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ mvn package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						[INFO] Scanning for projects...
 | 
				
			||||||
 | 
						[INFO]
 | 
				
			||||||
 | 
						[INFO] ------------------------------------------------------------------------
 | 
				
			||||||
 | 
						[INFO] Building myproject 0.0.1-SNAPSHOT
 | 
				
			||||||
 | 
						[INFO] ------------------------------------------------------------------------
 | 
				
			||||||
 | 
						[INFO] .... ..
 | 
				
			||||||
 | 
						[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
 | 
				
			||||||
 | 
						[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
 | 
				
			||||||
 | 
						[INFO]
 | 
				
			||||||
 | 
						[INFO] --- spring-boot-maven-plugin:{spring-boot-version}:repackage (default) @ myproject ---
 | 
				
			||||||
 | 
						[INFO] ------------------------------------------------------------------------
 | 
				
			||||||
 | 
						[INFO] BUILD SUCCESS
 | 
				
			||||||
 | 
						[INFO] ------------------------------------------------------------------------
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you look in the `target` directory you should see `myproject-0.0.1-SNAPSHOT.jar`. The
 | 
				
			||||||
 | 
					file should be around 10 Mb in size. If you want to peek inside, you can use `jar tvf`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You should also see a much smaller file named `myproject-0.0.1-SNAPSHOT.jar.original`
 | 
				
			||||||
 | 
					in the `target` directory. This is the original jar file that Maven created before it was
 | 
				
			||||||
 | 
					repackaged by Spring Boot.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To run that application, use the `java -jar` command:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						  .   ____          _            __ _ _
 | 
				
			||||||
 | 
						 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
 | 
				
			||||||
 | 
						( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 | 
				
			||||||
 | 
						 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
 | 
				
			||||||
 | 
						  '  |____| .__|_| |_|_| |_\__, | / / / /
 | 
				
			||||||
 | 
						 =========|_|==============|___/=/_/_/_/
 | 
				
			||||||
 | 
						 :: Spring Boot ::  (v{spring-boot-version})
 | 
				
			||||||
 | 
						....... . . .
 | 
				
			||||||
 | 
						....... . . . (log output here)
 | 
				
			||||||
 | 
						....... . . .
 | 
				
			||||||
 | 
						........ Started Example in 3.236 seconds (JVM running for 3.764)
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					As before, to gracefully exit the application hit `ctrl-c`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[getting-started-whats-next]]
 | 
				
			||||||
 | 
					== What to read next
 | 
				
			||||||
 | 
					Hopefully this section has provided you with some of the Spring Boot basics, and got you
 | 
				
			||||||
 | 
					on your way to writing your own applications. If your a ``task oriented'' type of
 | 
				
			||||||
 | 
					developer you might want to jump over to http://spring.io and check out some of the
 | 
				
			||||||
 | 
					http://spring.io/guides/[getting started] guides that solve specific
 | 
				
			||||||
 | 
					'``How do I do that with Spring''' problems; we also have a Spring Boot specific
 | 
				
			||||||
 | 
					``<<howto.adoc#how-to, How-to>>'' reference documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Otherwise, the next logical step is to read the ``<<using-spring-boot.adoc#using-boot>>''
 | 
				
			||||||
 | 
					section. If you're really impatient, you could also jump ahead and read about
 | 
				
			||||||
 | 
					``<<spring-boot-features.adoc#boot-features>>''.
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					<productname>Spring Boot</productname>
 | 
				
			||||||
 | 
					<releaseinfo>{spring-boot-version}</releaseinfo>
 | 
				
			||||||
 | 
					<copyright>
 | 
				
			||||||
 | 
						<year>2013-2014</year>
 | 
				
			||||||
 | 
					</copyright>
 | 
				
			||||||
 | 
					<legalnotice>
 | 
				
			||||||
 | 
						<para>
 | 
				
			||||||
 | 
							Copies of this document may be made for your own use and for distribution to
 | 
				
			||||||
 | 
							others, provided that you do not charge any fee for such copies and further
 | 
				
			||||||
 | 
							provided that each copy contains this Copyright Notice, whether distributed in
 | 
				
			||||||
 | 
							print or electronically.
 | 
				
			||||||
 | 
						</para>
 | 
				
			||||||
 | 
					</legalnotice>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,42 @@
 | 
				
			||||||
 | 
					= Spring Boot Reference Guide
 | 
				
			||||||
 | 
					Phillip Webb; Dave Syer; Josh Long;
 | 
				
			||||||
 | 
					:doctype: book
 | 
				
			||||||
 | 
					:toc:
 | 
				
			||||||
 | 
					:toclevels: 4
 | 
				
			||||||
 | 
					:source-highlighter: prettify
 | 
				
			||||||
 | 
					:numbered:
 | 
				
			||||||
 | 
					:icons: font
 | 
				
			||||||
 | 
					:spring-boot-repo: snapshot
 | 
				
			||||||
 | 
					:github-tag: master
 | 
				
			||||||
 | 
					:spring-boot-docs-version: current
 | 
				
			||||||
 | 
					:github-repo: spring-projects/spring-boot
 | 
				
			||||||
 | 
					:github-raw: http://raw.github.com/{github-repo}/{github-tag}
 | 
				
			||||||
 | 
					:github-code: http://github.com/{github-repo}/tree/{github-tag}
 | 
				
			||||||
 | 
					:sc-ext: java
 | 
				
			||||||
 | 
					:sc-spring-boot: {github-code}/spring-boot/src/main/java/org/springframework/boot
 | 
				
			||||||
 | 
					:sc-spring-boot-autoconfigure: {github-code}/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure
 | 
				
			||||||
 | 
					:sc-spring-boot-actuator: {github-code}/spring-boot-actuator/src/main/java/org/springframework/boot/actuate
 | 
				
			||||||
 | 
					:sc-spring-boot-cli: {github-code}/spring-boot-cli/src/main/java/org/springframework/boot/cli
 | 
				
			||||||
 | 
					:dc-ext: html
 | 
				
			||||||
 | 
					:dc-root: http://docs.spring.io/spring-boot/docs/{spring-boot-docs-version}/api
 | 
				
			||||||
 | 
					:dc-spring-boot: {dc-root}/org/springframework/boot
 | 
				
			||||||
 | 
					:dc-spring-boot-autoconfigure: {dc-root}/org/springframework/boot/autoconfigure
 | 
				
			||||||
 | 
					:dc-spring-boot-actuator: {dc-root}/org/springframework/boot/actuate
 | 
				
			||||||
 | 
					:spring-reference: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle
 | 
				
			||||||
 | 
					:spring-data-javadoc: http://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa
 | 
				
			||||||
 | 
					:spring-data-commons-javadoc: http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data
 | 
				
			||||||
 | 
					:spring-data-mongo-javadoc: http://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb
 | 
				
			||||||
 | 
					// ======================================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include::documentation-overview.adoc[]
 | 
				
			||||||
 | 
					include::getting-started.adoc[]
 | 
				
			||||||
 | 
					include::using-spring-boot.adoc[]
 | 
				
			||||||
 | 
					include::spring-boot-features.adoc[]
 | 
				
			||||||
 | 
					include::production-ready-features.adoc[]
 | 
				
			||||||
 | 
					include::cloud-deployment.adoc[]
 | 
				
			||||||
 | 
					include::spring-boot-cli.adoc[]
 | 
				
			||||||
 | 
					include::build-tool-plugins.adoc[]
 | 
				
			||||||
 | 
					include::howto.adoc[]
 | 
				
			||||||
 | 
					include::appendix.adoc[]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ======================================================================================
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,749 @@
 | 
				
			||||||
 | 
					[[production-ready]]
 | 
				
			||||||
 | 
					= Production-ready features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[partintro]
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					Spring Boot includes a number of additional features to help you monitor and manage your
 | 
				
			||||||
 | 
					application when it's pushed to production. You can choose to manage and monitor your
 | 
				
			||||||
 | 
					application using HTTP endpoints, with JMX or even by remote shell (SSH or Telnet).
 | 
				
			||||||
 | 
					Auditing, health and metrics gathering can be automatically applied to your application.
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-enabling]]
 | 
				
			||||||
 | 
					== Enabling production-ready features.
 | 
				
			||||||
 | 
					The `spring-boot-actuator` project provides all of Spring Boot's production-ready
 | 
				
			||||||
 | 
					features. The simplist way to enable the features is to add a dependency to the
 | 
				
			||||||
 | 
					`spring-boot-starter-actuator` ``Starter POM''.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.Definition of Actuator
 | 
				
			||||||
 | 
					****
 | 
				
			||||||
 | 
					An actuator is a manufacturing term, referring to a mechanical device for moving or
 | 
				
			||||||
 | 
					controlling something. Actuators can generate a large amount of motion from a small
 | 
				
			||||||
 | 
					change.
 | 
				
			||||||
 | 
					****
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To add the actuator to a Maven based project, add the following ``starter''
 | 
				
			||||||
 | 
					dependency:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<dependencies>
 | 
				
			||||||
 | 
							<dependency>
 | 
				
			||||||
 | 
								<groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
								<artifactId>spring-boot-starter-actuator</artifactId>
 | 
				
			||||||
 | 
							</dependency>
 | 
				
			||||||
 | 
						</dependencies>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For Gradle, use the declaration:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						dependencies {
 | 
				
			||||||
 | 
							compile("org.springframework.boot:spring-boot-starter-actuator")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-endpoints]]
 | 
				
			||||||
 | 
					== Endpoints
 | 
				
			||||||
 | 
					Actuator endpoints allow you to monitor and interact with your application. Spring Boot
 | 
				
			||||||
 | 
					includes a number of built-in endpoints and you can also add your own. For example the
 | 
				
			||||||
 | 
					`health` endpoint provides basic application health information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The way that enpoints are exposed will depend on the type of technology that you choose.
 | 
				
			||||||
 | 
					Most applications choose HTTP monitoring, where the ID of the endpoint is mapped
 | 
				
			||||||
 | 
					to a URL. For example, by default, the `health` endpoint will be mapped to `/health`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The following endpoints are available:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[cols="2,5,1"]
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					| ID | Description | Sensitive
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`autoconfig`
 | 
				
			||||||
 | 
					|Displays an auto-configuration report showing all auto-configuration candidates and the
 | 
				
			||||||
 | 
					 reason why they ``were'' or ``were not'' applied.
 | 
				
			||||||
 | 
					|true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`beans`
 | 
				
			||||||
 | 
					|Displays a complete list of all the Spring Beans in your application.
 | 
				
			||||||
 | 
					|true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`configprops`
 | 
				
			||||||
 | 
					|Displays a collated list of all `@ConfigurationProperties`.
 | 
				
			||||||
 | 
					|true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`dump`
 | 
				
			||||||
 | 
					|Performs a thread dump.
 | 
				
			||||||
 | 
					|true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`env`
 | 
				
			||||||
 | 
					|Exposes properties from Spring's `ConfigurableEnvironment`.
 | 
				
			||||||
 | 
					|true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`health`
 | 
				
			||||||
 | 
					|Shows application health information (defaulting to a simple ``OK'' message).
 | 
				
			||||||
 | 
					|false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`info`
 | 
				
			||||||
 | 
					|Displays arbitrary application info.
 | 
				
			||||||
 | 
					|false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`metrics`
 | 
				
			||||||
 | 
					|Shows ``metrics'' information for the current application.
 | 
				
			||||||
 | 
					|true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`mappings`
 | 
				
			||||||
 | 
					|Displays a collated list of all `@RequestMapping` paths.
 | 
				
			||||||
 | 
					|true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`shutdown`
 | 
				
			||||||
 | 
					|Allows the application to be gracefully shutdown (not enabled by default).
 | 
				
			||||||
 | 
					|true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`trace`
 | 
				
			||||||
 | 
					|Displays trace information (by default the last few HTTP requests).
 | 
				
			||||||
 | 
					|true
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: Depending on how an endpoint is exposed, the `sensitive` parameter may be used as
 | 
				
			||||||
 | 
					a security hint. For example, sensitive endpoints will require a username/password when
 | 
				
			||||||
 | 
					they are accessed over HTTP (or simply disabled if web security is not enabled).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-customizing-endpoints]]
 | 
				
			||||||
 | 
					=== Customizing endpoints
 | 
				
			||||||
 | 
					Endpoints can be customized using Spring properties. You can change if an endpoint is
 | 
				
			||||||
 | 
					`enabled`, if it is considered `sensitive` and even its `id`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For example, here is an `application.properties` that changes the sensitivity and id
 | 
				
			||||||
 | 
					of the `beans` endpoint and also enables `shutdown`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						endpoints.beans.id=springbeans
 | 
				
			||||||
 | 
						endpoints.beans.sensitive=false
 | 
				
			||||||
 | 
						endpoints.shutdown.enabled=true
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: The prefix "`endpoints` + `.` + `name`" is used to uniquely identify the endpoint
 | 
				
			||||||
 | 
					that is being configured.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-health]]
 | 
				
			||||||
 | 
					=== Custom health information
 | 
				
			||||||
 | 
					The default information exposed by the `health` endpoint is a simple ``OK'' message. It
 | 
				
			||||||
 | 
					is often useful to perform some additional health checks, for example you might check
 | 
				
			||||||
 | 
					that a database connection works, or that a remote REST endpoint is functioning.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To provide custom health information you can register a Spring bean that implements the
 | 
				
			||||||
 | 
					{sc-spring-boot-actuator}/health/HealthIndicator.{sc-ext}[`HealthIndicator`] interface.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,java,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						import org.springframework.boot.actuate.health.HealthIndicator;
 | 
				
			||||||
 | 
						import org.springframework.stereotype.Component;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Component
 | 
				
			||||||
 | 
						public class MyHealth implements HealthIndicator<String> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@Override
 | 
				
			||||||
 | 
							public String health() {
 | 
				
			||||||
 | 
								// perform some specific health check
 | 
				
			||||||
 | 
								return ...
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Spring Boot also provides a
 | 
				
			||||||
 | 
					{sc-spring-boot-actuator}/health/SimpleHealthIndicator/{sc-ext}[`SimpleHealthIndicator`]
 | 
				
			||||||
 | 
					implementation that attempts a simple database test.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-application-info]]
 | 
				
			||||||
 | 
					=== Custom application info information
 | 
				
			||||||
 | 
					You can customize the data exposed by the `info` endpoint by settings `info.*` Spring
 | 
				
			||||||
 | 
					properties. All `Environment` properties under the info key will be automatically
 | 
				
			||||||
 | 
					exposed. For example, you could add the following to your `application.properties`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						info.app.name: MyService
 | 
				
			||||||
 | 
						info.app.description: My awesome service
 | 
				
			||||||
 | 
						info.app.version: 1.0.0
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you are using Maven, you can automatically expand info properties from the Maven
 | 
				
			||||||
 | 
					project using resource filtering. In your `pom.xml` you have (inside the `<build/>`
 | 
				
			||||||
 | 
					element):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					    <resources>
 | 
				
			||||||
 | 
					        <resource>
 | 
				
			||||||
 | 
					            <directory>src/main/resources</directory>
 | 
				
			||||||
 | 
					            <filtering>true</filtering>
 | 
				
			||||||
 | 
					        </resource>
 | 
				
			||||||
 | 
					    </resources>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can then refer to your Maven ``project properties'' via placeholders, e.g.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						project.artifactId: myproject
 | 
				
			||||||
 | 
						project.name: Demo
 | 
				
			||||||
 | 
						project.version: X.X.X.X
 | 
				
			||||||
 | 
						project.description: Demo project for info endpoint
 | 
				
			||||||
 | 
						info.build.artifact: ${project.artifactId}
 | 
				
			||||||
 | 
						info.build.name: ${project.name}
 | 
				
			||||||
 | 
						info.build.description: ${project.description}
 | 
				
			||||||
 | 
						info.build.version: ${project.version}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: In the above example we used `project.*` to set some values to be used as
 | 
				
			||||||
 | 
					fallbacks if the Maven resource filtering has not been switched on for some reason.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-git-commit-information]]
 | 
				
			||||||
 | 
					==== Git commit information
 | 
				
			||||||
 | 
					Another useful feature of the `info` endpoint is its ability to publish information
 | 
				
			||||||
 | 
					about the state of your `git` source code repository when the project was built. If a
 | 
				
			||||||
 | 
					`git.properties` file is contained in your jar the `git.branch` and `git.commit`
 | 
				
			||||||
 | 
					properties will be loaded.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For Maven users the `spring-boot-starter-parent` POM includes a pre-configured plugin to
 | 
				
			||||||
 | 
					generate a `git.properties` file. Simply add the following declaration to your POM:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<build>
 | 
				
			||||||
 | 
							<plugins>
 | 
				
			||||||
 | 
								<plugin>
 | 
				
			||||||
 | 
									<groupId>pl.project13.maven</groupId>
 | 
				
			||||||
 | 
									<artifactId>git-commit-id-plugin</artifactId>
 | 
				
			||||||
 | 
								</plugin>
 | 
				
			||||||
 | 
							</plugins>
 | 
				
			||||||
 | 
						</build>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A similar https://github.com/ajoberstar/gradle-git[`gradle-git`] plugin is also available
 | 
				
			||||||
 | 
					for Gradle users, although a little more work is required to generate the properties file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-monitoring]]
 | 
				
			||||||
 | 
					== Monitoring and management over HTTP
 | 
				
			||||||
 | 
					If you are developing a Spring MVC application, Spring Boot Actuator will auto-configure
 | 
				
			||||||
 | 
					all non-sensitive endpoints to be exposed over HTTP. The default convention it to use the
 | 
				
			||||||
 | 
					`id` of the endpoint as the URL path. For example, `health` is exposed as `/health`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-sensitive-endpoints]]
 | 
				
			||||||
 | 
					=== Exposing sensitive endpoints
 | 
				
			||||||
 | 
					If you use ``Spring Security'' sensitive endpoints will also be exposed over HTTP. By
 | 
				
			||||||
 | 
					default ``basic'' authentication will be used with the username `user` and a generated
 | 
				
			||||||
 | 
					password.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: Generated passwords are logged as the application starts. Search for ``Using default
 | 
				
			||||||
 | 
					password for application endpoints''.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can use Spring properties to change the username and passsword and to change the
 | 
				
			||||||
 | 
					security role required to access the endpoints. For example, you might set the following
 | 
				
			||||||
 | 
					in your `application.properties`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						security.user.name=admin
 | 
				
			||||||
 | 
						security.user.password=secret
 | 
				
			||||||
 | 
						management.security.role=SUPERUSER
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-customizing-management-server-context-path]]
 | 
				
			||||||
 | 
					=== Customizing the management server context path
 | 
				
			||||||
 | 
					Sometimes it is useful to group all management endpoints under a single path. For example,
 | 
				
			||||||
 | 
					your application might already use `/info` for another purpose. You can use the
 | 
				
			||||||
 | 
					`management.contextPath` property to set a prefix for your manangement endpoint:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						management.contextpath=/manage
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The `application.properties` example above will change the endpoint from `/{id}` to
 | 
				
			||||||
 | 
					`/manage/{id}` (e.g. `/manage/info`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-customizing-management-server-port]]
 | 
				
			||||||
 | 
					=== Customizing the management server port
 | 
				
			||||||
 | 
					Exposing management endpoints using the default HTTP port is a sensible choice for cloud
 | 
				
			||||||
 | 
					based deployments. If, however, your application runs inside your own data center you
 | 
				
			||||||
 | 
					may prefer to expose endpoints using a different HTTP port.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The `management.port` property can be used to change the HTTP port. Since your management
 | 
				
			||||||
 | 
					port is often protected by a firewall, and not exposed to the public, you might also
 | 
				
			||||||
 | 
					want to disable management security:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						management.port=8081
 | 
				
			||||||
 | 
						management.security.enabled=false
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-customizing-management-server-address]]
 | 
				
			||||||
 | 
					=== Customizing the management server address
 | 
				
			||||||
 | 
					You can customize the address that the management endpoints are available on by
 | 
				
			||||||
 | 
					setting the `management.security.address` property. This can be useful if you want to
 | 
				
			||||||
 | 
					listen only on an internal or ops-facing network, or to only listen for connections from
 | 
				
			||||||
 | 
					`localhost`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: You can only listen on a different address if the port is different to the
 | 
				
			||||||
 | 
					main server port.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Here is an example `application.properties` that will not allow remote management
 | 
				
			||||||
 | 
					connections:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						management.port=8081
 | 
				
			||||||
 | 
						management.address=127.0.0.1
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-disabling-http-endpoints]]
 | 
				
			||||||
 | 
					=== Disabling HTTP endpoints
 | 
				
			||||||
 | 
					If you don't want to expose endpoints over HTTP you can set the management port to `-1`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						management.port=-1
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-jmx]]
 | 
				
			||||||
 | 
					== Monitoring and management over JMX
 | 
				
			||||||
 | 
					Java Management Extensions (JMX) provide a standard mechanism to monitor and manage
 | 
				
			||||||
 | 
					applications. By default Spring Boot will expose management endpoints as JMX MBeans
 | 
				
			||||||
 | 
					under the `org.springframework.boot` domain.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-custom-mbean-names]]
 | 
				
			||||||
 | 
					=== Customizing MBean names
 | 
				
			||||||
 | 
					The name of the MBean is usually generated from the `id` of the endpoint. For example
 | 
				
			||||||
 | 
					the `health` endpoint is exposed as `org.springframework.boot/Endpoint/HealthEndpoint`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If your application contains more than one Spring `ApplicationContext` you may find that
 | 
				
			||||||
 | 
					names clash. To solve this problem you can set the `endpoints.jmx.uniqueNames` property
 | 
				
			||||||
 | 
					to `true` so that MBean names are always unique.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can also customize the JMX domain under which endpoints are exposed. Here is an
 | 
				
			||||||
 | 
					example `application.properties`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						endpoints.jmx.domain=myapp
 | 
				
			||||||
 | 
						endpoints.jmx.uniqueNames=true
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-disable-jmx-endpoints]]
 | 
				
			||||||
 | 
					=== Disabling JMX endpoints
 | 
				
			||||||
 | 
					If you don't want to expose endpoints over JMX you can set the `spring.jmx.enabled`
 | 
				
			||||||
 | 
					property to `false`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						spring.jmx.enabled=false
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-jolokia]]
 | 
				
			||||||
 | 
					=== Using Jolokia for JMX over HTTP
 | 
				
			||||||
 | 
					Jolokia is a JMX-HTTP bridge giving an alternative method of accessing JMX beans. To
 | 
				
			||||||
 | 
					use Jolokia, simply include a dependency to `org.jolokia:jolokia-core`. For example,
 | 
				
			||||||
 | 
					using Maven you you add the following:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<dependency>
 | 
				
			||||||
 | 
							<groupId>org.jolokia</groupId>
 | 
				
			||||||
 | 
							<artifactId>jolokia-core</artifactId>
 | 
				
			||||||
 | 
					 	</dependency>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Jolokia can then be accessed using `/jolokia` on your management HTTP server.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-customizing-jolokia]]
 | 
				
			||||||
 | 
					==== Customizing Jolokia
 | 
				
			||||||
 | 
					Jolokia has a number of settings that you would traditionally configure using servlet
 | 
				
			||||||
 | 
					parameters. With Spring Boot you can use your `application.properties`, simply prefix the
 | 
				
			||||||
 | 
					parameter with `jolokia.config.`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						jolokia.config.debug=true
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-disabling-jolokia]]
 | 
				
			||||||
 | 
					==== Disabling Jolokia
 | 
				
			||||||
 | 
					If you are using Jolokia but you don't want Spring Boot to configure it, simply set the
 | 
				
			||||||
 | 
					`endpoints.jolokia.enabled` property to `false`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						jolokia.config.enabled=false
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-remote-shell]]
 | 
				
			||||||
 | 
					== Monitoring and management using a remote shell
 | 
				
			||||||
 | 
					Spring Boot supports an integrated Java shell called ``CRaSH''. You can use CRaSH to
 | 
				
			||||||
 | 
					`ssh` or `telnet` into your running application. To enable remote shell support add a
 | 
				
			||||||
 | 
					dependency to `spring-boot-starter-shell-remote`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<dependency>
 | 
				
			||||||
 | 
							<groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
							<artifactId>spring-boot-starter-shell-remote</artifactId>
 | 
				
			||||||
 | 
					 	</dependency>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: If you want to also enable telnet access your will additionally need a dependency
 | 
				
			||||||
 | 
					on `org.crsh:crsh.shell.telnet`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-connecting-to-the-remote-shell]]
 | 
				
			||||||
 | 
					=== Connecting to the remote shell
 | 
				
			||||||
 | 
					By default the remote shell will listen for connections on port `2000`. The default user
 | 
				
			||||||
 | 
					is `user` and the default password will be randomly generated and displayed in the log
 | 
				
			||||||
 | 
					output, you should see a message like this:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						Using default password for shell access: ec03e16c-4cf4-49ee-b745-7c8255c1dd7e
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Linux and OSX users can use `ssh` to connect to the remote shell, Windows users can
 | 
				
			||||||
 | 
					download and install http://www.putty.org/[PuTTY].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ ssh -p 2000 user@localhost
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user@localhost's password:
 | 
				
			||||||
 | 
						  .   ____          _            __ _ _
 | 
				
			||||||
 | 
						 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
 | 
				
			||||||
 | 
						( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 | 
				
			||||||
 | 
						 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
 | 
				
			||||||
 | 
						  '  |____| .__|_| |_|_| |_\__, | / / / /
 | 
				
			||||||
 | 
						 =========|_|==============|___/=/_/_/_/
 | 
				
			||||||
 | 
						 :: Spring Boot ::  (v{spring-boot-version}) on myhost
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Type `help` for a list of commands. Spring boot provides `metrics`, `beans` and
 | 
				
			||||||
 | 
					`autoconfig` commands. You can also use the `jmx` command to query endpoint data:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						jmx find -p org.springframework.boot:type=Endpoint,name=healthEndpoint | jmx get Data
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-remote-shell-credentials]]
 | 
				
			||||||
 | 
					==== Remote shell credentials
 | 
				
			||||||
 | 
					You can use the `shell.auth.simple.username` and `shell.auth.simple.password` properties
 | 
				
			||||||
 | 
					to configure custom connection credentials. It is also possible to use a
 | 
				
			||||||
 | 
					``Spring Security'' `AuthenticationManager` to handle login duties. See the
 | 
				
			||||||
 | 
					{dc-spring-boot-actuator}/autoconfigure/CrshAutoConfiguration.{dc-ext}[`CrshAutoConfiguration`]
 | 
				
			||||||
 | 
					and {dc-spring-boot-actuator}/autoconfigure/ShellProperties.{dc-ext}[`ShellProperties`]
 | 
				
			||||||
 | 
					Javadoc for full details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-extending-the-remote-shell]]
 | 
				
			||||||
 | 
					=== Extending the remote shell
 | 
				
			||||||
 | 
					The remote shell can be extended in a number of interesting ways.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-remote-commands]]
 | 
				
			||||||
 | 
					==== Remote shell commands
 | 
				
			||||||
 | 
					You can write additional shell commands using Groovy or Java (see the CRaSH documentation
 | 
				
			||||||
 | 
					for details). By default Spring Boot will search for commands in the following locations:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* `classpath*:/commands/**`
 | 
				
			||||||
 | 
					* `classpath*:/crash/commands/**`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: You can change the search path by settings a `shell.commandpathpatterns` property.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Here is a simple ``hello world'' command that could be loaded from
 | 
				
			||||||
 | 
					`src/main/resources/commands/Hello.groovy`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						package commands
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						import org.springframework.boot.actuate.endpoint.BeansEndpoint
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						class hello {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@Usage("Say Hello")
 | 
				
			||||||
 | 
							@Command
 | 
				
			||||||
 | 
							def main(InvocationContext context) {
 | 
				
			||||||
 | 
								return "Hello"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Spring Boot adds some additional attributes to `InvocationContext` that you can access
 | 
				
			||||||
 | 
					from your command:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[cols="2,3"]
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					| Attribute Name | Description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring.boot.version`
 | 
				
			||||||
 | 
					|The version of Spring Boot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring.version`
 | 
				
			||||||
 | 
					|The version of the core Spring Framework
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring.beanFactory`
 | 
				
			||||||
 | 
					|Access to the Spring `BeanFactory`
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-remote-shell-plugins]]
 | 
				
			||||||
 | 
					==== Remote shell plugins
 | 
				
			||||||
 | 
					In addition to new commands, it is also possible to extend other CRaSH shell features.
 | 
				
			||||||
 | 
					All Spring Beans that extends `org.crsh.plugin.CRaSHPlugin` will be automatically
 | 
				
			||||||
 | 
					registered with the shell.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For more information please refer to the http://www.crashub.org/[CRaSH reference
 | 
				
			||||||
 | 
					documentation].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-metrics]]
 | 
				
			||||||
 | 
					== Metrics
 | 
				
			||||||
 | 
					Spring Boot Actuator includes a metrics service with ``gauge'' and ``counter'' support.
 | 
				
			||||||
 | 
					A ``gauge'' records a single value; and a ``counter'' records a delta (an increment or
 | 
				
			||||||
 | 
					decrement). Metrics for all HTTP requests are automatically recorded, so if you hit the
 | 
				
			||||||
 | 
					`metrics` endpoint should should see a response similar to this:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,json,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"counter.status.200.root": 20,
 | 
				
			||||||
 | 
							"counter.status.200.metrics": 3,
 | 
				
			||||||
 | 
							"counter.status.401.root": 4,
 | 
				
			||||||
 | 
							"gauge.response.root": 2,
 | 
				
			||||||
 | 
							"gauge.response.metrics": 3,
 | 
				
			||||||
 | 
							"mem": 466944,
 | 
				
			||||||
 | 
							"mem.free": 410117,
 | 
				
			||||||
 | 
							"processors": 8
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Here we can see basic `memory` and `processor` information along with some HTTP metrics.
 | 
				
			||||||
 | 
					In this instance the `root` (``/'') and `/metrics` URLs have returned `HTTP 200` responses
 | 
				
			||||||
 | 
					`20` and `3` times respectively. It also appears that the `root` URL returned `HTTP 401`
 | 
				
			||||||
 | 
					(unauthorized) `4` times.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The `gauge` shows the last response time for a request. So the last request to `root` took
 | 
				
			||||||
 | 
					`2ms` to respond and the last to `/metrics` took `3ms`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: In this example we are actually accessing the endpoint over HTTP using the
 | 
				
			||||||
 | 
					`/metrics` URL, this explains why `metrics` appears in the response.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-recording-metrics]]
 | 
				
			||||||
 | 
					=== Recording your own metrics
 | 
				
			||||||
 | 
					To record your own metrics inject a
 | 
				
			||||||
 | 
					{sc-spring-boot-actuator}/metrics/CounterService.{sc-ext}[`CounterService`] and/or
 | 
				
			||||||
 | 
					{sc-spring-boot-actuator}/metrics/GaugeService.{sc-ext}[`GaugeService`] into
 | 
				
			||||||
 | 
					your bean. The `CounterService` exposes `increment`, `decrement` and `reset` methods; the
 | 
				
			||||||
 | 
					`GaugeService` provides a `submit` method.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Here is a simple example that counts the number of times that a method is invoked:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,java,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
 | 
						import org.springframework.boot.actuate.metrics.CounterService;
 | 
				
			||||||
 | 
						import org.springframework.stereotype.Service;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Service
 | 
				
			||||||
 | 
						public class MyService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private final CounterService counterService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@Autowired
 | 
				
			||||||
 | 
							public MyService(CounterService counterService) {
 | 
				
			||||||
 | 
								this.counterService = counterService;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public void exampleMethod() {
 | 
				
			||||||
 | 
								this.counterService.increment("services.system.myservice.invoked");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: You can use any string as a metric name but you following guidelines of your chosen
 | 
				
			||||||
 | 
					store/graphing technology. Some good guidelines for Graphite are available on
 | 
				
			||||||
 | 
					http://matt.aimonetti.net/posts/2013/06/26/practical-guide-to-graphite-monitoring/[Matt Aimonetti's Blog].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-metric-repositories]]
 | 
				
			||||||
 | 
					=== Metric repositories
 | 
				
			||||||
 | 
					Metric service implementations are usually bound to a
 | 
				
			||||||
 | 
					{sc-spring-boot-actuator}/metrics/repository/MetricRepository.{sc-ext}[`MetricRepository`].
 | 
				
			||||||
 | 
					A `MetricRepository` is responsible for storing and retrieving metric information. Spring
 | 
				
			||||||
 | 
					Boot provides an `InMemoryMessageRespository` and a `RedisMetricRepository` out of the
 | 
				
			||||||
 | 
					box (the in-memory repository is the default) but you can also write your own. The
 | 
				
			||||||
 | 
					`MetricRepository` interface is actually composed of higher level `MetricReader` and
 | 
				
			||||||
 | 
					`MetricWriter` interfaces. For full details refer to the
 | 
				
			||||||
 | 
					{dc-spring-boot-actuator}/metrics/repository/MetricRepository.{dc-ext}[Javadoc].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-code-hale-metrics]]
 | 
				
			||||||
 | 
					=== Coda Hale Metrics
 | 
				
			||||||
 | 
					User of the http://metrics.codahale.com/[Coda Hale ``Metrics'' library] will automatically
 | 
				
			||||||
 | 
					find that Spring Boot metrics are published to `com.codahale.metrics.MetricRegistry`. A
 | 
				
			||||||
 | 
					default `com.codahale.metrics.MetricRegistry` Spring bean will be created when you declare
 | 
				
			||||||
 | 
					a dependency to the `com.codahale.metrics:metrics-core` library; you can also register you
 | 
				
			||||||
 | 
					own `@Bean` instance if you need customizations.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Users can create Coda Hale metrics by prefixing their metric names with the appropriate
 | 
				
			||||||
 | 
					type (e.g. `histogram.*`, `meter.*`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-metrics-message-channel-integration]]
 | 
				
			||||||
 | 
					=== Message channel integration
 | 
				
			||||||
 | 
					If the ``Spring Messaging'' jar is on your classpath a `MessageChannel` called
 | 
				
			||||||
 | 
					`metricsChannel` is automatically created (unless one already exists). All metric update
 | 
				
			||||||
 | 
					events are additionally published as ``messages'' on that channel. Additional analysis or
 | 
				
			||||||
 | 
					actions can be taken by clients subscribing to that channel.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-auditing]]
 | 
				
			||||||
 | 
					== Auditing
 | 
				
			||||||
 | 
					Spring Boot Actuator has a flexible audit framework that will publish events once Spring
 | 
				
			||||||
 | 
					Security is in play (``authentication success'', ``failure'' and ``access denied''
 | 
				
			||||||
 | 
					exceptions by default). This can be very useful for reporting, and also to implement a
 | 
				
			||||||
 | 
					lock-out policy based on authentication failures.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can also choose to use the audit services for your own business events. To do that
 | 
				
			||||||
 | 
					you can either inject the existing `AuditEventRepository` into your own components and
 | 
				
			||||||
 | 
					use that directly, or you can simply publish `AuditApplicationEvent` via the Spring
 | 
				
			||||||
 | 
					`ApplicationEventPublisher` (using `ApplicationEventPublisherAware`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-tracing]]
 | 
				
			||||||
 | 
					== Tracing
 | 
				
			||||||
 | 
					Tracing is automatically enable for all HTTP requests. You can view the `trace` endpoint
 | 
				
			||||||
 | 
					and obtain basic information about the last few requests:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,json,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						[{
 | 
				
			||||||
 | 
							"timestamp": 1394343677415,
 | 
				
			||||||
 | 
							"info": {
 | 
				
			||||||
 | 
								"method": "GET",
 | 
				
			||||||
 | 
								"path": "/trace",
 | 
				
			||||||
 | 
								"headers": {
 | 
				
			||||||
 | 
									"request": {
 | 
				
			||||||
 | 
										"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
 | 
				
			||||||
 | 
										"Connection": "keep-alive",
 | 
				
			||||||
 | 
										"Accept-Encoding": "gzip, deflate",
 | 
				
			||||||
 | 
										"User-Agent": "Mozilla/5.0 Gecko/Firefox",
 | 
				
			||||||
 | 
										"Accept-Language": "en-US,en;q=0.5",
 | 
				
			||||||
 | 
										"Cookie": "_ga=GA1.1.827067509.1390890128; ..."
 | 
				
			||||||
 | 
										"Authorization": "Basic ...",
 | 
				
			||||||
 | 
										"Host": "localhost:8080"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									"response": {
 | 
				
			||||||
 | 
										"Strict-Transport-Security": "max-age=31536000 ; includeSubDomains",
 | 
				
			||||||
 | 
										"X-Application-Context": "application:8080",
 | 
				
			||||||
 | 
										"Content-Type": "application/json;charset=UTF-8",
 | 
				
			||||||
 | 
										"status": "200"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},{
 | 
				
			||||||
 | 
							"timestamp": 1394343684465,
 | 
				
			||||||
 | 
							...
 | 
				
			||||||
 | 
					    }]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-custom-tracing]]
 | 
				
			||||||
 | 
					=== Custom tracing
 | 
				
			||||||
 | 
					If you need to trace additional events you can inject a
 | 
				
			||||||
 | 
					{sc-spring-boot-actuator}/trace/TraceRepository.{sc-ext}[`TraceRepository`] into your
 | 
				
			||||||
 | 
					Spring Beans. The `add` method accepts a single `Map` structure that will be converted to
 | 
				
			||||||
 | 
					JSON and logged.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					By default an `InMemoryTraceRepository` will be used that stores the last 100 events. You
 | 
				
			||||||
 | 
					can define your own instance of the `InMemoryTraceRepository` bean if you need to expand
 | 
				
			||||||
 | 
					the capacity. You can also create your own alternative `TraceRepository` implementation
 | 
				
			||||||
 | 
					if needed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-error-handling]]
 | 
				
			||||||
 | 
					== Error Handling
 | 
				
			||||||
 | 
					Spring Boot Actuator provides an `/error` mapping by default that handles all errors in a
 | 
				
			||||||
 | 
					sensible way.  If you want more specific error pages for some conditions, the embedded
 | 
				
			||||||
 | 
					servlet containers support a uniform Java DSL for customizing the error handling.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[production-ready-whats-next]]
 | 
				
			||||||
 | 
					== What to read next
 | 
				
			||||||
 | 
					If you want to explore some of the concepts discussed in this chapter, you can take a
 | 
				
			||||||
 | 
					look at the actuator {github-code}/spring-boot-samples[sample applications]. You also
 | 
				
			||||||
 | 
					might want to read about graphing tools such as http://graphite.wikidot.com/[Graphite].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Otherwise, you can continue on, to read about <<cloud-deployment.adoc#cloud-deployment,
 | 
				
			||||||
 | 
					``cloud deployment options''>> or jump ahead
 | 
				
			||||||
 | 
					for some in depth information about Spring Boot's
 | 
				
			||||||
 | 
					<<build-tool-plugins.adoc#build-tool-plugins, ``build tool plugins''>>.
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,323 @@
 | 
				
			||||||
 | 
					[[cli]]
 | 
				
			||||||
 | 
					= Spring Boot CLI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[partintro]
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					The Spring Boot CLI is a command line tool that can be used if you want to quickly
 | 
				
			||||||
 | 
					prototype with Spring. It allows you to run Groovy scripts, which means that you have a
 | 
				
			||||||
 | 
					familiar Java-like syntax, without so much boilerplate code.
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cli-installation]]
 | 
				
			||||||
 | 
					== Installing the CLI
 | 
				
			||||||
 | 
					The Spring Boot CLI can be installed manually; using GVM (the Groovy Environment
 | 
				
			||||||
 | 
					Manually) or using Homebrew if you are an OSX user. See
 | 
				
			||||||
 | 
					``<<getting-started.adoc#getting-started-installing-the-cli>>''
 | 
				
			||||||
 | 
					in the ``Getting started'' section for comprehensive installation instructions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cli-using-the-cli]]
 | 
				
			||||||
 | 
					== Using the CLI
 | 
				
			||||||
 | 
					Once you have installed the CLI you can run it by typing `spring`. If you run `spring`
 | 
				
			||||||
 | 
					without any arguments, a simple help screen is displayed:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ spring
 | 
				
			||||||
 | 
						usage: spring [--help] [--version]
 | 
				
			||||||
 | 
						       <command> [<args>]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Available commands are:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						  run [options] <files> [--] [args]
 | 
				
			||||||
 | 
						    Run a spring groovy script
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						  _... more command help is shown here_
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can use `help` to get more details about any of the supported commands. For example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ spring help run
 | 
				
			||||||
 | 
						spring run - Run a spring groovy script
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						usage: spring run [options] <files> [--] [args]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Option                     Description
 | 
				
			||||||
 | 
						------                     -----------
 | 
				
			||||||
 | 
						--autoconfigure [Boolean]  Add autoconfigure compiler
 | 
				
			||||||
 | 
						                             transformations (default: true)
 | 
				
			||||||
 | 
						--classpath, -cp           Additional classpath entries
 | 
				
			||||||
 | 
						-e, --edit                 Open the file with the default system
 | 
				
			||||||
 | 
						                             editor
 | 
				
			||||||
 | 
						--no-guess-dependencies    Do not attempt to guess dependencies
 | 
				
			||||||
 | 
						--no-guess-imports         Do not attempt to guess imports
 | 
				
			||||||
 | 
						-q, --quiet                Quiet logging
 | 
				
			||||||
 | 
						-v, --verbose              Verbose logging of dependency
 | 
				
			||||||
 | 
						                             resolution
 | 
				
			||||||
 | 
						--watch                    Watch the specified file for changes
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The `version` command provides a quick way to check which version of Spring Boot you are
 | 
				
			||||||
 | 
					using.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ spring version
 | 
				
			||||||
 | 
						Spring CLI v{spring-boot-version}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cli-run]]
 | 
				
			||||||
 | 
					=== Running applications using the CLI
 | 
				
			||||||
 | 
					You can compile and run Groovy source code using the `run` command. The Spring Boot CLI
 | 
				
			||||||
 | 
					is completely self contained so you don't need any external Groovy installation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Here is an example ``hello world'' web application written in Groovy:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						@Controller
 | 
				
			||||||
 | 
						class WebApplication {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@RequestMapping("/")
 | 
				
			||||||
 | 
							@ResponseBody
 | 
				
			||||||
 | 
							String home() {
 | 
				
			||||||
 | 
								return "Hello World!"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cli-deduced-grab-annotations]]
 | 
				
			||||||
 | 
					==== Deduced ``grab'' dependencies
 | 
				
			||||||
 | 
					Standard Groovy includes a `@Grab` annotation which allows you to declare dependencies
 | 
				
			||||||
 | 
					on a third-party libraries. This useful technique allows Groovy to download jars in the
 | 
				
			||||||
 | 
					same way as Maven or Gradle would; but without requiring you to use a build tool.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Spring Boot extends this technique further, and will attempt to deduce which libraries
 | 
				
			||||||
 | 
					to ``grab'' based on your code. For example, since the `WebApplication` code above uses
 | 
				
			||||||
 | 
					`@Controller` annotations, ``Tomcat'' and ``Spring MVC'' will be grabbed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The following items are used as ``grab hints'':
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					| Items | Grabs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`JdbcTemplate`, `NamedParameterJdbcTemplate`, `DataSource`
 | 
				
			||||||
 | 
					|JDBC Application.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`@EnableJmsMessaging`
 | 
				
			||||||
 | 
					|JMS Application.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`@Test`
 | 
				
			||||||
 | 
					|JUnit.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`@EnableRabbitMessaging`
 | 
				
			||||||
 | 
					|RabbitMQ.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`@EnableReactor`
 | 
				
			||||||
 | 
					|Project Reactor.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|extends `Specification`
 | 
				
			||||||
 | 
					|Spock test.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`@EnableBatchProcessing`
 | 
				
			||||||
 | 
					|Spring Batch.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`@MessageEndpoint` `@EnableIntegrationPatterns`
 | 
				
			||||||
 | 
					|Spring Integration.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`@EnableDeviceResolver`
 | 
				
			||||||
 | 
					|Spring Mobile.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`@Controller` `@RestController` `@EnableWebMvc`
 | 
				
			||||||
 | 
					|Spring MVC + Embedded Tomcat.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`@EnableWebSecurity`
 | 
				
			||||||
 | 
					|Spring Security.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`@EnableTransactionManagement`
 | 
				
			||||||
 | 
					|Spring Transaction Management.
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: See subclasses of
 | 
				
			||||||
 | 
					{sc-spring-boot-cli}/compiler/CompilerAutoConfiguration.{sc-ext}[`CompilerAutoConfiguration`]
 | 
				
			||||||
 | 
					in the Spring Boot CLI source code to understand exactly how customizations are applied.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cli-default-import-statements]]
 | 
				
			||||||
 | 
					==== Default import statements
 | 
				
			||||||
 | 
					To help reduce the size of your Groovy code, several `import` statements are
 | 
				
			||||||
 | 
					automatically included. Notice how the example above refers to `@Component`,
 | 
				
			||||||
 | 
					`@Controller`, `@RequestMapping` and `@ResponseBody` without needing to use
 | 
				
			||||||
 | 
					fully-qualified names or `import` statements.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: Many Spring annotations will work without using `import` statements. Try running
 | 
				
			||||||
 | 
					your application to see what fails before adding imports.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cli-automatic-main-method]]
 | 
				
			||||||
 | 
					==== Automatic main method
 | 
				
			||||||
 | 
					Unlike the equilvement Java application, you do not need to include a
 | 
				
			||||||
 | 
					`public static void main(String[] args)` method with your `Groovy` scripts. A
 | 
				
			||||||
 | 
					`SpringApplication` is automatically created, with your compiled code acting as the
 | 
				
			||||||
 | 
					`source`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cli-testing]]
 | 
				
			||||||
 | 
					=== Testing your code
 | 
				
			||||||
 | 
					The `test` command allows you to compile and run tests for your application. Typical
 | 
				
			||||||
 | 
					usage looks like this:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ spring test app.groovy tests.groovy
 | 
				
			||||||
 | 
						Total: 1, Success: 1, : Failures: 0
 | 
				
			||||||
 | 
						Passed? true
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In this example, `tests.groovy` contains JUnit `@Test` methods or Spock `Specification`
 | 
				
			||||||
 | 
					classes. All the common framework annotations and static methods should be available to
 | 
				
			||||||
 | 
					you without having to `import` them.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Here is the `test.groovy` file that we used above:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						class ApplicationTests {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@Test
 | 
				
			||||||
 | 
							void homeSaysHello() {
 | 
				
			||||||
 | 
								assertEquals("Hello World", new WebApplication().home())
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: If you have more than one test source files, you might prefer to organize them
 | 
				
			||||||
 | 
					into a `test` directory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cli-multiple-source-files]]
 | 
				
			||||||
 | 
					=== Applications with multiple source files
 | 
				
			||||||
 | 
					You can use ``shell globbing'' with all commands that accept file input. This allows you
 | 
				
			||||||
 | 
					to easily use multiple files from a single directory, e.g.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ spring run *.groovy
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This technique can also be useful if you want to segregate your ``test'' or ``spec'' code
 | 
				
			||||||
 | 
					from the main application code:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ spring test app/*.groovy test/*.groovy
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cli-jar]]
 | 
				
			||||||
 | 
					=== Packaging your application
 | 
				
			||||||
 | 
					You can use the `jar` command to package your application into a self-contained
 | 
				
			||||||
 | 
					executable jar file. For example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ spring jar my-app.jar *.groovy
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The resulting jar will contain the classes produced by compiling the application and all
 | 
				
			||||||
 | 
					of the application's dependencies so that it can then be run using `java -jar`. The jar
 | 
				
			||||||
 | 
					file will also contain entries from the application's classpath.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the output of `spring help jar` for more information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cli-shell]]
 | 
				
			||||||
 | 
					=== Using the embedded shell
 | 
				
			||||||
 | 
					Spring Boot includes command-line completion scripts for BASH and zsh shells. If you
 | 
				
			||||||
 | 
					don't use either of these shells (perhaps you are a Windows user) then you can use the
 | 
				
			||||||
 | 
					`shell` command to launch an integrated shell.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ spring shell
 | 
				
			||||||
 | 
						*Spring Boot* (v{spring-boot-version})
 | 
				
			||||||
 | 
						Hit TAB to complete. Type \'help' and hit RETURN for help, and \'exit' to quit.
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					From inside the embedded shell you can run other commands directly:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ version
 | 
				
			||||||
 | 
						Spring CLI v{spring-boot-version}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The embedded shell supports ANSI color output as well as `tab` completion. If you need
 | 
				
			||||||
 | 
					to run a native command you can use the `$` prefix. Hitting `ctrl-c` will exit the
 | 
				
			||||||
 | 
					embedded shell.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cli-groovy-beans-dsl]]
 | 
				
			||||||
 | 
					== Developing application with the Groovy beans DSL
 | 
				
			||||||
 | 
					Spring Framework 4.0 has native support for a `beans{}` ``DSL'' (borrowed from
 | 
				
			||||||
 | 
					http://grails.org/[Grails]),  and you can embed bean definitions in your Groovy
 | 
				
			||||||
 | 
					application scripts using the same format. This is sometimes a good way to include
 | 
				
			||||||
 | 
					external features like middleware declarations. For example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						@Configuration
 | 
				
			||||||
 | 
						class Application implements CommandLineRunner {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@Autowired
 | 
				
			||||||
 | 
							SharedService service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@Override
 | 
				
			||||||
 | 
							void run(String... args) {
 | 
				
			||||||
 | 
								println service.message
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						import my.company.SharedService
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						beans {
 | 
				
			||||||
 | 
							service(SharedService) {
 | 
				
			||||||
 | 
								message "Hello World"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can mix class declarations with `beans{}` in the same file as long as they stay at
 | 
				
			||||||
 | 
					the top level, or you can put the beans DSL in a separate file if you prefer.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[cli-whats-next]]
 | 
				
			||||||
 | 
					== What to read next
 | 
				
			||||||
 | 
					There are some {github-code}/spring-boot-cli/samples[sample groovy
 | 
				
			||||||
 | 
					scripts] available from the GitHub repository that you can use to try out the
 | 
				
			||||||
 | 
					Spring Boot CLI. There is also extensive javadoc throughout the
 | 
				
			||||||
 | 
					{sc-spring-boot-cli}[source code].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you find that you reach the limit of the CLI tool, you will probably want to look
 | 
				
			||||||
 | 
					at converting your application to full Gradle or Maven built ``groovy project''. The
 | 
				
			||||||
 | 
					next section covers Spring Boot's
 | 
				
			||||||
 | 
					``<<build-tool-plugins.adoc#build-tool-plugins, Build tool plugins>>'' that you can
 | 
				
			||||||
 | 
					use with Gradle or Maven.
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,597 @@
 | 
				
			||||||
 | 
					[[using-boot]]
 | 
				
			||||||
 | 
					= Using Spring Boot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[partintro]
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					This section goes into more detail about how you should use Spring Boot. It covers topics
 | 
				
			||||||
 | 
					such as build systems, auto-configuration and run/deployment options. We also cover some
 | 
				
			||||||
 | 
					Spring Boot ``best practices''. Although there is nothing particularly special about
 | 
				
			||||||
 | 
					Spring Boot (it is just another library that you can consume). There are a few
 | 
				
			||||||
 | 
					recommendations that, when followed, will make your development process just a
 | 
				
			||||||
 | 
					little easier.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you're just starting out with Spring Boot, you should probably read the
 | 
				
			||||||
 | 
					``<<getting-started.adoc#getting-started, Getting Started>>'' guide before diving into
 | 
				
			||||||
 | 
					this section.
 | 
				
			||||||
 | 
					--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-build-systems]]
 | 
				
			||||||
 | 
					== Build systems
 | 
				
			||||||
 | 
					It is strongly recommended that you choose a build system that supports _dependency
 | 
				
			||||||
 | 
					management_, and one that can consume artifacts published to the ``Maven Central''
 | 
				
			||||||
 | 
					repository. We would recommend that you choose Maven or Gradle. It is possible to get
 | 
				
			||||||
 | 
					Spring Boot to work with other build systems (Ant for example), but they will not be
 | 
				
			||||||
 | 
					particularly well supported.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-maven]]
 | 
				
			||||||
 | 
					=== Maven
 | 
				
			||||||
 | 
					Maven users can inherit from the `spring-boot-starter-parent` project to obtain sensible
 | 
				
			||||||
 | 
					defaults. The parent project provides the following features:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Java 1.6 as the default compiler level.
 | 
				
			||||||
 | 
					* UTF-8 source encoding.
 | 
				
			||||||
 | 
					* A Dependency Management section, allowing you to omit `<version>` tags for common
 | 
				
			||||||
 | 
					  dependencies.
 | 
				
			||||||
 | 
					* Generally useful test dependencies (http://junit.org/[JUnit],
 | 
				
			||||||
 | 
					  https://code.google.com/p/hamcrest/[Hamcrest],
 | 
				
			||||||
 | 
					  https://code.google.com/p/mockito/[Mockito]).
 | 
				
			||||||
 | 
					* Sensible https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html[resource filtering].
 | 
				
			||||||
 | 
					* Sensible plugin configuration (http://mojo.codehaus.org/exec-maven-plugin/[exec plugin],
 | 
				
			||||||
 | 
					  http://maven.apache.org/surefire/maven-surefire-plugin/[surefire],
 | 
				
			||||||
 | 
					  https://github.com/ktoso/maven-git-commit-id-plugin[Git commit ID],
 | 
				
			||||||
 | 
					  http://maven.apache.org/plugins/maven-shade-plugin/[shade]).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-maven-parent-pom]]
 | 
				
			||||||
 | 
					==== Inheriting the starter parent
 | 
				
			||||||
 | 
					To configure your project to inherit from the `spring-boot-starter-parent` simply set
 | 
				
			||||||
 | 
					the `parent`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<!-- Inherit defaults from Spring Boot -->
 | 
				
			||||||
 | 
						<parent>
 | 
				
			||||||
 | 
							<groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
							<artifactId>spring-boot-starter-parent</artifactId>
 | 
				
			||||||
 | 
							<version>{spring-boot-version}</version>
 | 
				
			||||||
 | 
						</parent>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: You should only need to specify the Spring Boot version number on this dependency.
 | 
				
			||||||
 | 
					if you import additional starters, you can safely omit the version number.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-maven-your-own-parent]]
 | 
				
			||||||
 | 
					==== Using your own parent POM
 | 
				
			||||||
 | 
					If you don't want to use the Spring Boot starter parent, you can use your own and still
 | 
				
			||||||
 | 
					keep the benefit of the dependency management (but not the plugin management) using a
 | 
				
			||||||
 | 
					`scope=import` dependency:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<dependencyManagement>
 | 
				
			||||||
 | 
					 		<dependencies>
 | 
				
			||||||
 | 
								<dependency>
 | 
				
			||||||
 | 
									<!-- Import dependency management from Spring Boot -->
 | 
				
			||||||
 | 
									<groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
									<artifactId>spring-boot-starter-parent</artifactId>
 | 
				
			||||||
 | 
									<version>{spring-boot-version}</version>
 | 
				
			||||||
 | 
							        <scope>import</scope>
 | 
				
			||||||
 | 
								</dependency>
 | 
				
			||||||
 | 
							</dependencies>
 | 
				
			||||||
 | 
						</dependencyManagement>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-maven-java-version]]
 | 
				
			||||||
 | 
					==== Changing the Java version
 | 
				
			||||||
 | 
					The `spring-boot-starter-parent` chooses fairly conservative Java compatibility. If you
 | 
				
			||||||
 | 
					want to follow our recommendation and use a later Java version you can add a
 | 
				
			||||||
 | 
					`java.version` property:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<properties>
 | 
				
			||||||
 | 
							<java.version>1.8</java.version>
 | 
				
			||||||
 | 
						</properties>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-maven-plugin]]
 | 
				
			||||||
 | 
					==== Using the Spring Boot Maven plugin
 | 
				
			||||||
 | 
					Spring Boot includes a <<build-tool-plugins.adoc#build-tool-plugins-maven-plugin, Maven plugin>>
 | 
				
			||||||
 | 
					that can package the project as an executable jar. Add the plugin to your `<plugins>`
 | 
				
			||||||
 | 
					section if you want to use it:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,xml,indent=0,subs="verbatim,quotes,attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						<build>
 | 
				
			||||||
 | 
							<plugins>
 | 
				
			||||||
 | 
								<plugin>
 | 
				
			||||||
 | 
									<groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
									<artifactId>spring-boot-maven-plugin</artifactId>
 | 
				
			||||||
 | 
								</plugin>
 | 
				
			||||||
 | 
							</plugins>
 | 
				
			||||||
 | 
						</build>
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: You only need to add the plugin, there is no need for to configure it unless you
 | 
				
			||||||
 | 
					want to change the settings defined in the parent.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-gradle]]
 | 
				
			||||||
 | 
					=== Gradle
 | 
				
			||||||
 | 
					Gradle users can directly import ``starter POMs'' in their `dependencies` section. Unlike
 | 
				
			||||||
 | 
					Maven, there is no ``super parent'' to import.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0,subs="attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						apply plugin: 'java'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						repositories { mavenCentral() }
 | 
				
			||||||
 | 
						dependencies {
 | 
				
			||||||
 | 
							compile("org.springframework.boot:spring-boot-starter-web:{spring-boot-version}")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The <<build-tool-plugins.adoc#build-tool-plugins-gradle-plugin, `spring-boot-gradle-plugin`>>
 | 
				
			||||||
 | 
					is also available and provides tasks to create executable jars and run projects from
 | 
				
			||||||
 | 
					source. It also adds a `ResolutionStrategy` that enables you to omit the version number
 | 
				
			||||||
 | 
					for ``blessed'' dependencies:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,groovy,indent=0,subs="attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						buildscript {
 | 
				
			||||||
 | 
							repositories { mavenCentral() }
 | 
				
			||||||
 | 
							dependencies {
 | 
				
			||||||
 | 
								classpath("org.springframework.boot:spring-boot-gradle-plugin:{spring-boot-version}")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						apply plugin: 'java'
 | 
				
			||||||
 | 
						apply plugin: 'spring-boot'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						repositories { mavenCentral() }
 | 
				
			||||||
 | 
						dependencies {
 | 
				
			||||||
 | 
							compile("org.springframework.boot:spring-boot-starter-web")
 | 
				
			||||||
 | 
							testCompile("org.springframework.boot:spring-boot-starter-test")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-ant]]
 | 
				
			||||||
 | 
					===  Ant
 | 
				
			||||||
 | 
					It is possible to build a Spring Boot project using Apache Ant, however, no special
 | 
				
			||||||
 | 
					support or plugins are provided. Ant scripts can use the Ivy dependency system to import
 | 
				
			||||||
 | 
					starter POMs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the ``<<howto.adoc#howto-build-an-executable-archive-with-ant>>'' ``How-to'' for more
 | 
				
			||||||
 | 
					complete instructions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-starter-poms]]
 | 
				
			||||||
 | 
					=== Starter POMs
 | 
				
			||||||
 | 
					Starter POMs are a set of convenient dependency descriptors that you can include in your
 | 
				
			||||||
 | 
					application. You get a one-stop-shop for all the Spring and related technology that you
 | 
				
			||||||
 | 
					need, without having to hunt through sample code and copy paste loads of dependency
 | 
				
			||||||
 | 
					descriptors. For example, if you want to get started using Spring and JPA for database
 | 
				
			||||||
 | 
					access, just include the `spring-boot-starter-data-jpa` dependency in your project, and
 | 
				
			||||||
 | 
					you are good to go.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The starters contain a lot of the dependencies that you need to get a project up and
 | 
				
			||||||
 | 
					running quickly and with a consistent, supported set of managed transitive dependencies.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.What's in a name
 | 
				
			||||||
 | 
					****
 | 
				
			||||||
 | 
					All starters follow a similar naming pattern; `spring-boot-starter-*`, where `*` is
 | 
				
			||||||
 | 
					a particular type of application. This naming structure is intended to help when you need
 | 
				
			||||||
 | 
					to find a starter. The Maven integration in many IDEs allow you to search dependencies by
 | 
				
			||||||
 | 
					name. For example, with the appropriate Eclipse or STS plugin installed, you can simply
 | 
				
			||||||
 | 
					hit `ctrl-space` in the POM editor and type ''spring-boot-starter'' for a complete list.
 | 
				
			||||||
 | 
					****
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The following application starters are provided by Spring Boot under the
 | 
				
			||||||
 | 
					`org.springframework.boot` group:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.Spring Boot application starters
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					| Name | Description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter`
 | 
				
			||||||
 | 
					|The core Spring Boot starter, including auto-configuration support, logging and YAML.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-amqp`
 | 
				
			||||||
 | 
					|Support for the ``Advanced Message Queuing Protocol'' via `spring-rabbit`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-aop`
 | 
				
			||||||
 | 
					|Full AOP programming support including `spring-aop` and AspectJ.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-batch`
 | 
				
			||||||
 | 
					|Support for ``Spring Batch'' including HSQLDB database.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-data-jpa`
 | 
				
			||||||
 | 
					|Full support for the ``Java Persistence API'' including `spring-data-jpa`, `spring-orm`
 | 
				
			||||||
 | 
					and Hibernate.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-data-mongodb`
 | 
				
			||||||
 | 
					|Support for the MongoDB NoSQL Database, including `spring-data-mongodb`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-data-rest`
 | 
				
			||||||
 | 
					|Support for exposing Spring Data repositories over REST via `spring-data-rest-webmvc`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-integration`
 | 
				
			||||||
 | 
					|Support for common `spring-integration` modules.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-jdbc`
 | 
				
			||||||
 | 
					|JDBC Database support.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-mobile`
 | 
				
			||||||
 | 
					|Support for `spring-mobile`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-redis`
 | 
				
			||||||
 | 
					|Support for the REDIS key-value data store, including `spring-redis`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-security`
 | 
				
			||||||
 | 
					|Support for `spring-security`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-test`
 | 
				
			||||||
 | 
					|Support for common test dependencies, including JUnit, Hamcrest and Mockito along with
 | 
				
			||||||
 | 
					 the `spring-test` module.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-thymeleaf`
 | 
				
			||||||
 | 
					|Support for the Thymeleaf templating engine, including integration with Spring.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-web`
 | 
				
			||||||
 | 
					|Support for full-stack web development, including Tomcat and `spring-webmvc`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-websocket`
 | 
				
			||||||
 | 
					|Support for websocket development with Tomcat.
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In addition to the application starters, the following starters can be used to
 | 
				
			||||||
 | 
					add ``<<production-ready-features.adoc#production-ready, production ready>>'' features.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.Spring Boot production ready starters
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					| Name | Description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-actuator`
 | 
				
			||||||
 | 
					|Adds production ready features such as metrics and monitoring.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-shell-remote`
 | 
				
			||||||
 | 
					|Adds remote `ssh` shell support.
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Finally, Spring Boot includes some starters that can be used if you want to exclude or
 | 
				
			||||||
 | 
					swap specific technical facets.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.Spring Boot technical starters
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					| Name | Description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-jetty`
 | 
				
			||||||
 | 
					|Imports the Jetty HTTP engine (to be used as an alternative to Tomcat)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-log4j`
 | 
				
			||||||
 | 
					|Support the Log4J looggin framework
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-logging`
 | 
				
			||||||
 | 
					|Import Spring Boot's default logging framework (Logback).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					|`spring-boot-starter-tomcat`
 | 
				
			||||||
 | 
					|Import Spring Boot's default HTTP engine (Tomcat).
 | 
				
			||||||
 | 
					|===
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-structuring-your-code]]
 | 
				
			||||||
 | 
					== Structuring your code
 | 
				
			||||||
 | 
					Spring Boot does not require any specific code layout to work, however, there are some
 | 
				
			||||||
 | 
					best practices that help.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-using-the-default-package]]
 | 
				
			||||||
 | 
					=== Using the ``default'' package
 | 
				
			||||||
 | 
					When a class doesn't include a `package` declaration it is considered to be in the
 | 
				
			||||||
 | 
					``default package''. The use of the ``default package'' is generally discouraged, and
 | 
				
			||||||
 | 
					should be avoided. It can cause particular problems for Spring Boot applications that
 | 
				
			||||||
 | 
					use `@ComponentScan` or `@EntityScan` annotations, since every class from every jar,
 | 
				
			||||||
 | 
					will be read.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: We recommend that you use the follow Java's recommended package naming conventions
 | 
				
			||||||
 | 
					and use a reversed domain name (for example, `com.example.project`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-locating-the-main-class]]
 | 
				
			||||||
 | 
					=== Locating the main application class
 | 
				
			||||||
 | 
					We generally recommend that you locate your main application class in a root package
 | 
				
			||||||
 | 
					above other classes. The `@EnableAutoConfiguration` annotation is often placed on your
 | 
				
			||||||
 | 
					main class, and it implicitly defines a base ``search package'' for certain items. For
 | 
				
			||||||
 | 
					example, if you are writing a JPA application, the package of the
 | 
				
			||||||
 | 
					`@EnableAutoConfiguration` annotated class will be used to search for `@Entity` items.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Using a root package also allows the `@ComponentScan` annotation to be used without
 | 
				
			||||||
 | 
					needing to specify a `basePackage` attribute.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Here is a typical layout:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						com
 | 
				
			||||||
 | 
						 +- example
 | 
				
			||||||
 | 
						     +- myproject
 | 
				
			||||||
 | 
						         +- Application.java
 | 
				
			||||||
 | 
						         |
 | 
				
			||||||
 | 
						         +- domain
 | 
				
			||||||
 | 
						         |   +- Customer.java
 | 
				
			||||||
 | 
						         |   +- CustomerRepository.java
 | 
				
			||||||
 | 
						         |
 | 
				
			||||||
 | 
						         +- service
 | 
				
			||||||
 | 
						         |   +- CustomerService.java
 | 
				
			||||||
 | 
						         |
 | 
				
			||||||
 | 
						         +- web
 | 
				
			||||||
 | 
						             +- CustomerController.java
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The `Application.java` file would declare the `main` method, along with the basic
 | 
				
			||||||
 | 
					`@Configuration`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,java,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						package com.example.myproject;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						import org.springframework.boot.SpringApplication;
 | 
				
			||||||
 | 
						import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 | 
				
			||||||
 | 
						import org.springframework.context.annotation.ComponentScan;
 | 
				
			||||||
 | 
						import org.springframework.context.annotation.Configuration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Configuration
 | 
				
			||||||
 | 
						@EnableAutoConfiguration
 | 
				
			||||||
 | 
						@ComponentScan
 | 
				
			||||||
 | 
						public class Application {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public static void main(String[] args) {
 | 
				
			||||||
 | 
								SpringApplication.run(Application.class, args);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-configuration-classes]]
 | 
				
			||||||
 | 
					== Configuration classes
 | 
				
			||||||
 | 
					Spring Boot favors Java-based configuration. Although it is possible to call
 | 
				
			||||||
 | 
					`SpringApplication.run()` with an XML source, we generally recommend that your primary
 | 
				
			||||||
 | 
					source is a `@Configuration` class. Usually the class that defines the `main` method
 | 
				
			||||||
 | 
					is also a good candidate as the primary `@Configuration`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: Many Spring configuration examples have been published on the Internet that use XML
 | 
				
			||||||
 | 
					configuration. Always try to use the equivalent Java-base configuration if possible.
 | 
				
			||||||
 | 
					Searching for `enable*` annotations can be a good starting point.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-importing-configuration]]
 | 
				
			||||||
 | 
					=== Importing additional configuration classes
 | 
				
			||||||
 | 
					You don't need to put all your `@Configuration` into a single class. The `@Import`
 | 
				
			||||||
 | 
					annotation can be used to import additional configuration classes. Alternatively, you
 | 
				
			||||||
 | 
					can use `@ComponentScan` to automatically pickup all Spring components, including
 | 
				
			||||||
 | 
					`@Configuration` classes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-importing-xml-configuration]]
 | 
				
			||||||
 | 
					=== Importing XML configuration
 | 
				
			||||||
 | 
					If you absolutely must use XML based configuration, we recommend that you still start
 | 
				
			||||||
 | 
					with a `@Configuration` class. You can then use an additional `@ImportResource`
 | 
				
			||||||
 | 
					annotation to load XML configuration files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-auto-configuration]]
 | 
				
			||||||
 | 
					== Auto-configuration
 | 
				
			||||||
 | 
					Spring Boot auto-configuration attempts to automatically configure your Spring
 | 
				
			||||||
 | 
					application based on the jar dependencies that you have added. For example, If
 | 
				
			||||||
 | 
					`HSQLDB` is on your classpath, and you have not manually configured any database
 | 
				
			||||||
 | 
					connection beans, then we will auto-configure an in-memory database.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You need to opt-in to auto-configuration by adding the `@EnableAutoConfiguration`
 | 
				
			||||||
 | 
					annotation to one of your `@Configuration` classes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: You should only ever add one `@EnableAutoConfiguration` annotation. We generally
 | 
				
			||||||
 | 
					recommend that you add it to your primary `@Configuration` class.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-replacing-auto-configuration]]
 | 
				
			||||||
 | 
					=== Gradually replacing auto-configuration
 | 
				
			||||||
 | 
					Auto-configuration is noninvasive,  at any point you can start to define your own
 | 
				
			||||||
 | 
					configuration to replace specific parts of the auto-configuration. For example, if
 | 
				
			||||||
 | 
					you add your own `DataSource` bean, the default embedded database support will back away.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you need to find out what auto-configuration is currently being applied, and why,
 | 
				
			||||||
 | 
					starting your application with the `--debug` switch. This will log an auto-configuration
 | 
				
			||||||
 | 
					report to the console.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-disabling-specific-auto-configutation]]
 | 
				
			||||||
 | 
					=== Disabling specific auto-configuration
 | 
				
			||||||
 | 
					If you find that specific auto-configure classes are being applied that you don't want,
 | 
				
			||||||
 | 
					you can use the exclude attribute of `@EnableAutoConfiguration` to disable them.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,java,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						import org.springframework.boot.autoconfigure.*;
 | 
				
			||||||
 | 
						import org.springframework.boot.autoconfigure.jdbc.*;
 | 
				
			||||||
 | 
						import org.springframework.context.annotation.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Configuration
 | 
				
			||||||
 | 
						@EnableAutoConfiguration(exclude={EmbeddedDatabaseConfiguration.class})
 | 
				
			||||||
 | 
						public class MyConfiguration {
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-spring-beans-and-dependency-injection]]
 | 
				
			||||||
 | 
					== Spring Beans and dependency injection
 | 
				
			||||||
 | 
					You are free to use any the standard Spring Framework techniques to defines your beans
 | 
				
			||||||
 | 
					and their injected dependencies. For simplicity, we often find that using `@ComponentScan`
 | 
				
			||||||
 | 
					to find your beans, in combination with `@Autowired` constructor injection works well.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you structure your code as suggested above (locating your application class in a root
 | 
				
			||||||
 | 
					package), you can add `@ComponentScan` without any arguments. All of your application
 | 
				
			||||||
 | 
					components (`@Component`, `@Service`, `@Repoistory`, `@Controller` etc.) will be
 | 
				
			||||||
 | 
					automatically registered as Spring Beans.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Here is an example `@Service` Bean that uses constructor injection to obtain a
 | 
				
			||||||
 | 
					required `RiskAssessor` bean.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[source,java,indent=0]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						package com.example.service;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
 | 
						import org.springframework.stereotype.Service;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Service
 | 
				
			||||||
 | 
						public class DatabaseAccountService implements AccountService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private final RiskAssessor riskAssessor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@Autowired
 | 
				
			||||||
 | 
							public DatabaseAccountService(RiskAssessor riskAssessor) {
 | 
				
			||||||
 | 
								this.riskAssessor = riskAssessor;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// ...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: Notice how using constructor injection allows the `riskAssessor` field to be marked
 | 
				
			||||||
 | 
					as `final`, indicating that it cannot be subsequently changed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-running-your-application]]
 | 
				
			||||||
 | 
					== Running your application
 | 
				
			||||||
 | 
					One of the biggest advantages of packaging your application as jar and using an embedded
 | 
				
			||||||
 | 
					HTTP server is that you can run your application as you would any other. Debugging Spring
 | 
				
			||||||
 | 
					Boot applications is also easy; you don't need any special IDE plugins or extensions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE: This section only covers jar based packaging, If you choose to package your
 | 
				
			||||||
 | 
					application as a war file you should refer to your server and IDE documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-running-from-an-ide]]
 | 
				
			||||||
 | 
					=== Running from an IDE
 | 
				
			||||||
 | 
					You can run a Spring Boot application from your IDE as a simple Java application, however,
 | 
				
			||||||
 | 
					first you will need to import your project. Import steps will vary depending on your IDE
 | 
				
			||||||
 | 
					and build system. Most IDEs can import Maven projects directly, for example Eclipse users
 | 
				
			||||||
 | 
					can select `Import...` -> `Existing Maven Projects` from the `File` menu.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you can't directly import your project into your IDE, you may be able to generate IDE
 | 
				
			||||||
 | 
					meta-data using a build plugin. Maven includes plugins for
 | 
				
			||||||
 | 
					http://maven.apache.org/plugins/maven-eclipse-plugin/[Eclipse] and
 | 
				
			||||||
 | 
					http://maven.apache.org/plugins/maven-idea-plugin/[IDEA]; Gradle offers plugins
 | 
				
			||||||
 | 
					for http://www.gradle.org/docs/current/userguide/ide_support.html[various IDEs].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TIP: If you accidentally run a web application twice you will see a ``Port already in
 | 
				
			||||||
 | 
					use'' error. STS users can use the `Relauch` button rather than `Run` to ensure that
 | 
				
			||||||
 | 
					any existing instance is closed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-running-as-a-packaged-application]]
 | 
				
			||||||
 | 
					=== Running as a packaged application
 | 
				
			||||||
 | 
					If you use the Spring Boot Maven or Gradle plugins to create an executable jar you can
 | 
				
			||||||
 | 
					run your application using `java -jar`. For example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It is also possible to run a packaged application with remote debugging support enabled.
 | 
				
			||||||
 | 
					This allows you to attach a debugger to your packaged application:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \
 | 
				
			||||||
 | 
						       -jar target/myproject-0.0.1-SNAPSHOT.jar
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-running-with-the-maven-plugin]]
 | 
				
			||||||
 | 
					=== Using the Maven plugin
 | 
				
			||||||
 | 
					The Spring Boot Maven plugin includes a `run` goal which can be used to quickly compile
 | 
				
			||||||
 | 
					and run your application. Applications run in an exploded form, and you can edit
 | 
				
			||||||
 | 
					resources for instant ``hot'' reload.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ mvn spring-boot:run
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-running-with-the-gradle-plugin]]
 | 
				
			||||||
 | 
					=== Using the Gradle plugin
 | 
				
			||||||
 | 
					The Spring Boot Gradle plugin also includes a `run` goal which can be used to run
 | 
				
			||||||
 | 
					your application in an exploded form. The `bootRun` task is added whenever you import
 | 
				
			||||||
 | 
					the `spring-boot-plugin`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[indent=0,subs="attributes"]
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
						$ gradle bootRun
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-hot-swapping]]
 | 
				
			||||||
 | 
					=== Hot swapping
 | 
				
			||||||
 | 
					Since Spring Boot applications are just plain Java application, JVM hot-swapping should
 | 
				
			||||||
 | 
					work out of the box. JVM hot swapping is somewhat limited with the bytecode that it can
 | 
				
			||||||
 | 
					replace, for a more complete solution the
 | 
				
			||||||
 | 
					https://github.com/spring-projects/spring-loaded[Spring Loaded] project, or
 | 
				
			||||||
 | 
					http://zeroturnaround.com/software/jrebel/[JRebel] can be used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the <<howto.adoc#howto-hotswapping, Hot swapping ``How-to''>> section for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-packaging-for-production]]
 | 
				
			||||||
 | 
					== Packaging your application for production
 | 
				
			||||||
 | 
					Executable jars can be used for production deployment. As they are self contained, they
 | 
				
			||||||
 | 
					are also ideally suited for cloud-based deployment.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For additional ``production ready'' features, such as health, auditing and metric REST
 | 
				
			||||||
 | 
					or JMX end-points; consider adding `spring-boot-actuator`. See
 | 
				
			||||||
 | 
					``<<production-ready-features.adoc#production-ready>>'' for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[using-boot-whats-next]]
 | 
				
			||||||
 | 
					== What to read next
 | 
				
			||||||
 | 
					You should now have good understanding of how you can use Spring Boot along with some best
 | 
				
			||||||
 | 
					practices that you should follow. You can now go on to learn about specific
 | 
				
			||||||
 | 
					``<<spring-boot-features#boot-features, Spring Boot features>>'' in depth, or you
 | 
				
			||||||
 | 
					could skip ahead and read about the
 | 
				
			||||||
 | 
					``<<production-ready-features#production-ready, production ready>>'' aspects of Spring
 | 
				
			||||||
 | 
					Boot.
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,35 @@
 | 
				
			||||||
 | 
					/* 
 | 
				
			||||||
 | 
					   code highlight CSS resemblign the Eclipse IDE default color schema
 | 
				
			||||||
 | 
					   @author Costin Leau
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.hl-keyword {
 | 
				
			||||||
 | 
					  color: #7F0055;
 | 
				
			||||||
 | 
					  font-weight: bold; 
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.hl-comment {
 | 
				
			||||||
 | 
					  color: #3F5F5F;
 | 
				
			||||||
 | 
					  font-style: italic;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.hl-multiline-comment {
 | 
				
			||||||
 | 
					  color: #3F5FBF;
 | 
				
			||||||
 | 
					  font-style: italic;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.hl-tag {
 | 
				
			||||||
 | 
					  color: #3F7F7F;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.hl-attribute {
 | 
				
			||||||
 | 
					  color: #7F007F;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.hl-value {
 | 
				
			||||||
 | 
					  color: #2A00FF;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.hl-string {
 | 
				
			||||||
 | 
					  color: #2A00FF;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					@IMPORT url("manual.css");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body.firstpage {
 | 
				
			||||||
 | 
						background: url("../images/background.png") no-repeat center top;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.part h1 {
 | 
				
			||||||
 | 
					    border-top: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					@IMPORT url("manual.css");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body {
 | 
				
			||||||
 | 
						background: url("../images/background.png") no-repeat center top;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,313 @@
 | 
				
			||||||
 | 
					@IMPORT url("highlight.css");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					html {
 | 
				
			||||||
 | 
						padding: 0pt;
 | 
				
			||||||
 | 
						margin: 0pt;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body {
 | 
				
			||||||
 | 
						color: #333333;
 | 
				
			||||||
 | 
						margin: 15px 30px;
 | 
				
			||||||
 | 
						font-family: Helvetica, Arial, Freesans, Clean, Sans-serif;
 | 
				
			||||||
 | 
						line-height: 1.6;
 | 
				
			||||||
 | 
						-webkit-font-smoothing: antialiased;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					code {
 | 
				
			||||||
 | 
						font-size: 16px;
 | 
				
			||||||
 | 
						font-family: Consolas, "Liberation Mono", Courier, monospace;
 | 
				
			||||||
 | 
						color: #6D180B;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:not(pre) > code {
 | 
				
			||||||
 | 
					    background-color: #F2F2F2;
 | 
				
			||||||
 | 
					    border: 1px solid #CCCCCC;
 | 
				
			||||||
 | 
					    border-radius: 4px;
 | 
				
			||||||
 | 
					    padding: 1px 3px 0;
 | 
				
			||||||
 | 
					    text-shadow: none;
 | 
				
			||||||
 | 
					    white-space: nowrap;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body>*:first-child {
 | 
				
			||||||
 | 
						margin-top: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div {
 | 
				
			||||||
 | 
						margin: 0pt;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hr {
 | 
				
			||||||
 | 
						border: 1px solid #CCCCCC;
 | 
				
			||||||
 | 
						background: #CCCCCC;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					h1,h2,h3,h4,h5,h6 {
 | 
				
			||||||
 | 
						color: #000000;
 | 
				
			||||||
 | 
						cursor: text;
 | 
				
			||||||
 | 
						font-weight: bold;
 | 
				
			||||||
 | 
						margin: 30px 0 10px;
 | 
				
			||||||
 | 
						padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					h1,h2,h3 {
 | 
				
			||||||
 | 
						margin: 40px 0 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					h1 {
 | 
				
			||||||
 | 
					    margin: 70px 0 30px;
 | 
				
			||||||
 | 
					    padding-top: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.part h1 {
 | 
				
			||||||
 | 
					    border-top: 1px dotted #CCCCCC;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					h1,h1 code {
 | 
				
			||||||
 | 
						font-size: 32px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					h2,h2 code {
 | 
				
			||||||
 | 
						font-size: 24px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					h3,h3 code {
 | 
				
			||||||
 | 
						font-size: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					h4,h1 code,h5,h5 code,h6,h6 code {
 | 
				
			||||||
 | 
						font-size: 18px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.book,div.chapter,div.appendix,div.part,div.preface {
 | 
				
			||||||
 | 
						min-width: 300px;
 | 
				
			||||||
 | 
						max-width: 1200px;
 | 
				
			||||||
 | 
						margin: 0 auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					p.releaseinfo {
 | 
				
			||||||
 | 
						font-weight: bold;
 | 
				
			||||||
 | 
						margin-bottom: 40px;
 | 
				
			||||||
 | 
						margin-top: 40px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.authorgroup {
 | 
				
			||||||
 | 
						line-height: 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					p.copyright {
 | 
				
			||||||
 | 
						line-height: 1;
 | 
				
			||||||
 | 
						margin-bottom: -5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.legalnotice p {
 | 
				
			||||||
 | 
						font-style: italic;
 | 
				
			||||||
 | 
						font-size: 14px;
 | 
				
			||||||
 | 
						line-height: 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.titlepage+p,div.titlepage+p {
 | 
				
			||||||
 | 
						margin-top: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pre {
 | 
				
			||||||
 | 
						line-height: 1.0;
 | 
				
			||||||
 | 
						color: black;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					a {
 | 
				
			||||||
 | 
						color: #4183C4;
 | 
				
			||||||
 | 
						text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					p {
 | 
				
			||||||
 | 
						margin: 15px 0;
 | 
				
			||||||
 | 
						text-align: left;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ul,ol {
 | 
				
			||||||
 | 
						padding-left: 30px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					li p {
 | 
				
			||||||
 | 
						margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.table {
 | 
				
			||||||
 | 
						margin: 1em;
 | 
				
			||||||
 | 
						padding: 0.5em;
 | 
				
			||||||
 | 
						text-align: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.table table, div.informaltable table {
 | 
				
			||||||
 | 
						display: table;
 | 
				
			||||||
 | 
						width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.table td {
 | 
				
			||||||
 | 
						padding-left: 7px;
 | 
				
			||||||
 | 
						padding-right: 7px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sidebar {
 | 
				
			||||||
 | 
						line-height: 1.4;
 | 
				
			||||||
 | 
						padding: 0 20px;
 | 
				
			||||||
 | 
						background-color: #F8F8F8;
 | 
				
			||||||
 | 
						border: 1px solid #CCCCCC;
 | 
				
			||||||
 | 
						border-radius: 3px 3px 3px 3px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sidebar p.title {
 | 
				
			||||||
 | 
						color: #6D180B;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pre.programlisting, pre.screen {
 | 
				
			||||||
 | 
						font-size: 15px;
 | 
				
			||||||
 | 
						padding: 6px 10px;
 | 
				
			||||||
 | 
						background-color: #F8F8F8;
 | 
				
			||||||
 | 
						border: 1px solid #CCCCCC;
 | 
				
			||||||
 | 
						border-radius: 3px 3px 3px 3px;
 | 
				
			||||||
 | 
						clear: both;
 | 
				
			||||||
 | 
						overflow: auto;
 | 
				
			||||||
 | 
						line-height: 1.4;
 | 
				
			||||||
 | 
						font-family: Consolas,"Liberation Mono",Courier,monospace;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					table {
 | 
				
			||||||
 | 
						border-collapse: collapse;
 | 
				
			||||||
 | 
						border-spacing: 0;
 | 
				
			||||||
 | 
						border: 1px solid #DDDDDD !important;
 | 
				
			||||||
 | 
						border-radius: 4px !important;
 | 
				
			||||||
 | 
						border-collapse: separate !important;
 | 
				
			||||||
 | 
						line-height: 1.6;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					table thead {
 | 
				
			||||||
 | 
						background: #F5F5F5;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					table tr {
 | 
				
			||||||
 | 
						border: none;
 | 
				
			||||||
 | 
						border-bottom: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					table th {
 | 
				
			||||||
 | 
						font-weight: bold;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					table th,table td {
 | 
				
			||||||
 | 
						border: none !important;
 | 
				
			||||||
 | 
						padding: 6px 13px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					table tr:nth-child(2n) {
 | 
				
			||||||
 | 
						background-color: #F8F8F8;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					td p {
 | 
				
			||||||
 | 
						margin: 0 0 15px 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.table-contents td p {
 | 
				
			||||||
 | 
						margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.important *,div.note *,div.tip *,div.warning *,div.navheader *,div.navfooter *,div.calloutlist * {
 | 
				
			||||||
 | 
						border: none !important;
 | 
				
			||||||
 | 
						background: none !important;
 | 
				
			||||||
 | 
						margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.important p,div.note p,div.tip p,div.warning p {
 | 
				
			||||||
 | 
						color: #6F6F6F;
 | 
				
			||||||
 | 
						line-height: 1.6;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.important code,div.note code,div.tip code,div.warning code {
 | 
				
			||||||
 | 
						background-color: #F2F2F2 !important;
 | 
				
			||||||
 | 
					    border: 1px solid #CCCCCC !important;
 | 
				
			||||||
 | 
					    border-radius: 4px !important;
 | 
				
			||||||
 | 
					    padding: 1px 3px 0 !important;
 | 
				
			||||||
 | 
					    text-shadow: none !important;
 | 
				
			||||||
 | 
					    white-space: nowrap !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.note th,.tip th,.warning th {
 | 
				
			||||||
 | 
						display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.note tr:first-child td,.tip tr:first-child td,.warning tr:first-child td {
 | 
				
			||||||
 | 
						border-right: 1px solid #CCCCCC !important;
 | 
				
			||||||
 | 
						padding-top: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.calloutlist p, div.calloutlist td {
 | 
				
			||||||
 | 
						padding: 0;
 | 
				
			||||||
 | 
						margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.calloutlist > table > tbody > tr > td:first-child {
 | 
				
			||||||
 | 
						padding-left: 10px;
 | 
				
			||||||
 | 
						width: 30px !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.important,div.note,div.tip,div.warning {
 | 
				
			||||||
 | 
						margin-left: 0px !important;
 | 
				
			||||||
 | 
						margin-right: 20px !important;
 | 
				
			||||||
 | 
						margin-top: 20px;
 | 
				
			||||||
 | 
						margin-bottom: 20px;
 | 
				
			||||||
 | 
						padding-top: 10px;
 | 
				
			||||||
 | 
						padding-bottom: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.toc {
 | 
				
			||||||
 | 
						line-height: 1.2;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dl,dt {
 | 
				
			||||||
 | 
						margin-top: 1px;
 | 
				
			||||||
 | 
						margin-bottom: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.toc > dl > dt {
 | 
				
			||||||
 | 
						font-size: 32px;
 | 
				
			||||||
 | 
						font-weight: bold;
 | 
				
			||||||
 | 
						margin: 30px 0 10px 0;
 | 
				
			||||||
 | 
						display: block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.toc > dl > dd > dl > dt {
 | 
				
			||||||
 | 
						font-size: 24px;
 | 
				
			||||||
 | 
						font-weight: bold;
 | 
				
			||||||
 | 
						margin: 20px 0 10px 0;
 | 
				
			||||||
 | 
						display: block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.toc > dl > dd > dl > dd > dl > dt {
 | 
				
			||||||
 | 
						font-weight: bold;
 | 
				
			||||||
 | 
						font-size: 20px;
 | 
				
			||||||
 | 
						margin: 10px 0 0 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					tbody.footnotes * {
 | 
				
			||||||
 | 
						border: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.footnote p {
 | 
				
			||||||
 | 
						margin: 0;
 | 
				
			||||||
 | 
						line-height: 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.footnote p sup {
 | 
				
			||||||
 | 
						margin-right: 6px;
 | 
				
			||||||
 | 
						vertical-align: middle;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.navheader {
 | 
				
			||||||
 | 
						border-bottom: 1px solid #CCCCCC;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.navfooter {
 | 
				
			||||||
 | 
						border-top: 1px solid #CCCCCC;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 11 KiB  | 
| 
		 After Width: | Height: | Size: 2.0 KiB  | 
| 
		 After Width: | Height: | Size: 2.0 KiB  | 
| 
		 After Width: | Height: | Size: 45 KiB  | 
| 
		 After Width: | Height: | Size: 2.2 KiB  | 
| 
		 After Width: | Height: | Size: 931 B  | 
| 
		 After Width: | Height: | Size: 2.1 KiB  | 
| 
						 | 
					@ -0,0 +1,44 @@
 | 
				
			||||||
 | 
					<?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.
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 | 
				
			||||||
 | 
							xmlns:xslthl="http://xslthl.sf.net"
 | 
				
			||||||
 | 
							exclude-result-prefixes="xslthl"
 | 
				
			||||||
 | 
							version='1.0'>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Extensions -->
 | 
				
			||||||
 | 
						<xsl:param name="use.extensions">1</xsl:param>
 | 
				
			||||||
 | 
						<xsl:param name="tablecolumns.extension">0</xsl:param>
 | 
				
			||||||
 | 
						<xsl:param name="callout.extensions">1</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Graphics -->
 | 
				
			||||||
 | 
						<xsl:param name="admon.graphics" select="1"/>
 | 
				
			||||||
 | 
						<xsl:param name="admon.graphics.path">images/</xsl:param>
 | 
				
			||||||
 | 
						<xsl:param name="admon.graphics.extension">.png</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Table of Contents -->
 | 
				
			||||||
 | 
						<xsl:param name="generate.toc">book toc,title</xsl:param>
 | 
				
			||||||
 | 
						<xsl:param name="toc.section.depth">3</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Hide revhistory -->
 | 
				
			||||||
 | 
						<xsl:template match="revhistory" mode="titlepage.mode"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</xsl:stylesheet>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,30 @@
 | 
				
			||||||
 | 
					<?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.
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 | 
				
			||||||
 | 
							xmlns:xslthl="http://xslthl.sf.net"
 | 
				
			||||||
 | 
							exclude-result-prefixes="xslthl"
 | 
				
			||||||
 | 
							version='1.0'>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:import href="urn:docbkx:stylesheet"/>
 | 
				
			||||||
 | 
						<xsl:import href="common.xsl"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</xsl:stylesheet>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,73 @@
 | 
				
			||||||
 | 
					<?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.
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 | 
				
			||||||
 | 
									version='1.0'>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl"/>
 | 
				
			||||||
 | 
						<xsl:import href="html.xsl"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:param name="html.stylesheet">css/manual-multipage.css</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:param name="chunk.section.depth">'5'</xsl:param>
 | 
				
			||||||
 | 
						<xsl:param name="use.id.as.filename">'1'</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Replace chunk-element-content from chunk-common to add firstpage class to body -->
 | 
				
			||||||
 | 
						<xsl:template name="chunk-element-content">
 | 
				
			||||||
 | 
							<xsl:param name="prev"/>
 | 
				
			||||||
 | 
							<xsl:param name="next"/>
 | 
				
			||||||
 | 
							<xsl:param name="nav.context"/>
 | 
				
			||||||
 | 
							<xsl:param name="content">
 | 
				
			||||||
 | 
								<xsl:apply-imports/>
 | 
				
			||||||
 | 
							</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  		<xsl:call-template name="user.preroot"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<html>
 | 
				
			||||||
 | 
								<xsl:call-template name="html.head">
 | 
				
			||||||
 | 
								<xsl:with-param name="prev" select="$prev"/>
 | 
				
			||||||
 | 
								<xsl:with-param name="next" select="$next"/>
 | 
				
			||||||
 | 
								</xsl:call-template>
 | 
				
			||||||
 | 
								<body>
 | 
				
			||||||
 | 
									<xsl:if test="count($prev) = 0">
 | 
				
			||||||
 | 
										<xsl:attribute name="class">firstpage</xsl:attribute>
 | 
				
			||||||
 | 
									</xsl:if>
 | 
				
			||||||
 | 
									<xsl:call-template name="body.attributes"/>
 | 
				
			||||||
 | 
									<xsl:call-template name="user.header.navigation"/>
 | 
				
			||||||
 | 
									<xsl:call-template name="header.navigation">
 | 
				
			||||||
 | 
										<xsl:with-param name="prev" select="$prev"/>
 | 
				
			||||||
 | 
										<xsl:with-param name="next" select="$next"/>
 | 
				
			||||||
 | 
										<xsl:with-param name="nav.context" select="$nav.context"/>
 | 
				
			||||||
 | 
									</xsl:call-template>
 | 
				
			||||||
 | 
									<xsl:call-template name="user.header.content"/>
 | 
				
			||||||
 | 
									<xsl:copy-of select="$content"/>
 | 
				
			||||||
 | 
									<xsl:call-template name="user.footer.content"/>
 | 
				
			||||||
 | 
									<xsl:call-template name="footer.navigation">
 | 
				
			||||||
 | 
										<xsl:with-param name="prev" select="$prev"/>
 | 
				
			||||||
 | 
										<xsl:with-param name="next" select="$next"/>
 | 
				
			||||||
 | 
										<xsl:with-param name="nav.context" select="$nav.context"/>
 | 
				
			||||||
 | 
									</xsl:call-template>
 | 
				
			||||||
 | 
									<xsl:call-template name="user.footer.navigation"/>
 | 
				
			||||||
 | 
								</body>
 | 
				
			||||||
 | 
							</html>
 | 
				
			||||||
 | 
							<xsl:value-of select="$chunk.append"/>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					</xsl:stylesheet>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,30 @@
 | 
				
			||||||
 | 
					<?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.
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 | 
				
			||||||
 | 
									version='1.0'>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl"/>
 | 
				
			||||||
 | 
						<xsl:import href="html.xsl"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:param name="html.stylesheet">css/manual-singlepage.css</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</xsl:stylesheet>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,117 @@
 | 
				
			||||||
 | 
					<?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.
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 | 
				
			||||||
 | 
							xmlns:xslthl="http://xslthl.sf.net"
 | 
				
			||||||
 | 
							exclude-result-prefixes="xslthl"
 | 
				
			||||||
 | 
							version='1.0'>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/html/highlight.xsl"/>
 | 
				
			||||||
 | 
						<xsl:import href="common.xsl"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Only use scaling in FO -->
 | 
				
			||||||
 | 
						<xsl:param name="ignore.image.scaling">1</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Use code syntax highlighting -->
 | 
				
			||||||
 | 
						<xsl:param name="highlight.source">1</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Activate Graphics -->
 | 
				
			||||||
 | 
						<xsl:param name="callout.graphics" select="1" />
 | 
				
			||||||
 | 
						<xsl:param name="callout.defaultcolumn">120</xsl:param>
 | 
				
			||||||
 | 
						<xsl:param name="callout.graphics.path">images/callouts/</xsl:param>
 | 
				
			||||||
 | 
						<xsl:param name="callout.graphics.extension">.png</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:param name="table.borders.with.css" select="1"/>
 | 
				
			||||||
 | 
						<xsl:param name="html.stylesheet.type">text/css</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:param name="admonition.title.properties">text-align: left</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Leave image paths as relative when navigating XInclude -->
 | 
				
			||||||
 | 
						<xsl:param name="keep.relative.image.uris" select="1"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Label Chapters and Sections (numbering) -->
 | 
				
			||||||
 | 
						<xsl:param name="chapter.autolabel" select="1"/>
 | 
				
			||||||
 | 
						<xsl:param name="section.autolabel" select="1"/>
 | 
				
			||||||
 | 
						<xsl:param name="section.autolabel.max.depth" select="2"/>
 | 
				
			||||||
 | 
						<xsl:param name="section.label.includes.component.label" select="1"/>
 | 
				
			||||||
 | 
						<xsl:param name="table.footnote.number.format" select="'1'"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Remove "Chapter" from the Chapter titles... -->
 | 
				
			||||||
 | 
						<xsl:param name="local.l10n.xml" select="document('')"/>
 | 
				
			||||||
 | 
						<l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
 | 
				
			||||||
 | 
							<l:l10n language="en">
 | 
				
			||||||
 | 
								<l:context name="title-numbered">
 | 
				
			||||||
 | 
									<l:template name="chapter" text="%n. %t"/>
 | 
				
			||||||
 | 
									<l:template name="section" text="%n %t"/>
 | 
				
			||||||
 | 
								</l:context>
 | 
				
			||||||
 | 
							</l:l10n>
 | 
				
			||||||
 | 
						</l:i18n>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Syntax Highlighting -->
 | 
				
			||||||
 | 
						<xsl:template match='xslthl:keyword' mode="xslthl">
 | 
				
			||||||
 | 
							<span class="hl-keyword"><xsl:apply-templates mode="xslthl"/></span>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match='xslthl:comment' mode="xslthl">
 | 
				
			||||||
 | 
							<span class="hl-comment"><xsl:apply-templates mode="xslthl"/></span>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match='xslthl:oneline-comment' mode="xslthl">
 | 
				
			||||||
 | 
							<span class="hl-comment"><xsl:apply-templates mode="xslthl"/></span>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match='xslthl:multiline-comment' mode="xslthl">
 | 
				
			||||||
 | 
							<span class="hl-multiline-comment"><xsl:apply-templates mode="xslthl"/></span>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match='xslthl:tag' mode="xslthl">
 | 
				
			||||||
 | 
							<span class="hl-tag"><xsl:apply-templates mode="xslthl"/></span>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match='xslthl:attribute' mode="xslthl">
 | 
				
			||||||
 | 
							<span class="hl-attribute"><xsl:apply-templates mode="xslthl"/></span>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match='xslthl:value' mode="xslthl">
 | 
				
			||||||
 | 
							<span class="hl-value"><xsl:apply-templates mode="xslthl"/></span>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match='xslthl:string' mode="xslthl">
 | 
				
			||||||
 | 
							<span class="hl-string"><xsl:apply-templates mode="xslthl"/></span>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Custom Title Page -->
 | 
				
			||||||
 | 
						<xsl:template match="author" mode="titlepage.mode">
 | 
				
			||||||
 | 
							<xsl:if test="name(preceding-sibling::*[1]) = 'author'">
 | 
				
			||||||
 | 
								<xsl:text>, </xsl:text>
 | 
				
			||||||
 | 
							</xsl:if>
 | 
				
			||||||
 | 
							<span class="{name(.)}">
 | 
				
			||||||
 | 
								<xsl:call-template name="person.name"/>
 | 
				
			||||||
 | 
								<xsl:apply-templates mode="titlepage.mode" select="./contrib"/>
 | 
				
			||||||
 | 
							</span>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
						<xsl:template match="authorgroup" mode="titlepage.mode">
 | 
				
			||||||
 | 
							<div class="{name(.)}">
 | 
				
			||||||
 | 
								<h2>Authors</h2>
 | 
				
			||||||
 | 
								<xsl:apply-templates mode="titlepage.mode"/>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					</xsl:stylesheet>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,608 @@
 | 
				
			||||||
 | 
					<?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.
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 | 
				
			||||||
 | 
									xmlns:d="http://docbook.org/ns/docbook"
 | 
				
			||||||
 | 
									xmlns:fo="http://www.w3.org/1999/XSL/Format"
 | 
				
			||||||
 | 
									xmlns:xslthl="http://xslthl.sf.net"
 | 
				
			||||||
 | 
									exclude-result-prefixes="xslthl d"
 | 
				
			||||||
 | 
									version='1.0'>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl"/>
 | 
				
			||||||
 | 
						<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/highlight.xsl"/>
 | 
				
			||||||
 | 
						<xsl:import href="common.xsl"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Extensions -->
 | 
				
			||||||
 | 
						<xsl:param name="fop1.extensions" select="1"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:param name="paper.type" select="'A4'"/>
 | 
				
			||||||
 | 
						<xsl:param name="page.margin.top" select="'1cm'"/>
 | 
				
			||||||
 | 
						<xsl:param name="region.before.extent" select="'1cm'"/>
 | 
				
			||||||
 | 
						<xsl:param name="body.margin.top" select="'1.5cm'"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:param name="body.margin.bottom" select="'1.5cm'"/>
 | 
				
			||||||
 | 
						<xsl:param name="region.after.extent" select="'1cm'"/>
 | 
				
			||||||
 | 
						<xsl:param name="page.margin.bottom" select="'1cm'"/>
 | 
				
			||||||
 | 
						<xsl:param name="title.margin.left" select="'0cm'"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- allow break across pages -->
 | 
				
			||||||
 | 
						<xsl:attribute-set name="formal.object.properties">
 | 
				
			||||||
 | 
							<xsl:attribute name="keep-together.within-column">auto</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- TITLE PAGE -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template name="book.titlepage.recto">
 | 
				
			||||||
 | 
							<fo:block>
 | 
				
			||||||
 | 
								<fo:table table-layout="fixed" width="175mm">
 | 
				
			||||||
 | 
									<fo:table-column column-width="175mm"/>
 | 
				
			||||||
 | 
									<fo:table-body>
 | 
				
			||||||
 | 
										<fo:table-row>
 | 
				
			||||||
 | 
											<fo:table-cell text-align="center">
 | 
				
			||||||
 | 
												<fo:block>
 | 
				
			||||||
 | 
													<fo:external-graphic src="images/logo.png" width="240px"
 | 
				
			||||||
 | 
														height="auto" content-width="scale-to-fit"
 | 
				
			||||||
 | 
														content-height="scale-to-fit"
 | 
				
			||||||
 | 
														content-type="content-type:image/png" text-align="center"
 | 
				
			||||||
 | 
													/>
 | 
				
			||||||
 | 
												</fo:block>
 | 
				
			||||||
 | 
												<fo:block font-family="Helvetica" font-size="20pt" font-weight="bold" padding="10mm">
 | 
				
			||||||
 | 
													<xsl:value-of select="bookinfo/title"/>
 | 
				
			||||||
 | 
												</fo:block>
 | 
				
			||||||
 | 
												<fo:block font-family="Helvetica" font-size="14pt" padding-before="2mm">
 | 
				
			||||||
 | 
													<xsl:value-of select="bookinfo/subtitle"/>
 | 
				
			||||||
 | 
												</fo:block>
 | 
				
			||||||
 | 
												<fo:block font-family="Helvetica" font-size="14pt" padding="2mm">
 | 
				
			||||||
 | 
													<xsl:value-of select="bookinfo/releaseinfo"/>
 | 
				
			||||||
 | 
												</fo:block>
 | 
				
			||||||
 | 
											</fo:table-cell>
 | 
				
			||||||
 | 
										</fo:table-row>
 | 
				
			||||||
 | 
										<fo:table-row>
 | 
				
			||||||
 | 
											<fo:table-cell text-align="center">
 | 
				
			||||||
 | 
												<fo:block font-family="Helvetica" font-size="14pt" padding="5mm">
 | 
				
			||||||
 | 
													<xsl:value-of select="bookinfo/pubdate"/>
 | 
				
			||||||
 | 
												</fo:block>
 | 
				
			||||||
 | 
											</fo:table-cell>
 | 
				
			||||||
 | 
										</fo:table-row>
 | 
				
			||||||
 | 
										<fo:table-row>
 | 
				
			||||||
 | 
											<fo:table-cell text-align="center">
 | 
				
			||||||
 | 
												<fo:block font-family="Helvetica" font-size="10pt" padding="10mm">
 | 
				
			||||||
 | 
													<xsl:for-each select="bookinfo/authorgroup/author">
 | 
				
			||||||
 | 
														<xsl:if test="position() > 1">
 | 
				
			||||||
 | 
															<xsl:text>, </xsl:text>
 | 
				
			||||||
 | 
														</xsl:if>
 | 
				
			||||||
 | 
														<xsl:value-of select="."/>
 | 
				
			||||||
 | 
													</xsl:for-each>
 | 
				
			||||||
 | 
												</fo:block>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
												<fo:block font-family="Helvetica" font-size="10pt" padding="5mm">
 | 
				
			||||||
 | 
													<xsl:value-of select="bookinfo/pubdate"/>
 | 
				
			||||||
 | 
												</fo:block>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
												<fo:block font-family="Helvetica" font-size="10pt" padding="5mm" padding-before="25em">
 | 
				
			||||||
 | 
													<xsl:text>Copyright © </xsl:text><xsl:value-of select="bookinfo/copyright"/>
 | 
				
			||||||
 | 
												</fo:block>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
												<fo:block font-family="Helvetica" font-size="8pt" padding="1mm">
 | 
				
			||||||
 | 
													<xsl:value-of select="bookinfo/legalnotice"/>
 | 
				
			||||||
 | 
												</fo:block>
 | 
				
			||||||
 | 
											</fo:table-cell>
 | 
				
			||||||
 | 
										</fo:table-row>
 | 
				
			||||||
 | 
									</fo:table-body>
 | 
				
			||||||
 | 
								</fo:table>
 | 
				
			||||||
 | 
							</fo:block>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Prevent blank pages in output -->
 | 
				
			||||||
 | 
						<xsl:template name="book.titlepage.before.verso">
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
						<xsl:template name="book.titlepage.verso">
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
						<xsl:template name="book.titlepage.separator">
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!--  HEADER -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- More space in the center header for long text -->
 | 
				
			||||||
 | 
						<xsl:attribute-set name="header.content.properties">
 | 
				
			||||||
 | 
							<xsl:attribute name="font-family">
 | 
				
			||||||
 | 
								<xsl:value-of select="$body.font.family"/>
 | 
				
			||||||
 | 
							</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="margin-left">-5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="margin-right">-5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="font-size">8pt</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template name="header.content">
 | 
				
			||||||
 | 
							<xsl:param name="pageclass" select="''"/>
 | 
				
			||||||
 | 
							<xsl:param name="sequence" select="''"/>
 | 
				
			||||||
 | 
							<xsl:param name="position" select="''"/>
 | 
				
			||||||
 | 
							<xsl:param name="gentext-key" select="''"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<xsl:variable name="Version">
 | 
				
			||||||
 | 
								<xsl:choose>
 | 
				
			||||||
 | 
									<xsl:when test="//title">
 | 
				
			||||||
 | 
										<xsl:value-of select="//title"/><xsl:text> </xsl:text>
 | 
				
			||||||
 | 
									</xsl:when>
 | 
				
			||||||
 | 
									<xsl:otherwise>
 | 
				
			||||||
 | 
										<xsl:text>please define title in your docbook file!</xsl:text>
 | 
				
			||||||
 | 
									</xsl:otherwise>
 | 
				
			||||||
 | 
								</xsl:choose>
 | 
				
			||||||
 | 
							</xsl:variable>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<xsl:choose>
 | 
				
			||||||
 | 
								<xsl:when test="$sequence='blank'">
 | 
				
			||||||
 | 
									<xsl:choose>
 | 
				
			||||||
 | 
										<xsl:when test="$position='center'">
 | 
				
			||||||
 | 
											<xsl:value-of select="$Version"/>
 | 
				
			||||||
 | 
										</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										<xsl:otherwise>
 | 
				
			||||||
 | 
										</xsl:otherwise>
 | 
				
			||||||
 | 
									</xsl:choose>
 | 
				
			||||||
 | 
								</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<xsl:when test="$pageclass='titlepage'">
 | 
				
			||||||
 | 
								</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<xsl:when test="$position='center'">
 | 
				
			||||||
 | 
									<xsl:value-of select="$Version"/>
 | 
				
			||||||
 | 
								</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<xsl:otherwise>
 | 
				
			||||||
 | 
								</xsl:otherwise>
 | 
				
			||||||
 | 
							</xsl:choose>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- FOOTER-->
 | 
				
			||||||
 | 
						<xsl:attribute-set name="footer.content.properties">
 | 
				
			||||||
 | 
							<xsl:attribute name="font-family">
 | 
				
			||||||
 | 
								<xsl:value-of select="$body.font.family"/>
 | 
				
			||||||
 | 
							</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="font-size">8pt</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template name="footer.content">
 | 
				
			||||||
 | 
							<xsl:param name="pageclass" select="''"/>
 | 
				
			||||||
 | 
							<xsl:param name="sequence" select="''"/>
 | 
				
			||||||
 | 
							<xsl:param name="position" select="''"/>
 | 
				
			||||||
 | 
							<xsl:param name="gentext-key" select="''"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<xsl:variable name="Version">
 | 
				
			||||||
 | 
								<xsl:choose>
 | 
				
			||||||
 | 
									<xsl:when test="//releaseinfo">
 | 
				
			||||||
 | 
										<xsl:value-of select="//releaseinfo"/>
 | 
				
			||||||
 | 
									</xsl:when>
 | 
				
			||||||
 | 
									<xsl:otherwise>
 | 
				
			||||||
 | 
									</xsl:otherwise>
 | 
				
			||||||
 | 
								</xsl:choose>
 | 
				
			||||||
 | 
							</xsl:variable>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<xsl:variable name="Title">
 | 
				
			||||||
 | 
								<xsl:choose>
 | 
				
			||||||
 | 
									<xsl:when test="//productname">
 | 
				
			||||||
 | 
										<xsl:value-of select="//productname"/><xsl:text> </xsl:text>
 | 
				
			||||||
 | 
									</xsl:when>
 | 
				
			||||||
 | 
									<xsl:otherwise>
 | 
				
			||||||
 | 
										<xsl:text>please define title in your docbook file!</xsl:text>
 | 
				
			||||||
 | 
									</xsl:otherwise>
 | 
				
			||||||
 | 
								</xsl:choose>
 | 
				
			||||||
 | 
							</xsl:variable>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<xsl:choose>
 | 
				
			||||||
 | 
								<xsl:when test="$sequence='blank'">
 | 
				
			||||||
 | 
									<xsl:choose>
 | 
				
			||||||
 | 
										<xsl:when test="$double.sided != 0 and $position = 'left'">
 | 
				
			||||||
 | 
											<xsl:value-of select="$Version"/>
 | 
				
			||||||
 | 
										</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										<xsl:when test="$double.sided = 0 and $position = 'center'">
 | 
				
			||||||
 | 
										</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										<xsl:otherwise>
 | 
				
			||||||
 | 
											<fo:page-number/>
 | 
				
			||||||
 | 
										</xsl:otherwise>
 | 
				
			||||||
 | 
									</xsl:choose>
 | 
				
			||||||
 | 
								</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<xsl:when test="$pageclass='titlepage'">
 | 
				
			||||||
 | 
								</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
 | 
				
			||||||
 | 
									<fo:page-number/>
 | 
				
			||||||
 | 
								</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
 | 
				
			||||||
 | 
									<fo:page-number/>
 | 
				
			||||||
 | 
								</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<xsl:when test="$double.sided = 0 and $position='right'">
 | 
				
			||||||
 | 
									<fo:page-number/>
 | 
				
			||||||
 | 
								</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
 | 
				
			||||||
 | 
									<xsl:value-of select="$Version"/>
 | 
				
			||||||
 | 
								</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
 | 
				
			||||||
 | 
									<xsl:value-of select="$Version"/>
 | 
				
			||||||
 | 
								</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<xsl:when test="$double.sided = 0 and $position='left'">
 | 
				
			||||||
 | 
									<xsl:value-of select="$Version"/>
 | 
				
			||||||
 | 
								</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<xsl:when test="$position='center'">
 | 
				
			||||||
 | 
									<xsl:value-of select="$Title"/>
 | 
				
			||||||
 | 
								</xsl:when>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<xsl:otherwise>
 | 
				
			||||||
 | 
								</xsl:otherwise>
 | 
				
			||||||
 | 
							</xsl:choose>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match="processing-instruction('hard-pagebreak')">
 | 
				
			||||||
 | 
							<fo:block break-before='page'/>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- PAPER & PAGE SIZE -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Paper type, no headers on blank pages, no double sided printing -->
 | 
				
			||||||
 | 
						<xsl:param name="double.sided">0</xsl:param>
 | 
				
			||||||
 | 
						<xsl:param name="headers.on.blank.pages">0</xsl:param>
 | 
				
			||||||
 | 
						<xsl:param name="footers.on.blank.pages">0</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- FONTS & STYLES -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:param name="hyphenate">false</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Default Font size -->
 | 
				
			||||||
 | 
						<xsl:param name="body.font.family">Helvetica</xsl:param>
 | 
				
			||||||
 | 
						<xsl:param name="body.font.master">10</xsl:param>
 | 
				
			||||||
 | 
						<xsl:param name="body.font.small">8</xsl:param>
 | 
				
			||||||
 | 
						<xsl:param name="title.font.family">Helvetica</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Line height in body text -->
 | 
				
			||||||
 | 
						<xsl:param name="line-height">1.4</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Chapter title size -->
 | 
				
			||||||
 | 
						<xsl:attribute-set name="chapter.titlepage.recto.style">
 | 
				
			||||||
 | 
							<xsl:attribute name="text-align">left</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="font-weight">bold</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="font-size">
 | 
				
			||||||
 | 
								<xsl:value-of select="$body.font.master * 1.8"/>
 | 
				
			||||||
 | 
								<xsl:text>pt</xsl:text>
 | 
				
			||||||
 | 
							</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Why is the font-size for chapters hardcoded in the XSL FO templates?
 | 
				
			||||||
 | 
						Let's remove it, so this sucker can use our attribute-set only... -->
 | 
				
			||||||
 | 
						<xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
 | 
				
			||||||
 | 
							<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
 | 
				
			||||||
 | 
									xsl:use-attribute-sets="chapter.titlepage.recto.style">
 | 
				
			||||||
 | 
								<xsl:call-template name="component.title">
 | 
				
			||||||
 | 
								<xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
 | 
				
			||||||
 | 
								</xsl:call-template>
 | 
				
			||||||
 | 
							</fo:block>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
 | 
				
			||||||
 | 
						<xsl:attribute-set name="section.title.level1.properties">
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="font-size">
 | 
				
			||||||
 | 
								<xsl:value-of select="$body.font.master * 1.5"/>
 | 
				
			||||||
 | 
								<xsl:text>pt</xsl:text>
 | 
				
			||||||
 | 
							</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:attribute-set name="section.title.level2.properties">
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="font-size">
 | 
				
			||||||
 | 
								<xsl:value-of select="$body.font.master * 1.25"/>
 | 
				
			||||||
 | 
								<xsl:text>pt</xsl:text>
 | 
				
			||||||
 | 
							</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:attribute-set name="section.title.level3.properties">
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="font-size">
 | 
				
			||||||
 | 
								<xsl:value-of select="$body.font.master * 1.0"/>
 | 
				
			||||||
 | 
								<xsl:text>pt</xsl:text>
 | 
				
			||||||
 | 
							</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:attribute-set name="section.title.level4.properties">
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.optimum">0.3em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.minimum">0.3em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.maximum">0.3em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="font-size">
 | 
				
			||||||
 | 
								<xsl:value-of select="$body.font.master * 0.9"/>
 | 
				
			||||||
 | 
								<xsl:text>pt</xsl:text>
 | 
				
			||||||
 | 
							</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- TABLES -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Some padding inside tables -->
 | 
				
			||||||
 | 
						<xsl:attribute-set name="table.cell.padding">
 | 
				
			||||||
 | 
							<xsl:attribute name="padding-left">4pt</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="padding-right">4pt</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="padding-top">4pt</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="padding-bottom">4pt</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Only hairlines as frame and cell borders in tables -->
 | 
				
			||||||
 | 
						<xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
 | 
				
			||||||
 | 
						<xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- LABELS -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Label Chapters and Sections (numbering) -->
 | 
				
			||||||
 | 
						<xsl:param name="chapter.autolabel" select="1"/>
 | 
				
			||||||
 | 
						<xsl:param name="section.autolabel" select="1"/>
 | 
				
			||||||
 | 
						<xsl:param name="section.autolabel.max.depth" select="1"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:param name="section.label.includes.component.label" select="1"/>
 | 
				
			||||||
 | 
						<xsl:param name="table.footnote.number.format" select="'1'"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- PROGRAMLISTINGS -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Verbatim text formatting (programlistings) -->
 | 
				
			||||||
 | 
						<xsl:attribute-set name="monospace.verbatim.properties">
 | 
				
			||||||
 | 
							<xsl:attribute name="font-size">7pt</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="wrap-option">wrap</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="keep-together.within-column">1</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:attribute-set name="verbatim.properties">
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.minimum">1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.optimum">1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.maximum">1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<xsl:attribute name="border-color">#444444</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="border-style">solid</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="border-width">0.1pt</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="padding-top">0.5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="padding-left">0.5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="padding-right">0.5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="margin-left">0.5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="margin-right">0.5em</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Shade (background) programlistings -->
 | 
				
			||||||
 | 
						<xsl:param name="shade.verbatim">1</xsl:param>
 | 
				
			||||||
 | 
						<xsl:attribute-set name="shade.verbatim.style">
 | 
				
			||||||
 | 
							<xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:attribute-set name="list.block.spacing">
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.optimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.minimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.maximum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:attribute-set name="example.properties">
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.minimum">0.5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.optimum">0.5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.maximum">0.5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:attribute-set name="sidebar.properties">
 | 
				
			||||||
 | 
							<xsl:attribute name="border-color">#444444</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="border-style">solid</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="border-width">0.1pt</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- TITLE INFORMATION FOR FIGURES, EXAMPLES ETC. -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
 | 
				
			||||||
 | 
							<xsl:attribute name="font-weight">normal</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="font-style">italic</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="font-size">
 | 
				
			||||||
 | 
								<xsl:value-of select="$body.font.master"/>
 | 
				
			||||||
 | 
								<xsl:text>pt</xsl:text>
 | 
				
			||||||
 | 
							</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="hyphenate">false</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.minimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.optimum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.maximum">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- CALLOUTS -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- don't use images for callouts -->
 | 
				
			||||||
 | 
						<xsl:param name="callout.graphics">0</xsl:param>
 | 
				
			||||||
 | 
						<xsl:param name="callout.unicode">1</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Place callout marks at this column in annotated areas -->
 | 
				
			||||||
 | 
						<xsl:param name="callout.defaultcolumn">90</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- MISC -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Placement of titles -->
 | 
				
			||||||
 | 
						<xsl:param name="formal.title.placement">
 | 
				
			||||||
 | 
							figure after
 | 
				
			||||||
 | 
							example after
 | 
				
			||||||
 | 
							equation before
 | 
				
			||||||
 | 
							table before
 | 
				
			||||||
 | 
							procedure before
 | 
				
			||||||
 | 
						</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Format Variable Lists as Blocks (prevents horizontal overflow) -->
 | 
				
			||||||
 | 
						<xsl:param name="variablelist.as.blocks">1</xsl:param>
 | 
				
			||||||
 | 
						<xsl:param name="body.start.indent">0pt</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Remove "Chapter" from the Chapter titles... -->
 | 
				
			||||||
 | 
						<xsl:param name="local.l10n.xml" select="document('')"/>
 | 
				
			||||||
 | 
						<l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
 | 
				
			||||||
 | 
							<l:l10n language="en">
 | 
				
			||||||
 | 
								<l:context name="title-numbered">
 | 
				
			||||||
 | 
									<l:template name="chapter" text="%n. %t"/>
 | 
				
			||||||
 | 
									<l:template name="section" text="%n %t"/>
 | 
				
			||||||
 | 
								</l:context>
 | 
				
			||||||
 | 
								<l:context name="title">
 | 
				
			||||||
 | 
									<l:template name="example" text="Example %n %t"/>
 | 
				
			||||||
 | 
								</l:context>
 | 
				
			||||||
 | 
							</l:l10n>
 | 
				
			||||||
 | 
						</l:i18n>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:param name="ulink.footnotes">true</xsl:param>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- COLORED AND HYPHENATED LINKS -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match="ulink">
 | 
				
			||||||
 | 
							<fo:basic-link external-destination="{@url}"
 | 
				
			||||||
 | 
									xsl:use-attribute-sets="xref.properties"
 | 
				
			||||||
 | 
									text-decoration="underline"
 | 
				
			||||||
 | 
									color="blue">
 | 
				
			||||||
 | 
								<xsl:choose>
 | 
				
			||||||
 | 
									<xsl:when test="count(child::node())=0">
 | 
				
			||||||
 | 
										<xsl:value-of select="@url"/>
 | 
				
			||||||
 | 
									</xsl:when>
 | 
				
			||||||
 | 
									<xsl:otherwise>
 | 
				
			||||||
 | 
										<xsl:apply-templates/>
 | 
				
			||||||
 | 
									</xsl:otherwise>
 | 
				
			||||||
 | 
								</xsl:choose>
 | 
				
			||||||
 | 
							</fo:basic-link>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match="link">
 | 
				
			||||||
 | 
							<fo:basic-link internal-destination="{@linkend}"
 | 
				
			||||||
 | 
									xsl:use-attribute-sets="xref.properties"
 | 
				
			||||||
 | 
									text-decoration="underline"
 | 
				
			||||||
 | 
									color="blue">
 | 
				
			||||||
 | 
								<xsl:choose>
 | 
				
			||||||
 | 
									<xsl:when test="count(child::node())=0">
 | 
				
			||||||
 | 
										<xsl:value-of select="@linkend"/>
 | 
				
			||||||
 | 
									</xsl:when>
 | 
				
			||||||
 | 
									<xsl:otherwise>
 | 
				
			||||||
 | 
										<xsl:apply-templates/>
 | 
				
			||||||
 | 
									</xsl:otherwise>
 | 
				
			||||||
 | 
								</xsl:choose>
 | 
				
			||||||
 | 
							</fo:basic-link>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- admon -->
 | 
				
			||||||
 | 
						<xsl:param name="admon.graphics" select="0"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:attribute-set name="nongraphical.admonition.properties">
 | 
				
			||||||
 | 
							<xsl:attribute name="margin-left">0.1em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="margin-right">2em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="border-left-width">.75pt</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="border-left-style">solid</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="border-left-color">#5c5c4f</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="padding-left">0.5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.optimum">1.5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.minimum">1.5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.maximum">1.5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.optimum">1.5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.minimum">1.5em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-after.maximum">1.5em</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <xsl:attribute-set name="admonition.title.properties">
 | 
				
			||||||
 | 
							<xsl:attribute name="font-size">10pt</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="font-weight">bold</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="hyphenate">false</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="keep-with-next.within-column">always</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="margin-left">0</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:attribute-set name="admonition.properties">
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.optimum">0em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.minimum">0em</xsl:attribute>
 | 
				
			||||||
 | 
							<xsl:attribute name="space-before.maximum">0em</xsl:attribute>
 | 
				
			||||||
 | 
						</xsl:attribute-set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- Asciidoc -->
 | 
				
			||||||
 | 
						<xsl:template match="processing-instruction('asciidoc-br')">
 | 
				
			||||||
 | 
							<fo:block/>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match="processing-instruction('asciidoc-hr')">
 | 
				
			||||||
 | 
							<fo:block space-after="1em">
 | 
				
			||||||
 | 
								<fo:leader leader-pattern="rule" rule-thickness="0.5pt" rule-style="solid" leader-length.minimum="100%"/>
 | 
				
			||||||
 | 
							</fo:block>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <xsl:template match="processing-instruction('asciidoc-pagebreak')">
 | 
				
			||||||
 | 
					    <fo:block break-after='page'/>
 | 
				
			||||||
 | 
					  </xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- SYNTAX HIGHLIGHT -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match='xslthl:keyword' mode="xslthl">
 | 
				
			||||||
 | 
						  <fo:inline font-weight="bold" color="#7F0055"><xsl:apply-templates mode="xslthl"/></fo:inline>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match='xslthl:string' mode="xslthl">
 | 
				
			||||||
 | 
						  <fo:inline font-weight="bold" font-style="italic" color="#2A00FF"><xsl:apply-templates mode="xslthl"/></fo:inline>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match='xslthl:comment' mode="xslthl">
 | 
				
			||||||
 | 
						  <fo:inline font-style="italic" color="#3F5FBF"><xsl:apply-templates mode="xslthl"/></fo:inline>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match='xslthl:tag' mode="xslthl">
 | 
				
			||||||
 | 
						  <fo:inline font-weight="bold" color="#3F7F7F"><xsl:apply-templates mode="xslthl"/></fo:inline>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match='xslthl:attribute' mode="xslthl">
 | 
				
			||||||
 | 
						  <fo:inline font-weight="bold" color="#7F007F"><xsl:apply-templates mode="xslthl"/></fo:inline>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<xsl:template match='xslthl:value' mode="xslthl">
 | 
				
			||||||
 | 
						  <fo:inline font-weight="bold" color="#2A00FF"><xsl:apply-templates mode="xslthl"/></fo:inline>
 | 
				
			||||||
 | 
						</xsl:template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</xsl:stylesheet>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,20 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<xslthl-config>
 | 
				
			||||||
 | 
						<highlighter id="java" file="./xslthl/java-hl.xml" />
 | 
				
			||||||
 | 
						<highlighter id="groovy" file="./xslthl/java-hl.xml" />
 | 
				
			||||||
 | 
						<highlighter id="html" file="./xslthl/html-hl.xml" />
 | 
				
			||||||
 | 
						<highlighter id="ini" file="./xslthl/ini-hl.xml" />
 | 
				
			||||||
 | 
						<highlighter id="php" file="./xslthl/php-hl.xml" />
 | 
				
			||||||
 | 
						<highlighter id="c" file="./xslthl/c-hl.xml" />
 | 
				
			||||||
 | 
						<highlighter id="cpp" file="./xslthl/cpp-hl.xml" />
 | 
				
			||||||
 | 
						<highlighter id="csharp" file="./xslthl/csharp-hl.xml" />
 | 
				
			||||||
 | 
						<highlighter id="python" file="./xslthl/python-hl.xml" />
 | 
				
			||||||
 | 
						<highlighter id="ruby" file="./xslthl/ruby-hl.xml" />
 | 
				
			||||||
 | 
						<highlighter id="perl" file="./xslthl/perl-hl.xml" />
 | 
				
			||||||
 | 
						<highlighter id="javascript" file="./xslthl/javascript-hl.xml" />
 | 
				
			||||||
 | 
						<highlighter id="bash" file="./xslthl/bourne-hl.xml" />
 | 
				
			||||||
 | 
						<highlighter id="css" file="./xslthl/css-hl.xml" />
 | 
				
			||||||
 | 
						<highlighter id="sql" file="./xslthl/sql2003-hl.xml" />
 | 
				
			||||||
 | 
						<highlighter id="asciidoc" file="./xslthl/asciidoc-hl.xml" />
 | 
				
			||||||
 | 
						<namespace prefix="xslthl" uri="http://xslthl.sf.net" />
 | 
				
			||||||
 | 
					</xslthl-config>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,41 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Syntax highlighting definition for AsciiDoc files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<highlighters>
 | 
				
			||||||
 | 
					  <highlighter type="multiline-comment">
 | 
				
			||||||
 | 
					    <start>////</start>
 | 
				
			||||||
 | 
					    <end>////</end>
 | 
				
			||||||
 | 
					  </highlighter>
 | 
				
			||||||
 | 
					  <highlighter type="oneline-comment">
 | 
				
			||||||
 | 
					    <start>//</start>
 | 
				
			||||||
 | 
					    <solitary/>
 | 
				
			||||||
 | 
					  </highlighter>
 | 
				
			||||||
 | 
					  <highlighter type="regex">
 | 
				
			||||||
 | 
					    <pattern>^(={1,6} .+)$</pattern>
 | 
				
			||||||
 | 
					    <style>heading</style>
 | 
				
			||||||
 | 
					    <flags>MULTILINE</flags>
 | 
				
			||||||
 | 
					  </highlighter>
 | 
				
			||||||
 | 
					  <highlighter type="regex">
 | 
				
			||||||
 | 
					    <pattern>^(\.[^\.\s].+)$</pattern>
 | 
				
			||||||
 | 
					    <style>title</style>
 | 
				
			||||||
 | 
					    <flags>MULTILINE</flags>
 | 
				
			||||||
 | 
					  </highlighter>
 | 
				
			||||||
 | 
					  <highlighter type="regex">
 | 
				
			||||||
 | 
					    <pattern>^(:!?\w.*?:)</pattern>
 | 
				
			||||||
 | 
					    <style>attribute</style>
 | 
				
			||||||
 | 
					    <flags>MULTILINE</flags>
 | 
				
			||||||
 | 
					  </highlighter>
 | 
				
			||||||
 | 
					  <highlighter type="regex">
 | 
				
			||||||
 | 
					    <pattern>^(-|\*{1,5}|\d*\.{1,5})(?= .+$)</pattern>
 | 
				
			||||||
 | 
					    <style>bullet</style>
 | 
				
			||||||
 | 
					    <flags>MULTILINE</flags>
 | 
				
			||||||
 | 
					  </highlighter>
 | 
				
			||||||
 | 
					  <highlighter type="regex">
 | 
				
			||||||
 | 
					    <pattern>^(\[.+\])$</pattern>
 | 
				
			||||||
 | 
					    <style>attribute</style>
 | 
				
			||||||
 | 
					    <flags>MULTILINE</flags>
 | 
				
			||||||
 | 
					  </highlighter>
 | 
				
			||||||
 | 
					</highlighters>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,95 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Syntax highlighting definition for SH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					xslthl - XSLT Syntax Highlighting
 | 
				
			||||||
 | 
					http://sourceforge.net/projects/xslthl/
 | 
				
			||||||
 | 
					Copyright (C) 2010 Mathieu Malaterre
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					warranty.  In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					arising from the use of this software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					   claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					   in a product, an acknowledgment in the product documentation would be
 | 
				
			||||||
 | 
					   appreciated but is not required.
 | 
				
			||||||
 | 
					2. Altered source versions must be plainly marked as such, and must not be
 | 
				
			||||||
 | 
					   misrepresented as being the original software.
 | 
				
			||||||
 | 
					3. This notice may not be removed or altered from any source distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<highlighters>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">#</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="heredoc">
 | 
				
			||||||
 | 
							<start><<</start>
 | 
				
			||||||
 | 
							<quote>'</quote>
 | 
				
			||||||
 | 
							<quote>"</quote>
 | 
				
			||||||
 | 
							<flag>-</flag>
 | 
				
			||||||
 | 
							<noWhiteSpace />
 | 
				
			||||||
 | 
							<looseTerminator />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>"</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>'</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
							<spanNewLines />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="hexnumber">
 | 
				
			||||||
 | 
							<prefix>0x</prefix>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="number">
 | 
				
			||||||
 | 
							<point>.</point>
 | 
				
			||||||
 | 
							<pointStarts />
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="keywords">
 | 
				
			||||||
 | 
							<!-- reserved words -->
 | 
				
			||||||
 | 
							<keyword>if</keyword>
 | 
				
			||||||
 | 
							<keyword>then</keyword>
 | 
				
			||||||
 | 
							<keyword>else</keyword>
 | 
				
			||||||
 | 
							<keyword>elif</keyword>
 | 
				
			||||||
 | 
							<keyword>fi</keyword>
 | 
				
			||||||
 | 
							<keyword>case</keyword>
 | 
				
			||||||
 | 
							<keyword>esac</keyword>
 | 
				
			||||||
 | 
							<keyword>for</keyword>
 | 
				
			||||||
 | 
							<keyword>while</keyword>
 | 
				
			||||||
 | 
							<keyword>until</keyword>
 | 
				
			||||||
 | 
							<keyword>do</keyword>
 | 
				
			||||||
 | 
							<keyword>done</keyword>
 | 
				
			||||||
 | 
							<!-- built-ins -->
 | 
				
			||||||
 | 
							<keyword>exec</keyword>
 | 
				
			||||||
 | 
							<keyword>shift</keyword>
 | 
				
			||||||
 | 
							<keyword>exit</keyword>
 | 
				
			||||||
 | 
							<keyword>times</keyword>
 | 
				
			||||||
 | 
							<keyword>break</keyword>
 | 
				
			||||||
 | 
							<keyword>export</keyword>
 | 
				
			||||||
 | 
							<keyword>trap</keyword>
 | 
				
			||||||
 | 
							<keyword>continue</keyword>
 | 
				
			||||||
 | 
							<keyword>readonly</keyword>
 | 
				
			||||||
 | 
							<keyword>wait</keyword>
 | 
				
			||||||
 | 
							<keyword>eval</keyword>
 | 
				
			||||||
 | 
							<keyword>return</keyword>
 | 
				
			||||||
 | 
							<!-- other commands -->
 | 
				
			||||||
 | 
							<keyword>cd</keyword>
 | 
				
			||||||
 | 
							<keyword>echo</keyword>
 | 
				
			||||||
 | 
							<keyword>hash</keyword>
 | 
				
			||||||
 | 
							<keyword>pwd</keyword>
 | 
				
			||||||
 | 
							<keyword>read</keyword>
 | 
				
			||||||
 | 
							<keyword>set</keyword>
 | 
				
			||||||
 | 
							<keyword>test</keyword>
 | 
				
			||||||
 | 
							<keyword>type</keyword>
 | 
				
			||||||
 | 
							<keyword>ulimit</keyword>
 | 
				
			||||||
 | 
							<keyword>umask</keyword>
 | 
				
			||||||
 | 
							<keyword>unset</keyword>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
					</highlighters>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,117 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					Syntax highlighting definition for C
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					xslthl - XSLT Syntax Highlighting
 | 
				
			||||||
 | 
					http://sourceforge.net/projects/xslthl/
 | 
				
			||||||
 | 
					Copyright (C) 2005-2008 Michal Molhanec, Jirka Kosek, Michiel Hendriks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					warranty.  In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					arising from the use of this software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					   claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					   in a product, an acknowledgment in the product documentation would be
 | 
				
			||||||
 | 
					   appreciated but is not required.
 | 
				
			||||||
 | 
					2. Altered source versions must be plainly marked as such, and must not be
 | 
				
			||||||
 | 
					   misrepresented as being the original software.
 | 
				
			||||||
 | 
					3. This notice may not be removed or altered from any source distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Michal Molhanec <mol1111 at users.sourceforge.net>
 | 
				
			||||||
 | 
					Jirka Kosek <kosek at users.sourceforge.net>
 | 
				
			||||||
 | 
					Michiel Hendriks <elmuerte at users.sourceforge.net>
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<highlighters>
 | 
				
			||||||
 | 
						<highlighter type="multiline-comment">
 | 
				
			||||||
 | 
							<start>/**</start>
 | 
				
			||||||
 | 
							<end>*/</end>
 | 
				
			||||||
 | 
							<style>doccomment</style>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">
 | 
				
			||||||
 | 
							<start><![CDATA[/// ]]></start>
 | 
				
			||||||
 | 
							<style>doccomment</style>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="multiline-comment">
 | 
				
			||||||
 | 
							<start>/*</start>
 | 
				
			||||||
 | 
							<end>*/</end>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">//</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">
 | 
				
			||||||
 | 
							<!-- use the online-comment highlighter to detect directives -->
 | 
				
			||||||
 | 
							<start>#</start>
 | 
				
			||||||
 | 
							<lineBreakEscape>\</lineBreakEscape>
 | 
				
			||||||
 | 
							<style>directive</style>
 | 
				
			||||||
 | 
							<solitary />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>"</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>'</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="hexnumber">
 | 
				
			||||||
 | 
							<prefix>0x</prefix>
 | 
				
			||||||
 | 
							<suffix>ul</suffix>
 | 
				
			||||||
 | 
							<suffix>lu</suffix>
 | 
				
			||||||
 | 
							<suffix>u</suffix>
 | 
				
			||||||
 | 
							<suffix>l</suffix>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="number">
 | 
				
			||||||
 | 
							<point>.</point>
 | 
				
			||||||
 | 
							<pointStarts />
 | 
				
			||||||
 | 
							<exponent>e</exponent>
 | 
				
			||||||
 | 
							<suffix>ul</suffix>
 | 
				
			||||||
 | 
							<suffix>lu</suffix>
 | 
				
			||||||
 | 
							<suffix>u</suffix>
 | 
				
			||||||
 | 
							<suffix>f</suffix>
 | 
				
			||||||
 | 
							<suffix>l</suffix>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="keywords">
 | 
				
			||||||
 | 
							<keyword>auto</keyword>
 | 
				
			||||||
 | 
							<keyword>_Bool</keyword>
 | 
				
			||||||
 | 
							<keyword>break</keyword>
 | 
				
			||||||
 | 
							<keyword>case</keyword>
 | 
				
			||||||
 | 
							<keyword>char</keyword>
 | 
				
			||||||
 | 
							<keyword>_Complex</keyword>
 | 
				
			||||||
 | 
							<keyword>const</keyword>
 | 
				
			||||||
 | 
							<keyword>continue</keyword>
 | 
				
			||||||
 | 
							<keyword>default</keyword>
 | 
				
			||||||
 | 
							<keyword>do</keyword>
 | 
				
			||||||
 | 
							<keyword>double</keyword>
 | 
				
			||||||
 | 
							<keyword>else</keyword>
 | 
				
			||||||
 | 
							<keyword>enum</keyword>
 | 
				
			||||||
 | 
							<keyword>extern</keyword>
 | 
				
			||||||
 | 
							<keyword>float</keyword>
 | 
				
			||||||
 | 
							<keyword>for</keyword>
 | 
				
			||||||
 | 
							<keyword>goto</keyword>
 | 
				
			||||||
 | 
							<keyword>if</keyword>
 | 
				
			||||||
 | 
							<keyword>_Imaginary</keyword>
 | 
				
			||||||
 | 
							<keyword>inline</keyword>
 | 
				
			||||||
 | 
							<keyword>int</keyword>
 | 
				
			||||||
 | 
							<keyword>long</keyword>
 | 
				
			||||||
 | 
							<keyword>register</keyword>
 | 
				
			||||||
 | 
							<keyword>restrict</keyword>
 | 
				
			||||||
 | 
							<keyword>return</keyword>
 | 
				
			||||||
 | 
							<keyword>short</keyword>
 | 
				
			||||||
 | 
							<keyword>signed</keyword>
 | 
				
			||||||
 | 
							<keyword>sizeof</keyword>
 | 
				
			||||||
 | 
							<keyword>static</keyword>
 | 
				
			||||||
 | 
							<keyword>struct</keyword>
 | 
				
			||||||
 | 
							<keyword>switch</keyword>
 | 
				
			||||||
 | 
							<keyword>typedef</keyword>
 | 
				
			||||||
 | 
							<keyword>union</keyword>
 | 
				
			||||||
 | 
							<keyword>unsigned</keyword>
 | 
				
			||||||
 | 
							<keyword>void</keyword>
 | 
				
			||||||
 | 
							<keyword>volatile</keyword>
 | 
				
			||||||
 | 
							<keyword>while</keyword>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
					</highlighters>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,151 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Syntax highlighting definition for C++
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					xslthl - XSLT Syntax Highlighting
 | 
				
			||||||
 | 
					http://sourceforge.net/projects/xslthl/
 | 
				
			||||||
 | 
					Copyright (C) 2005-2008 Michal Molhanec, Jirka Kosek, Michiel Hendriks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					warranty.  In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					arising from the use of this software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					   claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					   in a product, an acknowledgment in the product documentation would be
 | 
				
			||||||
 | 
					   appreciated but is not required.
 | 
				
			||||||
 | 
					2. Altered source versions must be plainly marked as such, and must not be
 | 
				
			||||||
 | 
					   misrepresented as being the original software.
 | 
				
			||||||
 | 
					3. This notice may not be removed or altered from any source distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Michal Molhanec <mol1111 at users.sourceforge.net>
 | 
				
			||||||
 | 
					Jirka Kosek <kosek at users.sourceforge.net>
 | 
				
			||||||
 | 
					Michiel Hendriks <elmuerte at users.sourceforge.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<highlighters>
 | 
				
			||||||
 | 
						<highlighter type="multiline-comment">
 | 
				
			||||||
 | 
							<start>/**</start>
 | 
				
			||||||
 | 
							<end>*/</end>
 | 
				
			||||||
 | 
							<style>doccomment</style>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">
 | 
				
			||||||
 | 
							<start><![CDATA[/// ]]></start>
 | 
				
			||||||
 | 
							<style>doccomment</style>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="multiline-comment">
 | 
				
			||||||
 | 
							<start>/*</start>
 | 
				
			||||||
 | 
							<end>*/</end>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">//</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">
 | 
				
			||||||
 | 
							<!-- use the online-comment highlighter to detect directives -->
 | 
				
			||||||
 | 
							<start>#</start>
 | 
				
			||||||
 | 
							<lineBreakEscape>\</lineBreakEscape>
 | 
				
			||||||
 | 
							<style>directive</style>
 | 
				
			||||||
 | 
							<solitary/>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>"</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>'</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="hexnumber">
 | 
				
			||||||
 | 
							<prefix>0x</prefix>
 | 
				
			||||||
 | 
							<suffix>ul</suffix>
 | 
				
			||||||
 | 
							<suffix>lu</suffix>
 | 
				
			||||||
 | 
							<suffix>u</suffix>
 | 
				
			||||||
 | 
							<suffix>l</suffix>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="number">
 | 
				
			||||||
 | 
							<point>.</point>
 | 
				
			||||||
 | 
							<pointStarts />
 | 
				
			||||||
 | 
							<exponent>e</exponent>
 | 
				
			||||||
 | 
							<suffix>ul</suffix>
 | 
				
			||||||
 | 
							<suffix>lu</suffix>
 | 
				
			||||||
 | 
							<suffix>u</suffix>
 | 
				
			||||||
 | 
							<suffix>f</suffix>
 | 
				
			||||||
 | 
							<suffix>l</suffix>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="keywords">
 | 
				
			||||||
 | 
							<!-- C keywords -->
 | 
				
			||||||
 | 
							<keyword>auto</keyword>
 | 
				
			||||||
 | 
							<keyword>_Bool</keyword>
 | 
				
			||||||
 | 
							<keyword>break</keyword>
 | 
				
			||||||
 | 
							<keyword>case</keyword>
 | 
				
			||||||
 | 
							<keyword>char</keyword>
 | 
				
			||||||
 | 
							<keyword>_Complex</keyword>
 | 
				
			||||||
 | 
							<keyword>const</keyword>
 | 
				
			||||||
 | 
							<keyword>continue</keyword>
 | 
				
			||||||
 | 
							<keyword>default</keyword>
 | 
				
			||||||
 | 
							<keyword>do</keyword>
 | 
				
			||||||
 | 
							<keyword>double</keyword>
 | 
				
			||||||
 | 
							<keyword>else</keyword>
 | 
				
			||||||
 | 
							<keyword>enum</keyword>
 | 
				
			||||||
 | 
							<keyword>extern</keyword>
 | 
				
			||||||
 | 
							<keyword>float</keyword>
 | 
				
			||||||
 | 
							<keyword>for</keyword>
 | 
				
			||||||
 | 
							<keyword>goto</keyword>
 | 
				
			||||||
 | 
							<keyword>if</keyword>
 | 
				
			||||||
 | 
							<keyword>_Imaginary</keyword>
 | 
				
			||||||
 | 
							<keyword>inline</keyword>
 | 
				
			||||||
 | 
							<keyword>int</keyword>
 | 
				
			||||||
 | 
							<keyword>long</keyword>
 | 
				
			||||||
 | 
							<keyword>register</keyword>
 | 
				
			||||||
 | 
							<keyword>restrict</keyword>
 | 
				
			||||||
 | 
							<keyword>return</keyword>
 | 
				
			||||||
 | 
							<keyword>short</keyword>
 | 
				
			||||||
 | 
							<keyword>signed</keyword>
 | 
				
			||||||
 | 
							<keyword>sizeof</keyword>
 | 
				
			||||||
 | 
							<keyword>static</keyword>
 | 
				
			||||||
 | 
							<keyword>struct</keyword>
 | 
				
			||||||
 | 
							<keyword>switch</keyword>
 | 
				
			||||||
 | 
							<keyword>typedef</keyword>
 | 
				
			||||||
 | 
							<keyword>union</keyword>
 | 
				
			||||||
 | 
							<keyword>unsigned</keyword>
 | 
				
			||||||
 | 
							<keyword>void</keyword>
 | 
				
			||||||
 | 
							<keyword>volatile</keyword>
 | 
				
			||||||
 | 
							<keyword>while</keyword>
 | 
				
			||||||
 | 
							<!-- C++ keywords -->
 | 
				
			||||||
 | 
							<keyword>asm</keyword>
 | 
				
			||||||
 | 
							<keyword>dynamic_cast</keyword>
 | 
				
			||||||
 | 
							<keyword>namespace</keyword>
 | 
				
			||||||
 | 
							<keyword>reinterpret_cast</keyword>
 | 
				
			||||||
 | 
							<keyword>try</keyword>
 | 
				
			||||||
 | 
							<keyword>bool</keyword>
 | 
				
			||||||
 | 
							<keyword>explicit</keyword>
 | 
				
			||||||
 | 
							<keyword>new</keyword>
 | 
				
			||||||
 | 
							<keyword>static_cast</keyword>
 | 
				
			||||||
 | 
							<keyword>typeid</keyword>
 | 
				
			||||||
 | 
							<keyword>catch</keyword>
 | 
				
			||||||
 | 
							<keyword>false</keyword>
 | 
				
			||||||
 | 
							<keyword>operator</keyword>
 | 
				
			||||||
 | 
							<keyword>template</keyword>
 | 
				
			||||||
 | 
							<keyword>typename</keyword>
 | 
				
			||||||
 | 
							<keyword>class</keyword>
 | 
				
			||||||
 | 
							<keyword>friend</keyword>
 | 
				
			||||||
 | 
							<keyword>private</keyword>
 | 
				
			||||||
 | 
							<keyword>this</keyword>
 | 
				
			||||||
 | 
							<keyword>using</keyword>
 | 
				
			||||||
 | 
							<keyword>const_cast</keyword>
 | 
				
			||||||
 | 
							<keyword>inline</keyword>
 | 
				
			||||||
 | 
							<keyword>public</keyword>
 | 
				
			||||||
 | 
							<keyword>throw</keyword>
 | 
				
			||||||
 | 
							<keyword>virtual</keyword>
 | 
				
			||||||
 | 
							<keyword>delete</keyword>
 | 
				
			||||||
 | 
							<keyword>mutable</keyword>
 | 
				
			||||||
 | 
							<keyword>protected</keyword>
 | 
				
			||||||
 | 
							<keyword>true</keyword>
 | 
				
			||||||
 | 
							<keyword>wchar_t</keyword>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
					</highlighters>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,194 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Syntax highlighting definition for C#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					xslthl - XSLT Syntax Highlighting
 | 
				
			||||||
 | 
					http://sourceforge.net/projects/xslthl/
 | 
				
			||||||
 | 
					Copyright (C) 2005-2008 Michal Molhanec, Jirka Kosek, Michiel Hendriks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					warranty.  In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					arising from the use of this software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					   claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					   in a product, an acknowledgment in the product documentation would be
 | 
				
			||||||
 | 
					   appreciated but is not required.
 | 
				
			||||||
 | 
					2. Altered source versions must be plainly marked as such, and must not be
 | 
				
			||||||
 | 
					   misrepresented as being the original software.
 | 
				
			||||||
 | 
					3. This notice may not be removed or altered from any source distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Michal Molhanec <mol1111 at users.sourceforge.net>
 | 
				
			||||||
 | 
					Jirka Kosek <kosek at users.sourceforge.net>
 | 
				
			||||||
 | 
					Michiel Hendriks <elmuerte at users.sourceforge.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<highlighters>
 | 
				
			||||||
 | 
						<highlighter type="multiline-comment">
 | 
				
			||||||
 | 
							<start>/**</start>
 | 
				
			||||||
 | 
							<end>*/</end>
 | 
				
			||||||
 | 
							<style>doccomment</style>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">
 | 
				
			||||||
 | 
							<start>///</start>
 | 
				
			||||||
 | 
							<style>doccomment</style>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="multiline-comment">
 | 
				
			||||||
 | 
							<start>/*</start>
 | 
				
			||||||
 | 
							<end>*/</end>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">//</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="annotation">
 | 
				
			||||||
 | 
							<!-- annotations are called (custom) "attributes" in .NET -->
 | 
				
			||||||
 | 
							<start>[</start>
 | 
				
			||||||
 | 
							<end>]</end>
 | 
				
			||||||
 | 
							<valueStart>(</valueStart>
 | 
				
			||||||
 | 
							<valueEnd>)</valueEnd>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">
 | 
				
			||||||
 | 
							<!-- C# supports a couple of directives -->
 | 
				
			||||||
 | 
							<start>#</start>
 | 
				
			||||||
 | 
							<lineBreakEscape>\</lineBreakEscape>
 | 
				
			||||||
 | 
							<style>directive</style>
 | 
				
			||||||
 | 
							<solitary/>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<!-- strings starting with an "@" can span multiple lines -->
 | 
				
			||||||
 | 
							<string>@"</string>
 | 
				
			||||||
 | 
							<endString>"</endString>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
							<spanNewLines />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>"</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>'</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="hexnumber">
 | 
				
			||||||
 | 
							<prefix>0x</prefix>
 | 
				
			||||||
 | 
							<suffix>ul</suffix>
 | 
				
			||||||
 | 
							<suffix>lu</suffix>
 | 
				
			||||||
 | 
							<suffix>u</suffix>
 | 
				
			||||||
 | 
							<suffix>l</suffix>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="number">
 | 
				
			||||||
 | 
							<point>.</point>
 | 
				
			||||||
 | 
							<pointStarts />
 | 
				
			||||||
 | 
							<exponent>e</exponent>
 | 
				
			||||||
 | 
							<suffix>ul</suffix>
 | 
				
			||||||
 | 
							<suffix>lu</suffix>
 | 
				
			||||||
 | 
							<suffix>u</suffix>
 | 
				
			||||||
 | 
							<suffix>f</suffix>
 | 
				
			||||||
 | 
							<suffix>d</suffix>
 | 
				
			||||||
 | 
							<suffix>m</suffix>
 | 
				
			||||||
 | 
							<suffix>l</suffix>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="keywords">
 | 
				
			||||||
 | 
							<keyword>abstract</keyword>
 | 
				
			||||||
 | 
							<keyword>as</keyword>
 | 
				
			||||||
 | 
							<keyword>base</keyword>
 | 
				
			||||||
 | 
							<keyword>bool</keyword>
 | 
				
			||||||
 | 
							<keyword>break</keyword>
 | 
				
			||||||
 | 
							<keyword>byte</keyword>
 | 
				
			||||||
 | 
							<keyword>case</keyword>
 | 
				
			||||||
 | 
							<keyword>catch</keyword>
 | 
				
			||||||
 | 
							<keyword>char</keyword>
 | 
				
			||||||
 | 
							<keyword>checked</keyword>
 | 
				
			||||||
 | 
							<keyword>class</keyword>
 | 
				
			||||||
 | 
							<keyword>const</keyword>
 | 
				
			||||||
 | 
							<keyword>continue</keyword>
 | 
				
			||||||
 | 
							<keyword>decimal</keyword>
 | 
				
			||||||
 | 
							<keyword>default</keyword>
 | 
				
			||||||
 | 
							<keyword>delegate</keyword>
 | 
				
			||||||
 | 
							<keyword>do</keyword>
 | 
				
			||||||
 | 
							<keyword>double</keyword>
 | 
				
			||||||
 | 
							<keyword>else</keyword>
 | 
				
			||||||
 | 
							<keyword>enum</keyword>
 | 
				
			||||||
 | 
							<keyword>event</keyword>
 | 
				
			||||||
 | 
							<keyword>explicit</keyword>
 | 
				
			||||||
 | 
							<keyword>extern</keyword>
 | 
				
			||||||
 | 
							<keyword>false</keyword>
 | 
				
			||||||
 | 
							<keyword>finally</keyword>
 | 
				
			||||||
 | 
							<keyword>fixed</keyword>
 | 
				
			||||||
 | 
							<keyword>float</keyword>
 | 
				
			||||||
 | 
							<keyword>for</keyword>
 | 
				
			||||||
 | 
							<keyword>foreach</keyword>
 | 
				
			||||||
 | 
							<keyword>goto</keyword>
 | 
				
			||||||
 | 
							<keyword>if</keyword>
 | 
				
			||||||
 | 
							<keyword>implicit</keyword>
 | 
				
			||||||
 | 
							<keyword>in</keyword>
 | 
				
			||||||
 | 
							<keyword>int</keyword>
 | 
				
			||||||
 | 
							<keyword>interface</keyword>
 | 
				
			||||||
 | 
							<keyword>internal</keyword>
 | 
				
			||||||
 | 
							<keyword>is</keyword>
 | 
				
			||||||
 | 
							<keyword>lock</keyword>
 | 
				
			||||||
 | 
							<keyword>long</keyword>
 | 
				
			||||||
 | 
							<keyword>namespace</keyword>
 | 
				
			||||||
 | 
							<keyword>new</keyword>
 | 
				
			||||||
 | 
							<keyword>null</keyword>
 | 
				
			||||||
 | 
							<keyword>object</keyword>
 | 
				
			||||||
 | 
							<keyword>operator</keyword>
 | 
				
			||||||
 | 
							<keyword>out</keyword>
 | 
				
			||||||
 | 
							<keyword>override</keyword>
 | 
				
			||||||
 | 
							<keyword>params</keyword>
 | 
				
			||||||
 | 
							<keyword>private</keyword>
 | 
				
			||||||
 | 
							<keyword>protected</keyword>
 | 
				
			||||||
 | 
							<keyword>public</keyword>
 | 
				
			||||||
 | 
							<keyword>readonly</keyword>
 | 
				
			||||||
 | 
							<keyword>ref</keyword>
 | 
				
			||||||
 | 
							<keyword>return</keyword>
 | 
				
			||||||
 | 
							<keyword>sbyte</keyword>
 | 
				
			||||||
 | 
							<keyword>sealed</keyword>
 | 
				
			||||||
 | 
							<keyword>short</keyword>
 | 
				
			||||||
 | 
							<keyword>sizeof</keyword>
 | 
				
			||||||
 | 
							<keyword>stackalloc</keyword>
 | 
				
			||||||
 | 
							<keyword>static</keyword>
 | 
				
			||||||
 | 
							<keyword>string</keyword>
 | 
				
			||||||
 | 
							<keyword>struct</keyword>
 | 
				
			||||||
 | 
							<keyword>switch</keyword>
 | 
				
			||||||
 | 
							<keyword>this</keyword>
 | 
				
			||||||
 | 
							<keyword>throw</keyword>
 | 
				
			||||||
 | 
							<keyword>true</keyword>
 | 
				
			||||||
 | 
							<keyword>try</keyword>
 | 
				
			||||||
 | 
							<keyword>typeof</keyword>
 | 
				
			||||||
 | 
							<keyword>uint</keyword>
 | 
				
			||||||
 | 
							<keyword>ulong</keyword>
 | 
				
			||||||
 | 
							<keyword>unchecked</keyword>
 | 
				
			||||||
 | 
							<keyword>unsafe</keyword>
 | 
				
			||||||
 | 
							<keyword>ushort</keyword>
 | 
				
			||||||
 | 
							<keyword>using</keyword>
 | 
				
			||||||
 | 
							<keyword>virtual</keyword>
 | 
				
			||||||
 | 
							<keyword>void</keyword>
 | 
				
			||||||
 | 
							<keyword>volatile</keyword>
 | 
				
			||||||
 | 
							<keyword>while</keyword>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="keywords">
 | 
				
			||||||
 | 
							<!-- special words, not really keywords -->
 | 
				
			||||||
 | 
							<keyword>add</keyword>
 | 
				
			||||||
 | 
							<keyword>alias</keyword>
 | 
				
			||||||
 | 
							<keyword>from</keyword>
 | 
				
			||||||
 | 
							<keyword>get</keyword>
 | 
				
			||||||
 | 
							<keyword>global</keyword>
 | 
				
			||||||
 | 
							<keyword>group</keyword>
 | 
				
			||||||
 | 
							<keyword>into</keyword>
 | 
				
			||||||
 | 
							<keyword>join</keyword>
 | 
				
			||||||
 | 
							<keyword>orderby</keyword>
 | 
				
			||||||
 | 
							<keyword>partial</keyword>
 | 
				
			||||||
 | 
							<keyword>remove</keyword>
 | 
				
			||||||
 | 
							<keyword>select</keyword>
 | 
				
			||||||
 | 
							<keyword>set</keyword>
 | 
				
			||||||
 | 
							<keyword>value</keyword>
 | 
				
			||||||
 | 
							<keyword>where</keyword>
 | 
				
			||||||
 | 
							<keyword>yield</keyword>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
					</highlighters>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,176 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Syntax highlighting definition for CSS files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					xslthl - XSLT Syntax Highlighting
 | 
				
			||||||
 | 
					http://sourceforge.net/projects/xslthl/
 | 
				
			||||||
 | 
					Copyright (C) 2011-2012 Martin Hujer, Michiel Hendriks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					warranty.  In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					arising from the use of this software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					   claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					   in a product, an acknowledgment in the product documentation would be
 | 
				
			||||||
 | 
					   appreciated but is not required.
 | 
				
			||||||
 | 
					2. Altered source versions must be plainly marked as such, and must not be
 | 
				
			||||||
 | 
					   misrepresented as being the original software.
 | 
				
			||||||
 | 
					3. This notice may not be removed or altered from any source distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Martin Hujer <mhujer at users.sourceforge.net>
 | 
				
			||||||
 | 
					Michiel Hendriks <elmuerte at users.sourceforge.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Reference: http://www.w3.org/TR/CSS21/propidx.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<highlighters>
 | 
				
			||||||
 | 
					    <highlighter type="multiline-comment">
 | 
				
			||||||
 | 
					        <start>/*</start>
 | 
				
			||||||
 | 
					        <end>*/</end>
 | 
				
			||||||
 | 
					    </highlighter>
 | 
				
			||||||
 | 
					    <highlighter type="string">
 | 
				
			||||||
 | 
							<string>"</string>
 | 
				
			||||||
 | 
					        <escape>\</escape>
 | 
				
			||||||
 | 
					        <spanNewLines/>
 | 
				
			||||||
 | 
					    </highlighter>
 | 
				
			||||||
 | 
					    <highlighter type="string">
 | 
				
			||||||
 | 
							<string>'</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
					        <spanNewLines/>
 | 
				
			||||||
 | 
					    </highlighter>
 | 
				
			||||||
 | 
					    <highlighter type="number">
 | 
				
			||||||
 | 
					        <point>.</point>
 | 
				
			||||||
 | 
					        <pointStarts />
 | 
				
			||||||
 | 
					    </highlighter>
 | 
				
			||||||
 | 
					    <highlighter type="word">
 | 
				
			||||||
 | 
					    	<word>@charset</word>
 | 
				
			||||||
 | 
					    	<word>@import</word>
 | 
				
			||||||
 | 
					    	<word>@media</word>
 | 
				
			||||||
 | 
					    	<word>@page</word>
 | 
				
			||||||
 | 
					    	<style>directive</style>
 | 
				
			||||||
 | 
					    </highlighter>
 | 
				
			||||||
 | 
					    <highlighter type="keywords">
 | 
				
			||||||
 | 
					        <partChars>-</partChars>
 | 
				
			||||||
 | 
					        <keyword>azimuth</keyword>
 | 
				
			||||||
 | 
					        <keyword>background-attachment</keyword>
 | 
				
			||||||
 | 
					        <keyword>background-color</keyword>
 | 
				
			||||||
 | 
					        <keyword>background-image</keyword>
 | 
				
			||||||
 | 
					        <keyword>background-position</keyword>
 | 
				
			||||||
 | 
					        <keyword>background-repeat</keyword>
 | 
				
			||||||
 | 
					        <keyword>background</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-collapse</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-color</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-spacing</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-style</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-top</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-right</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-bottom</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-left</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-top-color</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-right-color</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-bottom-color</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-left-color</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-top-style</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-right-style</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-bottom-style</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-left-style</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-top-width</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-right-width</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-bottom-width</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-left-width</keyword>
 | 
				
			||||||
 | 
					        <keyword>border-width</keyword>
 | 
				
			||||||
 | 
					        <keyword>border</keyword>
 | 
				
			||||||
 | 
					        <keyword>bottom</keyword>
 | 
				
			||||||
 | 
					        <keyword>caption-side</keyword>
 | 
				
			||||||
 | 
					        <keyword>clear</keyword>
 | 
				
			||||||
 | 
					        <keyword>clip</keyword>
 | 
				
			||||||
 | 
					        <keyword>color</keyword>
 | 
				
			||||||
 | 
					        <keyword>content</keyword>
 | 
				
			||||||
 | 
					        <keyword>counter-increment</keyword>
 | 
				
			||||||
 | 
					        <keyword>counter-reset</keyword>
 | 
				
			||||||
 | 
					        <keyword>cue-after</keyword>
 | 
				
			||||||
 | 
					        <keyword>cue-before</keyword>
 | 
				
			||||||
 | 
					        <keyword>cue</keyword>
 | 
				
			||||||
 | 
					        <keyword>cursor</keyword>
 | 
				
			||||||
 | 
					        <keyword>direction</keyword>
 | 
				
			||||||
 | 
					        <keyword>display</keyword>
 | 
				
			||||||
 | 
					        <keyword>elevation</keyword>
 | 
				
			||||||
 | 
					        <keyword>empty-cells</keyword>
 | 
				
			||||||
 | 
					        <keyword>float</keyword>
 | 
				
			||||||
 | 
					        <keyword>font-family</keyword>
 | 
				
			||||||
 | 
					        <keyword>font-size</keyword>
 | 
				
			||||||
 | 
					        <keyword>font-style</keyword>
 | 
				
			||||||
 | 
					        <keyword>font-variant</keyword>
 | 
				
			||||||
 | 
					        <keyword>font-weight</keyword>
 | 
				
			||||||
 | 
					        <keyword>font</keyword>
 | 
				
			||||||
 | 
					        <keyword>height</keyword>
 | 
				
			||||||
 | 
					        <keyword>left</keyword>
 | 
				
			||||||
 | 
					        <keyword>letter-spacing</keyword>
 | 
				
			||||||
 | 
					        <keyword>line-height</keyword>
 | 
				
			||||||
 | 
					        <keyword>list-style-image</keyword>
 | 
				
			||||||
 | 
					        <keyword>list-style-position</keyword>
 | 
				
			||||||
 | 
					        <keyword>list-style-type</keyword>
 | 
				
			||||||
 | 
					        <keyword>list-style</keyword>
 | 
				
			||||||
 | 
					        <keyword>margin-right</keyword>
 | 
				
			||||||
 | 
					        <keyword>margin-left</keyword>
 | 
				
			||||||
 | 
					        <keyword>margin-top</keyword>
 | 
				
			||||||
 | 
					        <keyword>margin-bottom</keyword>
 | 
				
			||||||
 | 
					        <keyword>margin</keyword>
 | 
				
			||||||
 | 
					        <keyword>max-height</keyword>
 | 
				
			||||||
 | 
					        <keyword>max-width</keyword>
 | 
				
			||||||
 | 
					        <keyword>min-height</keyword>
 | 
				
			||||||
 | 
					        <keyword>min-width</keyword>
 | 
				
			||||||
 | 
					        <keyword>orphans</keyword>
 | 
				
			||||||
 | 
					        <keyword>outline-color</keyword>
 | 
				
			||||||
 | 
					        <keyword>outline-style</keyword>
 | 
				
			||||||
 | 
					        <keyword>outline-width</keyword>
 | 
				
			||||||
 | 
					        <keyword>outline</keyword>
 | 
				
			||||||
 | 
					        <keyword>overflow</keyword>
 | 
				
			||||||
 | 
					        <keyword>padding-top</keyword>
 | 
				
			||||||
 | 
					        <keyword>padding-right</keyword>
 | 
				
			||||||
 | 
					        <keyword>padding-bottom</keyword>
 | 
				
			||||||
 | 
					        <keyword>padding-left</keyword>
 | 
				
			||||||
 | 
					        <keyword>padding</keyword>
 | 
				
			||||||
 | 
					        <keyword>page-break-after</keyword>
 | 
				
			||||||
 | 
					        <keyword>page-break-before</keyword>
 | 
				
			||||||
 | 
					        <keyword>page-break-inside</keyword>
 | 
				
			||||||
 | 
					        <keyword>pause-after</keyword>
 | 
				
			||||||
 | 
					        <keyword>pause-before</keyword>
 | 
				
			||||||
 | 
					        <keyword>pause</keyword>
 | 
				
			||||||
 | 
					        <keyword>pitch-range</keyword>
 | 
				
			||||||
 | 
					        <keyword>pitch</keyword>
 | 
				
			||||||
 | 
					        <keyword>play-during</keyword>
 | 
				
			||||||
 | 
					        <keyword>position</keyword>
 | 
				
			||||||
 | 
					        <keyword>quotes</keyword>
 | 
				
			||||||
 | 
					        <keyword>richness</keyword>
 | 
				
			||||||
 | 
					        <keyword>right</keyword>
 | 
				
			||||||
 | 
					        <keyword>speak-header</keyword>
 | 
				
			||||||
 | 
					        <keyword>speak-numeral</keyword>
 | 
				
			||||||
 | 
					        <keyword>speak-punctuation</keyword>
 | 
				
			||||||
 | 
					        <keyword>speak</keyword>
 | 
				
			||||||
 | 
					        <keyword>speech-rate</keyword>
 | 
				
			||||||
 | 
					        <keyword>stress</keyword>
 | 
				
			||||||
 | 
					        <keyword>table-layout</keyword>
 | 
				
			||||||
 | 
					        <keyword>text-align</keyword>
 | 
				
			||||||
 | 
					        <keyword>text-decoration</keyword>
 | 
				
			||||||
 | 
					        <keyword>text-indent</keyword>
 | 
				
			||||||
 | 
					        <keyword>text-transform</keyword>
 | 
				
			||||||
 | 
					        <keyword>top</keyword>
 | 
				
			||||||
 | 
					        <keyword>unicode-bidi</keyword>
 | 
				
			||||||
 | 
					        <keyword>vertical-align</keyword>
 | 
				
			||||||
 | 
					        <keyword>visibility</keyword>
 | 
				
			||||||
 | 
					        <keyword>voice-family</keyword>
 | 
				
			||||||
 | 
					        <keyword>volume</keyword>
 | 
				
			||||||
 | 
					        <keyword>white-space</keyword>
 | 
				
			||||||
 | 
					        <keyword>widows</keyword>
 | 
				
			||||||
 | 
					        <keyword>width</keyword>
 | 
				
			||||||
 | 
					        <keyword>word-spacing</keyword>
 | 
				
			||||||
 | 
					        <keyword>z-index</keyword>
 | 
				
			||||||
 | 
					    </highlighter>
 | 
				
			||||||
 | 
					</highlighters>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,122 @@
 | 
				
			||||||
 | 
					<?xml version='1.0'?>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Bakalarska prace: Zvyraznovani syntaxe v XSLT
 | 
				
			||||||
 | 
					  Michal Molhanec 2005
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  myxml-hl.xml - konfigurace zvyraznovace XML, ktera zvlast zvyrazni
 | 
				
			||||||
 | 
					                 HTML elementy a XSL elementy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  This file has been customized for the Asciidoctor project (http://asciidoctor.org).
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<highlighters>
 | 
				
			||||||
 | 
					  <highlighter type="xml">
 | 
				
			||||||
 | 
					    <elementSet>
 | 
				
			||||||
 | 
					      <style>htmltag</style>
 | 
				
			||||||
 | 
					      <element>a</element>
 | 
				
			||||||
 | 
					      <element>abbr</element>
 | 
				
			||||||
 | 
					      <element>address</element>
 | 
				
			||||||
 | 
					      <element>area</element>
 | 
				
			||||||
 | 
					      <element>article</element>
 | 
				
			||||||
 | 
					      <element>aside</element>
 | 
				
			||||||
 | 
					      <element>audio</element>
 | 
				
			||||||
 | 
					      <element>b</element>
 | 
				
			||||||
 | 
					      <element>base</element>
 | 
				
			||||||
 | 
					      <element>bdi</element>
 | 
				
			||||||
 | 
					      <element>blockquote</element>
 | 
				
			||||||
 | 
					      <element>body</element>
 | 
				
			||||||
 | 
					      <element>br</element>
 | 
				
			||||||
 | 
					      <element>button</element>
 | 
				
			||||||
 | 
					      <element>caption</element>
 | 
				
			||||||
 | 
					      <element>canvas</element>
 | 
				
			||||||
 | 
					      <element>cite</element>
 | 
				
			||||||
 | 
					      <element>code</element>
 | 
				
			||||||
 | 
					      <element>command</element>
 | 
				
			||||||
 | 
					      <element>col</element>
 | 
				
			||||||
 | 
					      <element>colgroup</element>
 | 
				
			||||||
 | 
					      <element>dd</element>
 | 
				
			||||||
 | 
					      <element>del</element>
 | 
				
			||||||
 | 
					      <element>dialog</element>
 | 
				
			||||||
 | 
					      <element>div</element>
 | 
				
			||||||
 | 
					      <element>dl</element>
 | 
				
			||||||
 | 
					      <element>dt</element>
 | 
				
			||||||
 | 
					      <element>em</element>
 | 
				
			||||||
 | 
					      <element>embed</element>
 | 
				
			||||||
 | 
					      <element>fieldset</element>
 | 
				
			||||||
 | 
					      <element>figcaption</element>
 | 
				
			||||||
 | 
					      <element>figure</element>
 | 
				
			||||||
 | 
					      <element>font</element>
 | 
				
			||||||
 | 
					      <element>form</element>
 | 
				
			||||||
 | 
					      <element>footer</element>
 | 
				
			||||||
 | 
					      <element>h1</element>
 | 
				
			||||||
 | 
					      <element>h2</element>
 | 
				
			||||||
 | 
					      <element>h3</element>
 | 
				
			||||||
 | 
					      <element>h4</element>
 | 
				
			||||||
 | 
					      <element>h5</element>
 | 
				
			||||||
 | 
					      <element>h6</element>
 | 
				
			||||||
 | 
					      <element>head</element>
 | 
				
			||||||
 | 
					      <element>header</element>
 | 
				
			||||||
 | 
					      <element>hr</element>
 | 
				
			||||||
 | 
					      <element>html</element>
 | 
				
			||||||
 | 
					      <element>i</element>
 | 
				
			||||||
 | 
					      <element>iframe</element>
 | 
				
			||||||
 | 
					      <element>img</element>
 | 
				
			||||||
 | 
					      <element>input</element>
 | 
				
			||||||
 | 
					      <element>ins</element>
 | 
				
			||||||
 | 
					      <element>kbd</element>
 | 
				
			||||||
 | 
					      <element>label</element>
 | 
				
			||||||
 | 
					      <element>legend</element>
 | 
				
			||||||
 | 
					      <element>li</element>
 | 
				
			||||||
 | 
					      <element>link</element>
 | 
				
			||||||
 | 
					      <element>map</element>
 | 
				
			||||||
 | 
					      <element>mark</element>
 | 
				
			||||||
 | 
					      <element>menu</element>
 | 
				
			||||||
 | 
					      <element>menu</element>
 | 
				
			||||||
 | 
					      <element>meta</element>
 | 
				
			||||||
 | 
					      <element>nav</element>
 | 
				
			||||||
 | 
					      <element>noscript</element>
 | 
				
			||||||
 | 
					      <element>object</element>
 | 
				
			||||||
 | 
					      <element>ol</element>
 | 
				
			||||||
 | 
					      <element>optgroup</element>
 | 
				
			||||||
 | 
					      <element>option</element>
 | 
				
			||||||
 | 
					      <element>p</element>
 | 
				
			||||||
 | 
					      <element>param</element>
 | 
				
			||||||
 | 
					      <element>pre</element>
 | 
				
			||||||
 | 
					      <element>q</element>
 | 
				
			||||||
 | 
					      <element>samp</element>
 | 
				
			||||||
 | 
					      <element>script</element>
 | 
				
			||||||
 | 
					      <element>section</element>
 | 
				
			||||||
 | 
					      <element>select</element>
 | 
				
			||||||
 | 
					      <element>small</element>
 | 
				
			||||||
 | 
					      <element>source</element>
 | 
				
			||||||
 | 
					      <element>span</element>
 | 
				
			||||||
 | 
					      <element>strong</element>
 | 
				
			||||||
 | 
					      <element>style</element>
 | 
				
			||||||
 | 
					      <element>sub</element>
 | 
				
			||||||
 | 
					      <element>summary</element>
 | 
				
			||||||
 | 
					      <element>sup</element>
 | 
				
			||||||
 | 
					      <element>table</element>
 | 
				
			||||||
 | 
					      <element>tbody</element>
 | 
				
			||||||
 | 
					      <element>td</element>
 | 
				
			||||||
 | 
					      <element>textarea</element>
 | 
				
			||||||
 | 
					      <element>tfoot</element>
 | 
				
			||||||
 | 
					      <element>th</element>
 | 
				
			||||||
 | 
					      <element>thead</element>
 | 
				
			||||||
 | 
					      <element>time</element>
 | 
				
			||||||
 | 
					      <element>title</element>
 | 
				
			||||||
 | 
					      <element>tr</element>
 | 
				
			||||||
 | 
					      <element>track</element>
 | 
				
			||||||
 | 
					      <element>u</element>
 | 
				
			||||||
 | 
					      <element>ul</element>
 | 
				
			||||||
 | 
					      <element>var</element>
 | 
				
			||||||
 | 
					      <element>video</element>
 | 
				
			||||||
 | 
					      <element>wbr</element>
 | 
				
			||||||
 | 
					      <element>xmp</element>
 | 
				
			||||||
 | 
					      <ignoreCase/>
 | 
				
			||||||
 | 
					    </elementSet>
 | 
				
			||||||
 | 
					    <elementPrefix>
 | 
				
			||||||
 | 
					      <style>namespace</style>
 | 
				
			||||||
 | 
					      <prefix>xsl:</prefix>
 | 
				
			||||||
 | 
					    </elementPrefix>
 | 
				
			||||||
 | 
					  </highlighter>
 | 
				
			||||||
 | 
					</highlighters>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,45 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Syntax highlighting definition for ini files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					xslthl - XSLT Syntax Highlighting
 | 
				
			||||||
 | 
					http://sourceforge.net/projects/xslthl/
 | 
				
			||||||
 | 
					Copyright (C) 2005-2008 Michal Molhanec, Jirka Kosek, Michiel Hendriks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					warranty.  In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					arising from the use of this software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					   claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					   in a product, an acknowledgment in the product documentation would be
 | 
				
			||||||
 | 
					   appreciated but is not required.
 | 
				
			||||||
 | 
					2. Altered source versions must be plainly marked as such, and must not be
 | 
				
			||||||
 | 
					   misrepresented as being the original software.
 | 
				
			||||||
 | 
					3. This notice may not be removed or altered from any source distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Michal Molhanec <mol1111 at users.sourceforge.net>
 | 
				
			||||||
 | 
					Jirka Kosek <kosek at users.sourceforge.net>
 | 
				
			||||||
 | 
					Michiel Hendriks <elmuerte at users.sourceforge.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<highlighters>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">;</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="regex">
 | 
				
			||||||
 | 
							<!-- ini sections -->
 | 
				
			||||||
 | 
							<pattern>^(\[.+\]\s*)$</pattern>
 | 
				
			||||||
 | 
							<style>keyword</style>
 | 
				
			||||||
 | 
							<flags>MULTILINE</flags>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="regex">
 | 
				
			||||||
 | 
							<!-- the keys in an ini section -->
 | 
				
			||||||
 | 
							<pattern>^(.+)(?==)</pattern>
 | 
				
			||||||
 | 
							<style>attribute</style>
 | 
				
			||||||
 | 
							<flags>MULTILINE</flags>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
					</highlighters>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,117 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Syntax highlighting definition for Java
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					xslthl - XSLT Syntax Highlighting
 | 
				
			||||||
 | 
					http://sourceforge.net/projects/xslthl/
 | 
				
			||||||
 | 
					Copyright (C) 2005-2008 Michal Molhanec, Jirka Kosek, Michiel Hendriks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					warranty.  In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					arising from the use of this software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					   claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					   in a product, an acknowledgment in the product documentation would be
 | 
				
			||||||
 | 
					   appreciated but is not required.
 | 
				
			||||||
 | 
					2. Altered source versions must be plainly marked as such, and must not be
 | 
				
			||||||
 | 
					   misrepresented as being the original software.
 | 
				
			||||||
 | 
					3. This notice may not be removed or altered from any source distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Michal Molhanec <mol1111 at users.sourceforge.net>
 | 
				
			||||||
 | 
					Jirka Kosek <kosek at users.sourceforge.net>
 | 
				
			||||||
 | 
					Michiel Hendriks <elmuerte at users.sourceforge.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<highlighters>
 | 
				
			||||||
 | 
						<highlighter type="multiline-comment">
 | 
				
			||||||
 | 
							<start>/**</start>
 | 
				
			||||||
 | 
							<end>*/</end>
 | 
				
			||||||
 | 
							<style>doccomment</style>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="multiline-comment">
 | 
				
			||||||
 | 
							<start>/*</start>
 | 
				
			||||||
 | 
							<end>*/</end>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">//</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>"</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>'</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="annotation">
 | 
				
			||||||
 | 
							<start>@</start>
 | 
				
			||||||
 | 
							<valueStart>(</valueStart>
 | 
				
			||||||
 | 
							<valueEnd>)</valueEnd>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="hexnumber">
 | 
				
			||||||
 | 
							<prefix>0x</prefix>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="number">
 | 
				
			||||||
 | 
							<point>.</point>
 | 
				
			||||||
 | 
							<exponent>e</exponent>
 | 
				
			||||||
 | 
							<suffix>f</suffix>
 | 
				
			||||||
 | 
							<suffix>d</suffix>
 | 
				
			||||||
 | 
							<suffix>l</suffix>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="keywords">
 | 
				
			||||||
 | 
							<keyword>abstract</keyword>
 | 
				
			||||||
 | 
							<keyword>boolean</keyword>
 | 
				
			||||||
 | 
							<keyword>break</keyword>
 | 
				
			||||||
 | 
							<keyword>byte</keyword>
 | 
				
			||||||
 | 
							<keyword>case</keyword>
 | 
				
			||||||
 | 
							<keyword>catch</keyword>
 | 
				
			||||||
 | 
							<keyword>char</keyword>
 | 
				
			||||||
 | 
							<keyword>class</keyword>
 | 
				
			||||||
 | 
							<keyword>const</keyword>
 | 
				
			||||||
 | 
							<keyword>continue</keyword>
 | 
				
			||||||
 | 
							<keyword>default</keyword>
 | 
				
			||||||
 | 
							<keyword>do</keyword>
 | 
				
			||||||
 | 
							<keyword>double</keyword>
 | 
				
			||||||
 | 
							<keyword>else</keyword>
 | 
				
			||||||
 | 
							<keyword>extends</keyword>
 | 
				
			||||||
 | 
							<keyword>final</keyword>
 | 
				
			||||||
 | 
							<keyword>finally</keyword>
 | 
				
			||||||
 | 
							<keyword>float</keyword>
 | 
				
			||||||
 | 
							<keyword>for</keyword>
 | 
				
			||||||
 | 
							<keyword>goto</keyword>
 | 
				
			||||||
 | 
							<keyword>if</keyword>
 | 
				
			||||||
 | 
							<keyword>implements</keyword>
 | 
				
			||||||
 | 
							<keyword>import</keyword>
 | 
				
			||||||
 | 
							<keyword>instanceof</keyword>
 | 
				
			||||||
 | 
							<keyword>int</keyword>
 | 
				
			||||||
 | 
							<keyword>interface</keyword>
 | 
				
			||||||
 | 
							<keyword>long</keyword>
 | 
				
			||||||
 | 
							<keyword>native</keyword>
 | 
				
			||||||
 | 
							<keyword>new</keyword>
 | 
				
			||||||
 | 
							<keyword>package</keyword>
 | 
				
			||||||
 | 
							<keyword>private</keyword>
 | 
				
			||||||
 | 
							<keyword>protected</keyword>
 | 
				
			||||||
 | 
							<keyword>public</keyword>
 | 
				
			||||||
 | 
							<keyword>return</keyword>
 | 
				
			||||||
 | 
							<keyword>short</keyword>
 | 
				
			||||||
 | 
							<keyword>static</keyword>
 | 
				
			||||||
 | 
							<keyword>strictfp</keyword>
 | 
				
			||||||
 | 
							<keyword>super</keyword>
 | 
				
			||||||
 | 
							<keyword>switch</keyword>
 | 
				
			||||||
 | 
							<keyword>synchronized</keyword>
 | 
				
			||||||
 | 
							<keyword>this</keyword>
 | 
				
			||||||
 | 
							<keyword>throw</keyword>
 | 
				
			||||||
 | 
							<keyword>throws</keyword>
 | 
				
			||||||
 | 
							<keyword>transient</keyword>
 | 
				
			||||||
 | 
							<keyword>try</keyword>
 | 
				
			||||||
 | 
							<keyword>void</keyword>
 | 
				
			||||||
 | 
							<keyword>volatile</keyword>
 | 
				
			||||||
 | 
							<keyword>while</keyword>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
					</highlighters>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,147 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Syntax highlighting definition for JavaScript
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					xslthl - XSLT Syntax Highlighting
 | 
				
			||||||
 | 
					http://sourceforge.net/projects/xslthl/
 | 
				
			||||||
 | 
					Copyright (C) 2005-2008 Michal Molhanec, Jirka Kosek, Michiel Hendriks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					warranty.  In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					arising from the use of this software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					   claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					   in a product, an acknowledgment in the product documentation would be
 | 
				
			||||||
 | 
					   appreciated but is not required.
 | 
				
			||||||
 | 
					2. Altered source versions must be plainly marked as such, and must not be
 | 
				
			||||||
 | 
					   misrepresented as being the original software.
 | 
				
			||||||
 | 
					3. This notice may not be removed or altered from any source distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Michal Molhanec <mol1111 at users.sourceforge.net>
 | 
				
			||||||
 | 
					Jirka Kosek <kosek at users.sourceforge.net>
 | 
				
			||||||
 | 
					Michiel Hendriks <elmuerte at users.sourceforge.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<highlighters>
 | 
				
			||||||
 | 
						<highlighter type="multiline-comment">
 | 
				
			||||||
 | 
							<start>/*</start>
 | 
				
			||||||
 | 
							<end>*/</end>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">//</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>"</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>'</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="hexnumber">
 | 
				
			||||||
 | 
							<prefix>0x</prefix>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="number">
 | 
				
			||||||
 | 
							<point>.</point>
 | 
				
			||||||
 | 
							<exponent>e</exponent>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="keywords">
 | 
				
			||||||
 | 
							<keyword>break</keyword>
 | 
				
			||||||
 | 
							<keyword>case</keyword>
 | 
				
			||||||
 | 
							<keyword>catch</keyword>
 | 
				
			||||||
 | 
							<keyword>continue</keyword>
 | 
				
			||||||
 | 
							<keyword>default</keyword>
 | 
				
			||||||
 | 
							<keyword>delete</keyword>
 | 
				
			||||||
 | 
							<keyword>do</keyword>
 | 
				
			||||||
 | 
							<keyword>else</keyword>
 | 
				
			||||||
 | 
							<keyword>finally</keyword>
 | 
				
			||||||
 | 
							<keyword>for</keyword>
 | 
				
			||||||
 | 
							<keyword>function</keyword>
 | 
				
			||||||
 | 
							<keyword>if</keyword>
 | 
				
			||||||
 | 
							<keyword>in</keyword>
 | 
				
			||||||
 | 
							<keyword>instanceof</keyword>
 | 
				
			||||||
 | 
							<keyword>new</keyword>
 | 
				
			||||||
 | 
							<keyword>return</keyword>
 | 
				
			||||||
 | 
							<keyword>switch</keyword>
 | 
				
			||||||
 | 
							<keyword>this</keyword>
 | 
				
			||||||
 | 
							<keyword>throw</keyword>
 | 
				
			||||||
 | 
							<keyword>try</keyword>
 | 
				
			||||||
 | 
							<keyword>typeof</keyword>
 | 
				
			||||||
 | 
							<keyword>var</keyword>
 | 
				
			||||||
 | 
							<keyword>void</keyword>
 | 
				
			||||||
 | 
							<keyword>while</keyword>
 | 
				
			||||||
 | 
							<keyword>with</keyword>
 | 
				
			||||||
 | 
							<!-- future keywords -->
 | 
				
			||||||
 | 
							<keyword>abstract</keyword>
 | 
				
			||||||
 | 
							<keyword>boolean</keyword>
 | 
				
			||||||
 | 
							<keyword>byte</keyword>
 | 
				
			||||||
 | 
							<keyword>char</keyword>
 | 
				
			||||||
 | 
							<keyword>class</keyword>
 | 
				
			||||||
 | 
							<keyword>const</keyword>
 | 
				
			||||||
 | 
							<keyword>debugger</keyword>
 | 
				
			||||||
 | 
							<keyword>double</keyword>
 | 
				
			||||||
 | 
							<keyword>enum</keyword>
 | 
				
			||||||
 | 
							<keyword>export</keyword>
 | 
				
			||||||
 | 
							<keyword>extends</keyword>
 | 
				
			||||||
 | 
							<keyword>final</keyword>
 | 
				
			||||||
 | 
							<keyword>float</keyword>
 | 
				
			||||||
 | 
							<keyword>goto</keyword>
 | 
				
			||||||
 | 
							<keyword>implements</keyword>
 | 
				
			||||||
 | 
							<keyword>import</keyword>
 | 
				
			||||||
 | 
							<keyword>int</keyword>
 | 
				
			||||||
 | 
							<keyword>interface</keyword>
 | 
				
			||||||
 | 
							<keyword>long</keyword>
 | 
				
			||||||
 | 
							<keyword>native</keyword>
 | 
				
			||||||
 | 
							<keyword>package</keyword>
 | 
				
			||||||
 | 
							<keyword>private</keyword>
 | 
				
			||||||
 | 
							<keyword>protected</keyword>
 | 
				
			||||||
 | 
							<keyword>public</keyword>
 | 
				
			||||||
 | 
							<keyword>short</keyword>
 | 
				
			||||||
 | 
							<keyword>static</keyword>
 | 
				
			||||||
 | 
							<keyword>super</keyword>
 | 
				
			||||||
 | 
							<keyword>synchronized</keyword>
 | 
				
			||||||
 | 
							<keyword>throws</keyword>
 | 
				
			||||||
 | 
							<keyword>transient</keyword>
 | 
				
			||||||
 | 
							<keyword>volatile</keyword>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="keywords">
 | 
				
			||||||
 | 
							<keyword>prototype</keyword>
 | 
				
			||||||
 | 
							<!-- Global Objects -->
 | 
				
			||||||
 | 
							<keyword>Array</keyword>
 | 
				
			||||||
 | 
							<keyword>Boolean</keyword>
 | 
				
			||||||
 | 
							<keyword>Date</keyword>
 | 
				
			||||||
 | 
							<keyword>Error</keyword>
 | 
				
			||||||
 | 
							<keyword>EvalError</keyword>
 | 
				
			||||||
 | 
							<keyword>Function</keyword>
 | 
				
			||||||
 | 
							<keyword>Math</keyword>
 | 
				
			||||||
 | 
							<keyword>Number</keyword>
 | 
				
			||||||
 | 
							<keyword>Object</keyword>
 | 
				
			||||||
 | 
							<keyword>RangeError</keyword>
 | 
				
			||||||
 | 
							<keyword>ReferenceError</keyword>
 | 
				
			||||||
 | 
							<keyword>RegExp</keyword>
 | 
				
			||||||
 | 
							<keyword>String</keyword>
 | 
				
			||||||
 | 
							<keyword>SyntaxError</keyword>
 | 
				
			||||||
 | 
							<keyword>TypeError</keyword>
 | 
				
			||||||
 | 
							<keyword>URIError</keyword>
 | 
				
			||||||
 | 
							<!-- Global functions -->
 | 
				
			||||||
 | 
							<keyword>decodeURI</keyword>
 | 
				
			||||||
 | 
							<keyword>decodeURIComponent</keyword>
 | 
				
			||||||
 | 
							<keyword>encodeURI</keyword>
 | 
				
			||||||
 | 
							<keyword>encodeURIComponent</keyword>
 | 
				
			||||||
 | 
							<keyword>eval</keyword>
 | 
				
			||||||
 | 
							<keyword>isFinite</keyword>
 | 
				
			||||||
 | 
							<keyword>isNaN</keyword>
 | 
				
			||||||
 | 
							<keyword>parseFloat</keyword>
 | 
				
			||||||
 | 
							<keyword>parseInt</keyword>
 | 
				
			||||||
 | 
							<!-- Global properties -->
 | 
				
			||||||
 | 
							<keyword>Infinity</keyword>
 | 
				
			||||||
 | 
							<keyword>NaN</keyword>
 | 
				
			||||||
 | 
							<keyword>undefined</keyword>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
					</highlighters>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,120 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Syntax highlighting definition for Perl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					xslthl - XSLT Syntax Highlighting
 | 
				
			||||||
 | 
					http://sourceforge.net/projects/xslthl/
 | 
				
			||||||
 | 
					Copyright (C) 2005-2008 Michal Molhanec, Jirka Kosek, Michiel Hendriks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					warranty.  In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					arising from the use of this software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					   claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					   in a product, an acknowledgment in the product documentation would be
 | 
				
			||||||
 | 
					   appreciated but is not required.
 | 
				
			||||||
 | 
					2. Altered source versions must be plainly marked as such, and must not be
 | 
				
			||||||
 | 
					   misrepresented as being the original software.
 | 
				
			||||||
 | 
					3. This notice may not be removed or altered from any source distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Michal Molhanec <mol1111 at users.sourceforge.net>
 | 
				
			||||||
 | 
					Jirka Kosek <kosek at users.sourceforge.net>
 | 
				
			||||||
 | 
					Michiel Hendriks <elmuerte at users.sourceforge.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<highlighters>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">#</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="heredoc">
 | 
				
			||||||
 | 
							<start><<</start>
 | 
				
			||||||
 | 
							<quote>'</quote>
 | 
				
			||||||
 | 
							<quote>"</quote>
 | 
				
			||||||
 | 
							<noWhiteSpace/>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>"</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>'</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
							<spanNewLines/>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="hexnumber">
 | 
				
			||||||
 | 
							<prefix>0x</prefix>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="number">
 | 
				
			||||||
 | 
							<point>.</point>
 | 
				
			||||||
 | 
							<pointStarts />
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="keywords">
 | 
				
			||||||
 | 
							<keyword>if</keyword>
 | 
				
			||||||
 | 
							<keyword>unless</keyword>
 | 
				
			||||||
 | 
							<keyword>while</keyword>
 | 
				
			||||||
 | 
							<keyword>until</keyword>
 | 
				
			||||||
 | 
							<keyword>foreach</keyword>
 | 
				
			||||||
 | 
							<keyword>else</keyword>
 | 
				
			||||||
 | 
							<keyword>elsif</keyword>
 | 
				
			||||||
 | 
							<keyword>for</keyword>
 | 
				
			||||||
 | 
							<keyword>when</keyword>
 | 
				
			||||||
 | 
							<keyword>default</keyword>
 | 
				
			||||||
 | 
							<keyword>given</keyword>
 | 
				
			||||||
 | 
							<!-- Keywords related to the control flow of your perl program  -->
 | 
				
			||||||
 | 
							<keyword>caller</keyword>
 | 
				
			||||||
 | 
							<keyword>continue</keyword>
 | 
				
			||||||
 | 
							<keyword>die</keyword>
 | 
				
			||||||
 | 
							<keyword>do</keyword>
 | 
				
			||||||
 | 
							<keyword>dump</keyword>
 | 
				
			||||||
 | 
							<keyword>eval</keyword>
 | 
				
			||||||
 | 
							<keyword>exit</keyword>
 | 
				
			||||||
 | 
							<keyword>goto</keyword>
 | 
				
			||||||
 | 
							<keyword>last</keyword>
 | 
				
			||||||
 | 
							<keyword>next</keyword>
 | 
				
			||||||
 | 
							<keyword>redo</keyword>
 | 
				
			||||||
 | 
							<keyword>return</keyword>
 | 
				
			||||||
 | 
							<keyword>sub</keyword>
 | 
				
			||||||
 | 
							<keyword>wantarray</keyword>
 | 
				
			||||||
 | 
							<!-- Keywords related to scoping  -->
 | 
				
			||||||
 | 
							<keyword>caller</keyword>
 | 
				
			||||||
 | 
							<keyword>import</keyword>
 | 
				
			||||||
 | 
							<keyword>local</keyword>
 | 
				
			||||||
 | 
							<keyword>my</keyword>
 | 
				
			||||||
 | 
							<keyword>package</keyword>
 | 
				
			||||||
 | 
							<keyword>use</keyword>
 | 
				
			||||||
 | 
							<!-- Keywords related to perl modules  -->
 | 
				
			||||||
 | 
							<keyword>do</keyword>
 | 
				
			||||||
 | 
							<keyword>import</keyword>
 | 
				
			||||||
 | 
							<keyword>no</keyword>
 | 
				
			||||||
 | 
							<keyword>package</keyword>
 | 
				
			||||||
 | 
							<keyword>require</keyword>
 | 
				
			||||||
 | 
							<keyword>use</keyword>
 | 
				
			||||||
 | 
							<!-- Keywords related to classes and object-orientedness  -->
 | 
				
			||||||
 | 
							<keyword>bless</keyword>
 | 
				
			||||||
 | 
							<keyword>dbmclose</keyword>
 | 
				
			||||||
 | 
							<keyword>dbmopen</keyword>
 | 
				
			||||||
 | 
							<keyword>package</keyword>
 | 
				
			||||||
 | 
							<keyword>ref</keyword>
 | 
				
			||||||
 | 
							<keyword>tie</keyword>
 | 
				
			||||||
 | 
							<keyword>tied</keyword>
 | 
				
			||||||
 | 
							<keyword>untie</keyword>
 | 
				
			||||||
 | 
							<keyword>use</keyword>
 | 
				
			||||||
 | 
							<!-- operators -->
 | 
				
			||||||
 | 
							<keyword>and</keyword>
 | 
				
			||||||
 | 
							<keyword>or</keyword>
 | 
				
			||||||
 | 
							<keyword>not</keyword>
 | 
				
			||||||
 | 
							<keyword>eq</keyword>
 | 
				
			||||||
 | 
							<keyword>ne</keyword>
 | 
				
			||||||
 | 
							<keyword>lt</keyword>
 | 
				
			||||||
 | 
							<keyword>gt</keyword>
 | 
				
			||||||
 | 
							<keyword>le</keyword>
 | 
				
			||||||
 | 
							<keyword>ge</keyword>
 | 
				
			||||||
 | 
							<keyword>cmp</keyword>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
					</highlighters>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,154 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Syntax highlighting definition for PHP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					xslthl - XSLT Syntax Highlighting
 | 
				
			||||||
 | 
					http://sourceforge.net/projects/xslthl/
 | 
				
			||||||
 | 
					Copyright (C) 2005-2008 Michal Molhanec, Jirka Kosek, Michiel Hendriks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					warranty.  In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					arising from the use of this software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					   claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					   in a product, an acknowledgment in the product documentation would be
 | 
				
			||||||
 | 
					   appreciated but is not required.
 | 
				
			||||||
 | 
					2. Altered source versions must be plainly marked as such, and must not be
 | 
				
			||||||
 | 
					   misrepresented as being the original software.
 | 
				
			||||||
 | 
					3. This notice may not be removed or altered from any source distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Michal Molhanec <mol1111 at users.sourceforge.net>
 | 
				
			||||||
 | 
					Jirka Kosek <kosek at users.sourceforge.net>
 | 
				
			||||||
 | 
					Michiel Hendriks <elmuerte at users.sourceforge.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<highlighters>
 | 
				
			||||||
 | 
						<highlighter type="multiline-comment">
 | 
				
			||||||
 | 
							<start>/**</start>
 | 
				
			||||||
 | 
							<end>*/</end>
 | 
				
			||||||
 | 
							<style>doccomment</style>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">
 | 
				
			||||||
 | 
							<start><![CDATA[/// ]]></start>
 | 
				
			||||||
 | 
							<style>doccomment</style>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="multiline-comment">
 | 
				
			||||||
 | 
							<start>/*</start>
 | 
				
			||||||
 | 
							<end>*/</end>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">//</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">#</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>"</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
							<spanNewLines />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>'</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
							<spanNewLines />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="heredoc">
 | 
				
			||||||
 | 
							<start><<<</start>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="hexnumber">
 | 
				
			||||||
 | 
							<prefix>0x</prefix>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="number">
 | 
				
			||||||
 | 
							<point>.</point>
 | 
				
			||||||
 | 
							<exponent>e</exponent>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="keywords">
 | 
				
			||||||
 | 
							<keyword>and</keyword>
 | 
				
			||||||
 | 
							<keyword>or</keyword>
 | 
				
			||||||
 | 
							<keyword>xor</keyword>
 | 
				
			||||||
 | 
							<keyword>__FILE__</keyword>
 | 
				
			||||||
 | 
							<keyword>exception</keyword>
 | 
				
			||||||
 | 
							<keyword>__LINE__</keyword>
 | 
				
			||||||
 | 
							<keyword>array</keyword>
 | 
				
			||||||
 | 
							<keyword>as</keyword>
 | 
				
			||||||
 | 
							<keyword>break</keyword>
 | 
				
			||||||
 | 
							<keyword>case</keyword>
 | 
				
			||||||
 | 
							<keyword>class</keyword>
 | 
				
			||||||
 | 
							<keyword>const</keyword>
 | 
				
			||||||
 | 
							<keyword>continue</keyword>
 | 
				
			||||||
 | 
							<keyword>declare</keyword>
 | 
				
			||||||
 | 
							<keyword>default</keyword>
 | 
				
			||||||
 | 
							<keyword>die</keyword>
 | 
				
			||||||
 | 
							<keyword>do</keyword>
 | 
				
			||||||
 | 
							<keyword>echo</keyword>
 | 
				
			||||||
 | 
							<keyword>else</keyword>
 | 
				
			||||||
 | 
							<keyword>elseif</keyword>
 | 
				
			||||||
 | 
							<keyword>empty</keyword>
 | 
				
			||||||
 | 
							<keyword>enddeclare</keyword>
 | 
				
			||||||
 | 
							<keyword>endfor</keyword>
 | 
				
			||||||
 | 
							<keyword>endforeach</keyword>
 | 
				
			||||||
 | 
							<keyword>endif</keyword>
 | 
				
			||||||
 | 
							<keyword>endswitch</keyword>
 | 
				
			||||||
 | 
							<keyword>endwhile</keyword>
 | 
				
			||||||
 | 
							<keyword>eval</keyword>
 | 
				
			||||||
 | 
							<keyword>exit</keyword>
 | 
				
			||||||
 | 
							<keyword>extends</keyword>
 | 
				
			||||||
 | 
							<keyword>for</keyword>
 | 
				
			||||||
 | 
							<keyword>foreach</keyword>
 | 
				
			||||||
 | 
							<keyword>function</keyword>
 | 
				
			||||||
 | 
							<keyword>global</keyword>
 | 
				
			||||||
 | 
							<keyword>if</keyword>
 | 
				
			||||||
 | 
							<keyword>include</keyword>
 | 
				
			||||||
 | 
							<keyword>include_once</keyword>
 | 
				
			||||||
 | 
							<keyword>isset</keyword>
 | 
				
			||||||
 | 
							<keyword>list</keyword>
 | 
				
			||||||
 | 
							<keyword>new</keyword>
 | 
				
			||||||
 | 
							<keyword>print</keyword>
 | 
				
			||||||
 | 
							<keyword>require</keyword>
 | 
				
			||||||
 | 
							<keyword>require_once</keyword>
 | 
				
			||||||
 | 
							<keyword>return</keyword>
 | 
				
			||||||
 | 
							<keyword>static</keyword>
 | 
				
			||||||
 | 
							<keyword>switch</keyword>
 | 
				
			||||||
 | 
							<keyword>unset</keyword>
 | 
				
			||||||
 | 
							<keyword>use</keyword>
 | 
				
			||||||
 | 
							<keyword>var</keyword>
 | 
				
			||||||
 | 
							<keyword>while</keyword>
 | 
				
			||||||
 | 
							<keyword>__FUNCTION__</keyword>
 | 
				
			||||||
 | 
							<keyword>__CLASS__</keyword>
 | 
				
			||||||
 | 
							<keyword>__METHOD__</keyword>
 | 
				
			||||||
 | 
							<keyword>final</keyword>
 | 
				
			||||||
 | 
							<keyword>php_user_filter</keyword>
 | 
				
			||||||
 | 
							<keyword>interface</keyword>
 | 
				
			||||||
 | 
							<keyword>implements</keyword>
 | 
				
			||||||
 | 
							<keyword>extends</keyword>
 | 
				
			||||||
 | 
							<keyword>public</keyword>
 | 
				
			||||||
 | 
							<keyword>private</keyword>
 | 
				
			||||||
 | 
							<keyword>protected</keyword>
 | 
				
			||||||
 | 
							<keyword>abstract</keyword>
 | 
				
			||||||
 | 
							<keyword>clone</keyword>
 | 
				
			||||||
 | 
							<keyword>try</keyword>
 | 
				
			||||||
 | 
							<keyword>catch</keyword>
 | 
				
			||||||
 | 
							<keyword>throw</keyword>
 | 
				
			||||||
 | 
							<keyword>cfunction</keyword>
 | 
				
			||||||
 | 
							<keyword>old_function</keyword>
 | 
				
			||||||
 | 
							<keyword>true</keyword>
 | 
				
			||||||
 | 
							<keyword>false</keyword>
 | 
				
			||||||
 | 
							<!-- PHP 5.3 -->
 | 
				
			||||||
 | 
							<keyword>namespace</keyword>
 | 
				
			||||||
 | 
							<keyword>__NAMESPACE__</keyword>
 | 
				
			||||||
 | 
							<keyword>goto</keyword>
 | 
				
			||||||
 | 
							<keyword>__DIR__</keyword>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="word">
 | 
				
			||||||
 | 
							<!-- highlight the php open and close tags as directives -->
 | 
				
			||||||
 | 
							<word>?></word>
 | 
				
			||||||
 | 
							<word><?php</word>
 | 
				
			||||||
 | 
							<word><?=</word>
 | 
				
			||||||
 | 
							<style>directive</style>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
					</highlighters>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,100 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Syntax highlighting definition for Python
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					xslthl - XSLT Syntax Highlighting
 | 
				
			||||||
 | 
					http://sourceforge.net/projects/xslthl/
 | 
				
			||||||
 | 
					Copyright (C) 2005-2008 Michal Molhanec, Jirka Kosek, Michiel Hendriks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					warranty.  In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					arising from the use of this software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					   claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					   in a product, an acknowledgment in the product documentation would be
 | 
				
			||||||
 | 
					   appreciated but is not required.
 | 
				
			||||||
 | 
					2. Altered source versions must be plainly marked as such, and must not be
 | 
				
			||||||
 | 
					   misrepresented as being the original software.
 | 
				
			||||||
 | 
					3. This notice may not be removed or altered from any source distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Michal Molhanec <mol1111 at users.sourceforge.net>
 | 
				
			||||||
 | 
					Jirka Kosek <kosek at users.sourceforge.net>
 | 
				
			||||||
 | 
					Michiel Hendriks <elmuerte at users.sourceforge.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<highlighters>
 | 
				
			||||||
 | 
						<highlighter type="annotation">
 | 
				
			||||||
 | 
							<!-- these are actually called decorators -->
 | 
				
			||||||
 | 
							<start>@</start>
 | 
				
			||||||
 | 
							<valueStart>(</valueStart>
 | 
				
			||||||
 | 
							<valueEnd>)</valueEnd>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">#</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>"""</string>
 | 
				
			||||||
 | 
							<spanNewLines />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>'''</string>
 | 
				
			||||||
 | 
							<spanNewLines />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>"</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>'</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="hexnumber">
 | 
				
			||||||
 | 
							<prefix>0x</prefix>
 | 
				
			||||||
 | 
							<suffix>l</suffix>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="number">
 | 
				
			||||||
 | 
							<point>.</point>
 | 
				
			||||||
 | 
							<pointStarts />
 | 
				
			||||||
 | 
							<exponent>e</exponent>
 | 
				
			||||||
 | 
							<suffix>l</suffix>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="keywords">
 | 
				
			||||||
 | 
							<keyword>and</keyword>
 | 
				
			||||||
 | 
							<keyword>del</keyword>
 | 
				
			||||||
 | 
							<keyword>from</keyword>
 | 
				
			||||||
 | 
							<keyword>not</keyword>
 | 
				
			||||||
 | 
							<keyword>while</keyword>
 | 
				
			||||||
 | 
							<keyword>as</keyword>
 | 
				
			||||||
 | 
							<keyword>elif</keyword>
 | 
				
			||||||
 | 
							<keyword>global</keyword>
 | 
				
			||||||
 | 
							<keyword>or</keyword>
 | 
				
			||||||
 | 
							<keyword>with</keyword>
 | 
				
			||||||
 | 
							<keyword>assert</keyword>
 | 
				
			||||||
 | 
							<keyword>else</keyword>
 | 
				
			||||||
 | 
							<keyword>if</keyword>
 | 
				
			||||||
 | 
							<keyword>pass</keyword>
 | 
				
			||||||
 | 
							<keyword>yield</keyword>
 | 
				
			||||||
 | 
							<keyword>break</keyword>
 | 
				
			||||||
 | 
							<keyword>except</keyword>
 | 
				
			||||||
 | 
							<keyword>import</keyword>
 | 
				
			||||||
 | 
							<keyword>print</keyword>
 | 
				
			||||||
 | 
							<keyword>class</keyword>
 | 
				
			||||||
 | 
							<keyword>exec</keyword>
 | 
				
			||||||
 | 
							<keyword>in</keyword>
 | 
				
			||||||
 | 
							<keyword>raise</keyword>
 | 
				
			||||||
 | 
							<keyword>continue</keyword>
 | 
				
			||||||
 | 
							<keyword>finally</keyword>
 | 
				
			||||||
 | 
							<keyword>is</keyword>
 | 
				
			||||||
 | 
							<keyword>return</keyword>
 | 
				
			||||||
 | 
							<keyword>def</keyword>
 | 
				
			||||||
 | 
							<keyword>for</keyword>
 | 
				
			||||||
 | 
							<keyword>lambda</keyword>
 | 
				
			||||||
 | 
							<keyword>try</keyword>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
					</highlighters>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,109 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Syntax highlighting definition for Ruby
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					xslthl - XSLT Syntax Highlighting
 | 
				
			||||||
 | 
					http://sourceforge.net/projects/xslthl/
 | 
				
			||||||
 | 
					Copyright (C) 2005-2008 Michal Molhanec, Jirka Kosek, Michiel Hendriks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					warranty.  In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					arising from the use of this software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					   claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					   in a product, an acknowledgment in the product documentation would be
 | 
				
			||||||
 | 
					   appreciated but is not required.
 | 
				
			||||||
 | 
					2. Altered source versions must be plainly marked as such, and must not be
 | 
				
			||||||
 | 
					   misrepresented as being the original software.
 | 
				
			||||||
 | 
					3. This notice may not be removed or altered from any source distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Michal Molhanec <mol1111 at users.sourceforge.net>
 | 
				
			||||||
 | 
					Jirka Kosek <kosek at users.sourceforge.net>
 | 
				
			||||||
 | 
					Michiel Hendriks <elmuerte at users.sourceforge.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<highlighters>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">#</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="heredoc">
 | 
				
			||||||
 | 
							<start><<</start>
 | 
				
			||||||
 | 
							<noWhiteSpace/>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>"</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>%Q{</string>
 | 
				
			||||||
 | 
							<endString>}</endString>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>%/</string>
 | 
				
			||||||
 | 
							<endString>/</endString>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>'</string>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>%q{</string>
 | 
				
			||||||
 | 
							<endString>}</endString>
 | 
				
			||||||
 | 
							<escape>\</escape>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="hexnumber">
 | 
				
			||||||
 | 
							<prefix>0x</prefix>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="number">
 | 
				
			||||||
 | 
							<point>.</point>
 | 
				
			||||||
 | 
							<exponent>e</exponent>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="keywords">
 | 
				
			||||||
 | 
							<keyword>alias</keyword>
 | 
				
			||||||
 | 
							<keyword>and</keyword>
 | 
				
			||||||
 | 
							<keyword>BEGIN</keyword>
 | 
				
			||||||
 | 
							<keyword>begin</keyword>
 | 
				
			||||||
 | 
							<keyword>break</keyword>
 | 
				
			||||||
 | 
							<keyword>case</keyword>
 | 
				
			||||||
 | 
							<keyword>class</keyword>
 | 
				
			||||||
 | 
							<keyword>def</keyword>
 | 
				
			||||||
 | 
							<keyword>defined</keyword>
 | 
				
			||||||
 | 
							<keyword>do</keyword>
 | 
				
			||||||
 | 
							<keyword>else</keyword>
 | 
				
			||||||
 | 
							<keyword>elsif</keyword>
 | 
				
			||||||
 | 
							<keyword>END</keyword>
 | 
				
			||||||
 | 
							<keyword>end</keyword>
 | 
				
			||||||
 | 
							<keyword>ensure</keyword>
 | 
				
			||||||
 | 
							<keyword>false</keyword>
 | 
				
			||||||
 | 
							<keyword>for</keyword>
 | 
				
			||||||
 | 
							<keyword>if</keyword>
 | 
				
			||||||
 | 
							<keyword>in</keyword>
 | 
				
			||||||
 | 
							<keyword>module</keyword>
 | 
				
			||||||
 | 
							<keyword>next</keyword>
 | 
				
			||||||
 | 
							<keyword>nil</keyword>
 | 
				
			||||||
 | 
							<keyword>not</keyword>
 | 
				
			||||||
 | 
							<keyword>or</keyword>
 | 
				
			||||||
 | 
							<keyword>redo</keyword>
 | 
				
			||||||
 | 
							<keyword>rescue</keyword>
 | 
				
			||||||
 | 
							<keyword>retry</keyword>
 | 
				
			||||||
 | 
							<keyword>return</keyword>
 | 
				
			||||||
 | 
							<keyword>self</keyword>
 | 
				
			||||||
 | 
							<keyword>super</keyword>
 | 
				
			||||||
 | 
							<keyword>then</keyword>
 | 
				
			||||||
 | 
							<keyword>true</keyword>
 | 
				
			||||||
 | 
							<keyword>undef</keyword>
 | 
				
			||||||
 | 
							<keyword>unless</keyword>
 | 
				
			||||||
 | 
							<keyword>until</keyword>
 | 
				
			||||||
 | 
							<keyword>when</keyword>
 | 
				
			||||||
 | 
							<keyword>while</keyword>
 | 
				
			||||||
 | 
							<keyword>yield</keyword>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
					</highlighters>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,565 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Syntax highlighting definition for SQL:1999
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					xslthl - XSLT Syntax Highlighting
 | 
				
			||||||
 | 
					http://sourceforge.net/projects/xslthl/
 | 
				
			||||||
 | 
					Copyright (C) 2012 Michiel Hendriks, Martin Hujer, k42b3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This software is provided 'as-is', without any express or implied
 | 
				
			||||||
 | 
					warranty.  In no event will the authors be held liable for any damages
 | 
				
			||||||
 | 
					arising from the use of this software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is granted to anyone to use this software for any purpose,
 | 
				
			||||||
 | 
					including commercial applications, and to alter it and redistribute it
 | 
				
			||||||
 | 
					freely, subject to the following restrictions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. The origin of this software must not be misrepresented; you must not
 | 
				
			||||||
 | 
					   claim that you wrote the original software. If you use this software
 | 
				
			||||||
 | 
					   in a product, an acknowledgment in the product documentation would be
 | 
				
			||||||
 | 
					   appreciated but is not required.
 | 
				
			||||||
 | 
					2. Altered source versions must be plainly marked as such, and must not be
 | 
				
			||||||
 | 
					   misrepresented as being the original software.
 | 
				
			||||||
 | 
					3. This notice may not be removed or altered from any source distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<highlighters>
 | 
				
			||||||
 | 
						<highlighter type="oneline-comment">--</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="multiline-comment">
 | 
				
			||||||
 | 
							<start>/*</start>
 | 
				
			||||||
 | 
							<end>*/</end>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>'</string>
 | 
				
			||||||
 | 
							<doubleEscapes />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>U'</string>
 | 
				
			||||||
 | 
							<endString>'</endString>
 | 
				
			||||||
 | 
							<doubleEscapes />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>B'</string>
 | 
				
			||||||
 | 
							<endString>'</endString>
 | 
				
			||||||
 | 
							<doubleEscapes />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>N'</string>
 | 
				
			||||||
 | 
							<endString>'</endString>
 | 
				
			||||||
 | 
							<doubleEscapes />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="string">
 | 
				
			||||||
 | 
							<string>X'</string>
 | 
				
			||||||
 | 
							<endString>'</endString>
 | 
				
			||||||
 | 
							<doubleEscapes />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="number">
 | 
				
			||||||
 | 
							<point>.</point>
 | 
				
			||||||
 | 
							<pointStarts />
 | 
				
			||||||
 | 
							<exponent>e</exponent>
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
						<highlighter type="keywords">
 | 
				
			||||||
 | 
							<ignoreCase />
 | 
				
			||||||
 | 
							<!-- reserved -->
 | 
				
			||||||
 | 
							<keyword>A</keyword>
 | 
				
			||||||
 | 
							<keyword>ABS</keyword>
 | 
				
			||||||
 | 
							<keyword>ABSOLUTE</keyword>
 | 
				
			||||||
 | 
							<keyword>ACTION</keyword>
 | 
				
			||||||
 | 
							<keyword>ADA</keyword>
 | 
				
			||||||
 | 
							<keyword>ADMIN</keyword>
 | 
				
			||||||
 | 
							<keyword>AFTER</keyword>
 | 
				
			||||||
 | 
							<keyword>ALWAYS</keyword>
 | 
				
			||||||
 | 
							<keyword>ASC</keyword>
 | 
				
			||||||
 | 
							<keyword>ASSERTION</keyword>
 | 
				
			||||||
 | 
							<keyword>ASSIGNMENT</keyword>
 | 
				
			||||||
 | 
							<keyword>ATTRIBUTE</keyword>
 | 
				
			||||||
 | 
							<keyword>ATTRIBUTES</keyword>
 | 
				
			||||||
 | 
							<keyword>AVG</keyword>
 | 
				
			||||||
 | 
							<keyword>BEFORE</keyword>
 | 
				
			||||||
 | 
							<keyword>BERNOULLI</keyword>
 | 
				
			||||||
 | 
							<keyword>BREADTH</keyword>
 | 
				
			||||||
 | 
							<keyword>C</keyword>
 | 
				
			||||||
 | 
							<keyword>CARDINALITY</keyword>
 | 
				
			||||||
 | 
							<keyword>CASCADE</keyword>
 | 
				
			||||||
 | 
							<keyword>CATALOG_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>CATALOG</keyword>
 | 
				
			||||||
 | 
							<keyword>CEIL</keyword>
 | 
				
			||||||
 | 
							<keyword>CEILING</keyword>
 | 
				
			||||||
 | 
							<keyword>CHAIN</keyword>
 | 
				
			||||||
 | 
							<keyword>CHAR_LENGTH</keyword>
 | 
				
			||||||
 | 
							<keyword>CHARACTER_LENGTH</keyword>
 | 
				
			||||||
 | 
							<keyword>CHARACTER_SET_CATALOG</keyword>
 | 
				
			||||||
 | 
							<keyword>CHARACTER_SET_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>CHARACTER_SET_SCHEMA</keyword>
 | 
				
			||||||
 | 
							<keyword>CHARACTERISTICS</keyword>
 | 
				
			||||||
 | 
							<keyword>CHARACTERS</keyword>
 | 
				
			||||||
 | 
							<keyword>CHECKED</keyword>
 | 
				
			||||||
 | 
							<keyword>CLASS_ORIGIN</keyword>
 | 
				
			||||||
 | 
							<keyword>COALESCE</keyword>
 | 
				
			||||||
 | 
							<keyword>COBOL</keyword>
 | 
				
			||||||
 | 
							<keyword>CODE_UNITS</keyword>
 | 
				
			||||||
 | 
							<keyword>COLLATION_CATALOG</keyword>
 | 
				
			||||||
 | 
							<keyword>COLLATION_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>COLLATION_SCHEMA</keyword>
 | 
				
			||||||
 | 
							<keyword>COLLATION</keyword>
 | 
				
			||||||
 | 
							<keyword>COLLECT</keyword>
 | 
				
			||||||
 | 
							<keyword>COLUMN_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>COMMAND_FUNCTION_CODE</keyword>
 | 
				
			||||||
 | 
							<keyword>COMMAND_FUNCTION</keyword>
 | 
				
			||||||
 | 
							<keyword>COMMITTED</keyword>
 | 
				
			||||||
 | 
							<keyword>CONDITION_NUMBER</keyword>
 | 
				
			||||||
 | 
							<keyword>CONDITION</keyword>
 | 
				
			||||||
 | 
							<keyword>CONNECTION_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>CONSTRAINT_CATALOG</keyword>
 | 
				
			||||||
 | 
							<keyword>CONSTRAINT_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>CONSTRAINT_SCHEMA</keyword>
 | 
				
			||||||
 | 
							<keyword>CONSTRAINTS</keyword>
 | 
				
			||||||
 | 
							<keyword>CONSTRUCTORS</keyword>
 | 
				
			||||||
 | 
							<keyword>CONTAINS</keyword>
 | 
				
			||||||
 | 
							<keyword>CONVERT</keyword>
 | 
				
			||||||
 | 
							<keyword>CORR</keyword>
 | 
				
			||||||
 | 
							<keyword>COUNT</keyword>
 | 
				
			||||||
 | 
							<keyword>COVAR_POP</keyword>
 | 
				
			||||||
 | 
							<keyword>COVAR_SAMP</keyword>
 | 
				
			||||||
 | 
							<keyword>CUME_DIST</keyword>
 | 
				
			||||||
 | 
							<keyword>CURRENT_COLLATION</keyword>
 | 
				
			||||||
 | 
							<keyword>CURSOR_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>DATA</keyword>
 | 
				
			||||||
 | 
							<keyword>DATETIME_INTERVAL_CODE</keyword>
 | 
				
			||||||
 | 
							<keyword>DATETIME_INTERVAL_PRECISION</keyword>
 | 
				
			||||||
 | 
							<keyword>DEFAULTS</keyword>
 | 
				
			||||||
 | 
							<keyword>DEFERRABLE</keyword>
 | 
				
			||||||
 | 
							<keyword>DEFERRED</keyword>
 | 
				
			||||||
 | 
							<keyword>DEFINED</keyword>
 | 
				
			||||||
 | 
							<keyword>DEFINER</keyword>
 | 
				
			||||||
 | 
							<keyword>DEGREE</keyword>
 | 
				
			||||||
 | 
							<keyword>DENSE_RANK</keyword>
 | 
				
			||||||
 | 
							<keyword>DEPTH</keyword>
 | 
				
			||||||
 | 
							<keyword>DERIVED</keyword>
 | 
				
			||||||
 | 
							<keyword>DESC</keyword>
 | 
				
			||||||
 | 
							<keyword>DESCRIPTOR</keyword>
 | 
				
			||||||
 | 
							<keyword>DIAGNOSTICS</keyword>
 | 
				
			||||||
 | 
							<keyword>DISPATCH</keyword>
 | 
				
			||||||
 | 
							<keyword>DOMAIN</keyword>
 | 
				
			||||||
 | 
							<keyword>DYNAMIC_FUNCTION_CODE</keyword>
 | 
				
			||||||
 | 
							<keyword>DYNAMIC_FUNCTION</keyword>
 | 
				
			||||||
 | 
							<keyword>EQUALS</keyword>
 | 
				
			||||||
 | 
							<keyword>EVERY</keyword>
 | 
				
			||||||
 | 
							<keyword>EXCEPTION</keyword>
 | 
				
			||||||
 | 
							<keyword>EXCLUDE</keyword>
 | 
				
			||||||
 | 
							<keyword>EXCLUDING</keyword>
 | 
				
			||||||
 | 
							<keyword>EXP</keyword>
 | 
				
			||||||
 | 
							<keyword>EXTRACT</keyword>
 | 
				
			||||||
 | 
							<keyword>FINAL</keyword>
 | 
				
			||||||
 | 
							<keyword>FIRST</keyword>
 | 
				
			||||||
 | 
							<keyword>FLOOR</keyword>
 | 
				
			||||||
 | 
							<keyword>FOLLOWING</keyword>
 | 
				
			||||||
 | 
							<keyword>FORTRAN</keyword>
 | 
				
			||||||
 | 
							<keyword>FOUND</keyword>
 | 
				
			||||||
 | 
							<keyword>FUSION</keyword>
 | 
				
			||||||
 | 
							<keyword>G</keyword>
 | 
				
			||||||
 | 
							<keyword>GENERAL</keyword>
 | 
				
			||||||
 | 
							<keyword>GO</keyword>
 | 
				
			||||||
 | 
							<keyword>GOTO</keyword>
 | 
				
			||||||
 | 
							<keyword>GRANTED</keyword>
 | 
				
			||||||
 | 
							<keyword>HIERARCHY</keyword>
 | 
				
			||||||
 | 
							<keyword>IMPLEMENTATION</keyword>
 | 
				
			||||||
 | 
							<keyword>INCLUDING</keyword>
 | 
				
			||||||
 | 
							<keyword>INCREMENT</keyword>
 | 
				
			||||||
 | 
							<keyword>INITIALLY</keyword>
 | 
				
			||||||
 | 
							<keyword>INSTANCE</keyword>
 | 
				
			||||||
 | 
							<keyword>INSTANTIABLE</keyword>
 | 
				
			||||||
 | 
							<keyword>INTERSECTION</keyword>
 | 
				
			||||||
 | 
							<keyword>INVOKER</keyword>
 | 
				
			||||||
 | 
							<keyword>ISOLATION</keyword>
 | 
				
			||||||
 | 
							<keyword>K</keyword>
 | 
				
			||||||
 | 
							<keyword>KEY_MEMBER</keyword>
 | 
				
			||||||
 | 
							<keyword>KEY_TYPE</keyword>
 | 
				
			||||||
 | 
							<keyword>KEY</keyword>
 | 
				
			||||||
 | 
							<keyword>LAST</keyword>
 | 
				
			||||||
 | 
							<keyword>LENGTH</keyword>
 | 
				
			||||||
 | 
							<keyword>LEVEL</keyword>
 | 
				
			||||||
 | 
							<keyword>LN</keyword>
 | 
				
			||||||
 | 
							<keyword>LOCATOR</keyword>
 | 
				
			||||||
 | 
							<keyword>LOWER</keyword>
 | 
				
			||||||
 | 
							<keyword>M</keyword>
 | 
				
			||||||
 | 
							<keyword>MAP</keyword>
 | 
				
			||||||
 | 
							<keyword>MATCHED</keyword>
 | 
				
			||||||
 | 
							<keyword>MAX</keyword>
 | 
				
			||||||
 | 
							<keyword>MAXVALUE</keyword>
 | 
				
			||||||
 | 
							<keyword>MESSAGE_LENGTH</keyword>
 | 
				
			||||||
 | 
							<keyword>MESSAGE_OCTET_LENGTH</keyword>
 | 
				
			||||||
 | 
							<keyword>MESSAGE_TEXT</keyword>
 | 
				
			||||||
 | 
							<keyword>MIN</keyword>
 | 
				
			||||||
 | 
							<keyword>MINVALUE</keyword>
 | 
				
			||||||
 | 
							<keyword>MOD</keyword>
 | 
				
			||||||
 | 
							<keyword>MORE</keyword>
 | 
				
			||||||
 | 
							<keyword>MUMPS</keyword>
 | 
				
			||||||
 | 
							<keyword>NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>NAMES</keyword>
 | 
				
			||||||
 | 
							<keyword>NESTING</keyword>
 | 
				
			||||||
 | 
							<keyword>NEXT</keyword>
 | 
				
			||||||
 | 
							<keyword>NORMALIZE</keyword>
 | 
				
			||||||
 | 
							<keyword>NORMALIZED</keyword>
 | 
				
			||||||
 | 
							<keyword>NULLABLE</keyword>
 | 
				
			||||||
 | 
							<keyword>NULLIF</keyword>
 | 
				
			||||||
 | 
							<keyword>NULLS</keyword>
 | 
				
			||||||
 | 
							<keyword>NUMBER</keyword>
 | 
				
			||||||
 | 
							<keyword>OBJECT</keyword>
 | 
				
			||||||
 | 
							<keyword>OCTET_LENGTH</keyword>
 | 
				
			||||||
 | 
							<keyword>OCTETS</keyword>
 | 
				
			||||||
 | 
							<keyword>OPTION</keyword>
 | 
				
			||||||
 | 
							<keyword>OPTIONS</keyword>
 | 
				
			||||||
 | 
							<keyword>ORDERING</keyword>
 | 
				
			||||||
 | 
							<keyword>ORDINALITY</keyword>
 | 
				
			||||||
 | 
							<keyword>OTHERS</keyword>
 | 
				
			||||||
 | 
							<keyword>OVERLAY</keyword>
 | 
				
			||||||
 | 
							<keyword>OVERRIDING</keyword>
 | 
				
			||||||
 | 
							<keyword>PAD</keyword>
 | 
				
			||||||
 | 
							<keyword>PARAMETER_MODE</keyword>
 | 
				
			||||||
 | 
							<keyword>PARAMETER_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>PARAMETER_ORDINAL_POSITION</keyword>
 | 
				
			||||||
 | 
							<keyword>PARAMETER_SPECIFIC_CATALOG</keyword>
 | 
				
			||||||
 | 
							<keyword>PARAMETER_SPECIFIC_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>PARAMETER_SPECIFIC_SCHEMA</keyword>
 | 
				
			||||||
 | 
							<keyword>PARTIAL</keyword>
 | 
				
			||||||
 | 
							<keyword>PASCAL</keyword>
 | 
				
			||||||
 | 
							<keyword>PATH</keyword>
 | 
				
			||||||
 | 
							<keyword>PERCENT_RANK</keyword>
 | 
				
			||||||
 | 
							<keyword>PERCENTILE_CONT</keyword>
 | 
				
			||||||
 | 
							<keyword>PERCENTILE_DISC</keyword>
 | 
				
			||||||
 | 
							<keyword>PLACING</keyword>
 | 
				
			||||||
 | 
							<keyword>PLI</keyword>
 | 
				
			||||||
 | 
							<keyword>POSITION</keyword>
 | 
				
			||||||
 | 
							<keyword>POWER</keyword>
 | 
				
			||||||
 | 
							<keyword>PRECEDING</keyword>
 | 
				
			||||||
 | 
							<keyword>PRESERVE</keyword>
 | 
				
			||||||
 | 
							<keyword>PRIOR</keyword>
 | 
				
			||||||
 | 
							<keyword>PRIVILEGES</keyword>
 | 
				
			||||||
 | 
							<keyword>PUBLIC</keyword>
 | 
				
			||||||
 | 
							<keyword>RANK</keyword>
 | 
				
			||||||
 | 
							<keyword>READ</keyword>
 | 
				
			||||||
 | 
							<keyword>RELATIVE</keyword>
 | 
				
			||||||
 | 
							<keyword>REPEATABLE</keyword>
 | 
				
			||||||
 | 
							<keyword>RESTART</keyword>
 | 
				
			||||||
 | 
							<keyword>RETURNED_CARDINALITY</keyword>
 | 
				
			||||||
 | 
							<keyword>RETURNED_LENGTH</keyword>
 | 
				
			||||||
 | 
							<keyword>RETURNED_OCTET_LENGTH</keyword>
 | 
				
			||||||
 | 
							<keyword>RETURNED_SQLSTATE</keyword>
 | 
				
			||||||
 | 
							<keyword>ROLE</keyword>
 | 
				
			||||||
 | 
							<keyword>ROUTINE_CATALOG</keyword>
 | 
				
			||||||
 | 
							<keyword>ROUTINE_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>ROUTINE_SCHEMA</keyword>
 | 
				
			||||||
 | 
							<keyword>ROUTINE</keyword>
 | 
				
			||||||
 | 
							<keyword>ROW_COUNT</keyword>
 | 
				
			||||||
 | 
							<keyword>ROW_NUMBER</keyword>
 | 
				
			||||||
 | 
							<keyword>SCALE</keyword>
 | 
				
			||||||
 | 
							<keyword>SCHEMA_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>SCHEMA</keyword>
 | 
				
			||||||
 | 
							<keyword>SCOPE_CATALOG</keyword>
 | 
				
			||||||
 | 
							<keyword>SCOPE_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>SCOPE_SCHEMA</keyword>
 | 
				
			||||||
 | 
							<keyword>SECTION</keyword>
 | 
				
			||||||
 | 
							<keyword>SECURITY</keyword>
 | 
				
			||||||
 | 
							<keyword>SELF</keyword>
 | 
				
			||||||
 | 
							<keyword>SEQUENCE</keyword>
 | 
				
			||||||
 | 
							<keyword>SERIALIZABLE</keyword>
 | 
				
			||||||
 | 
							<keyword>SERVER_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>SESSION</keyword>
 | 
				
			||||||
 | 
							<keyword>SETS</keyword>
 | 
				
			||||||
 | 
							<keyword>SIMPLE</keyword>
 | 
				
			||||||
 | 
							<keyword>SIZE</keyword>
 | 
				
			||||||
 | 
							<keyword>SOURCE</keyword>
 | 
				
			||||||
 | 
							<keyword>SPACE</keyword>
 | 
				
			||||||
 | 
							<keyword>SPECIFIC_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>SQRT</keyword>
 | 
				
			||||||
 | 
							<keyword>STATE</keyword>
 | 
				
			||||||
 | 
							<keyword>STATEMENT</keyword>
 | 
				
			||||||
 | 
							<keyword>STDDEV_POP</keyword>
 | 
				
			||||||
 | 
							<keyword>STDDEV_SAMP</keyword>
 | 
				
			||||||
 | 
							<keyword>STRUCTURE</keyword>
 | 
				
			||||||
 | 
							<keyword>STYLE</keyword>
 | 
				
			||||||
 | 
							<keyword>SUBCLASS_ORIGIN</keyword>
 | 
				
			||||||
 | 
							<keyword>SUBSTRING</keyword>
 | 
				
			||||||
 | 
							<keyword>SUM</keyword>
 | 
				
			||||||
 | 
							<keyword>TABLE_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>TABLESAMPLE</keyword>
 | 
				
			||||||
 | 
							<keyword>TEMPORARY</keyword>
 | 
				
			||||||
 | 
							<keyword>TIES</keyword>
 | 
				
			||||||
 | 
							<keyword>TOP_LEVEL_COUNT</keyword>
 | 
				
			||||||
 | 
							<keyword>TRANSACTION_ACTIVE</keyword>
 | 
				
			||||||
 | 
							<keyword>TRANSACTION</keyword>
 | 
				
			||||||
 | 
							<keyword>TRANSACTIONS_COMMITTED</keyword>
 | 
				
			||||||
 | 
							<keyword>TRANSACTIONS_ROLLED_BACK</keyword>
 | 
				
			||||||
 | 
							<keyword>TRANSFORM</keyword>
 | 
				
			||||||
 | 
							<keyword>TRANSFORMS</keyword>
 | 
				
			||||||
 | 
							<keyword>TRANSLATE</keyword>
 | 
				
			||||||
 | 
							<keyword>TRIGGER_CATALOG</keyword>
 | 
				
			||||||
 | 
							<keyword>TRIGGER_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>TRIGGER_SCHEMA</keyword>
 | 
				
			||||||
 | 
							<keyword>TRIM</keyword>
 | 
				
			||||||
 | 
							<keyword>TYPE</keyword>
 | 
				
			||||||
 | 
							<keyword>UNBOUNDED</keyword>
 | 
				
			||||||
 | 
							<keyword>UNCOMMITTED</keyword>
 | 
				
			||||||
 | 
							<keyword>UNDER</keyword>
 | 
				
			||||||
 | 
							<keyword>UNNAMED</keyword>
 | 
				
			||||||
 | 
							<keyword>USAGE</keyword>
 | 
				
			||||||
 | 
							<keyword>USER_DEFINED_TYPE_CATALOG</keyword>
 | 
				
			||||||
 | 
							<keyword>USER_DEFINED_TYPE_CODE</keyword>
 | 
				
			||||||
 | 
							<keyword>USER_DEFINED_TYPE_NAME</keyword>
 | 
				
			||||||
 | 
							<keyword>USER_DEFINED_TYPE_SCHEMA</keyword>
 | 
				
			||||||
 | 
							<keyword>VIEW</keyword>
 | 
				
			||||||
 | 
							<keyword>WORK</keyword>
 | 
				
			||||||
 | 
							<keyword>WRITE</keyword>
 | 
				
			||||||
 | 
							<keyword>ZONE</keyword>
 | 
				
			||||||
 | 
							<!-- non reserved -->
 | 
				
			||||||
 | 
							<keyword>ADD</keyword>
 | 
				
			||||||
 | 
							<keyword>ALL</keyword>
 | 
				
			||||||
 | 
							<keyword>ALLOCATE</keyword>
 | 
				
			||||||
 | 
							<keyword>ALTER</keyword>
 | 
				
			||||||
 | 
							<keyword>AND</keyword>
 | 
				
			||||||
 | 
							<keyword>ANY</keyword>
 | 
				
			||||||
 | 
							<keyword>ARE</keyword>
 | 
				
			||||||
 | 
							<keyword>ARRAY</keyword>
 | 
				
			||||||
 | 
							<keyword>AS</keyword>
 | 
				
			||||||
 | 
							<keyword>ASENSITIVE</keyword>
 | 
				
			||||||
 | 
							<keyword>ASYMMETRIC</keyword>
 | 
				
			||||||
 | 
							<keyword>AT</keyword>
 | 
				
			||||||
 | 
							<keyword>ATOMIC</keyword>
 | 
				
			||||||
 | 
							<keyword>AUTHORIZATION</keyword>
 | 
				
			||||||
 | 
							<keyword>BEGIN</keyword>
 | 
				
			||||||
 | 
							<keyword>BETWEEN</keyword>
 | 
				
			||||||
 | 
							<keyword>BIGINT</keyword>
 | 
				
			||||||
 | 
							<keyword>BINARY</keyword>
 | 
				
			||||||
 | 
							<keyword>BLOB</keyword>
 | 
				
			||||||
 | 
							<keyword>BOOLEAN</keyword>
 | 
				
			||||||
 | 
							<keyword>BOTH</keyword>
 | 
				
			||||||
 | 
							<keyword>BY</keyword>
 | 
				
			||||||
 | 
							<keyword>CALL</keyword>
 | 
				
			||||||
 | 
							<keyword>CALLED</keyword>
 | 
				
			||||||
 | 
							<keyword>CASCADED</keyword>
 | 
				
			||||||
 | 
							<keyword>CASE</keyword>
 | 
				
			||||||
 | 
							<keyword>CAST</keyword>
 | 
				
			||||||
 | 
							<keyword>CHAR</keyword>
 | 
				
			||||||
 | 
							<keyword>CHARACTER</keyword>
 | 
				
			||||||
 | 
							<keyword>CHECK</keyword>
 | 
				
			||||||
 | 
							<keyword>CLOB</keyword>
 | 
				
			||||||
 | 
							<keyword>CLOSE</keyword>
 | 
				
			||||||
 | 
							<keyword>COLLATE</keyword>
 | 
				
			||||||
 | 
							<keyword>COLUMN</keyword>
 | 
				
			||||||
 | 
							<keyword>COMMIT</keyword>
 | 
				
			||||||
 | 
							<keyword>CONNECT</keyword>
 | 
				
			||||||
 | 
							<keyword>CONSTRAINT</keyword>
 | 
				
			||||||
 | 
							<keyword>CONTINUE</keyword>
 | 
				
			||||||
 | 
							<keyword>CORRESPONDING</keyword>
 | 
				
			||||||
 | 
							<keyword>CREATE</keyword>
 | 
				
			||||||
 | 
							<keyword>CROSS</keyword>
 | 
				
			||||||
 | 
							<keyword>CUBE</keyword>
 | 
				
			||||||
 | 
							<keyword>CURRENT_DATE</keyword>
 | 
				
			||||||
 | 
							<keyword>CURRENT_DEFAULT_TRANSFORM_GROUP</keyword>
 | 
				
			||||||
 | 
							<keyword>CURRENT_PATH</keyword>
 | 
				
			||||||
 | 
							<keyword>CURRENT_ROLE</keyword>
 | 
				
			||||||
 | 
							<keyword>CURRENT_TIME</keyword>
 | 
				
			||||||
 | 
							<keyword>CURRENT_TIMESTAMP</keyword>
 | 
				
			||||||
 | 
							<keyword>CURRENT_TRANSFORM_GROUP_FOR_TYPE</keyword>
 | 
				
			||||||
 | 
							<keyword>CURRENT_USER</keyword>
 | 
				
			||||||
 | 
							<keyword>CURRENT</keyword>
 | 
				
			||||||
 | 
							<keyword>CURSOR</keyword>
 | 
				
			||||||
 | 
							<keyword>CYCLE</keyword>
 | 
				
			||||||
 | 
							<keyword>DATE</keyword>
 | 
				
			||||||
 | 
							<keyword>DAY</keyword>
 | 
				
			||||||
 | 
							<keyword>DEALLOCATE</keyword>
 | 
				
			||||||
 | 
							<keyword>DEC</keyword>
 | 
				
			||||||
 | 
							<keyword>DECIMAL</keyword>
 | 
				
			||||||
 | 
							<keyword>DECLARE</keyword>
 | 
				
			||||||
 | 
							<keyword>DEFAULT</keyword>
 | 
				
			||||||
 | 
							<keyword>DELETE</keyword>
 | 
				
			||||||
 | 
							<keyword>DEREF</keyword>
 | 
				
			||||||
 | 
							<keyword>DESCRIBE</keyword>
 | 
				
			||||||
 | 
							<keyword>DETERMINISTIC</keyword>
 | 
				
			||||||
 | 
							<keyword>DISCONNECT</keyword>
 | 
				
			||||||
 | 
							<keyword>DISTINCT</keyword>
 | 
				
			||||||
 | 
							<keyword>DOUBLE</keyword>
 | 
				
			||||||
 | 
							<keyword>DROP</keyword>
 | 
				
			||||||
 | 
							<keyword>DYNAMIC</keyword>
 | 
				
			||||||
 | 
							<keyword>EACH</keyword>
 | 
				
			||||||
 | 
							<keyword>ELEMENT</keyword>
 | 
				
			||||||
 | 
							<keyword>ELSE</keyword>
 | 
				
			||||||
 | 
							<keyword>END</keyword>
 | 
				
			||||||
 | 
							<keyword>END-EXEC</keyword>
 | 
				
			||||||
 | 
							<keyword>ESCAPE</keyword>
 | 
				
			||||||
 | 
							<keyword>EXCEPT</keyword>
 | 
				
			||||||
 | 
							<keyword>EXEC</keyword>
 | 
				
			||||||
 | 
							<keyword>EXECUTE</keyword>
 | 
				
			||||||
 | 
							<keyword>EXISTS</keyword>
 | 
				
			||||||
 | 
							<keyword>EXTERNAL</keyword>
 | 
				
			||||||
 | 
							<keyword>FALSE</keyword>
 | 
				
			||||||
 | 
							<keyword>FETCH</keyword>
 | 
				
			||||||
 | 
							<keyword>FILTER</keyword>
 | 
				
			||||||
 | 
							<keyword>FLOAT</keyword>
 | 
				
			||||||
 | 
							<keyword>FOR</keyword>
 | 
				
			||||||
 | 
							<keyword>FOREIGN</keyword>
 | 
				
			||||||
 | 
							<keyword>FREE</keyword>
 | 
				
			||||||
 | 
							<keyword>FROM</keyword>
 | 
				
			||||||
 | 
							<keyword>FULL</keyword>
 | 
				
			||||||
 | 
							<keyword>FUNCTION</keyword>
 | 
				
			||||||
 | 
							<keyword>GET</keyword>
 | 
				
			||||||
 | 
							<keyword>GLOBAL</keyword>
 | 
				
			||||||
 | 
							<keyword>GRANT</keyword>
 | 
				
			||||||
 | 
							<keyword>GROUP</keyword>
 | 
				
			||||||
 | 
							<keyword>GROUPING</keyword>
 | 
				
			||||||
 | 
							<keyword>HAVING</keyword>
 | 
				
			||||||
 | 
							<keyword>HOLD</keyword>
 | 
				
			||||||
 | 
							<keyword>HOUR</keyword>
 | 
				
			||||||
 | 
							<keyword>IDENTITY</keyword>
 | 
				
			||||||
 | 
							<keyword>IMMEDIATE</keyword>
 | 
				
			||||||
 | 
							<keyword>IN</keyword>
 | 
				
			||||||
 | 
							<keyword>INDICATOR</keyword>
 | 
				
			||||||
 | 
							<keyword>INNER</keyword>
 | 
				
			||||||
 | 
							<keyword>INOUT</keyword>
 | 
				
			||||||
 | 
							<keyword>INPUT</keyword>
 | 
				
			||||||
 | 
							<keyword>INSENSITIVE</keyword>
 | 
				
			||||||
 | 
							<keyword>INSERT</keyword>
 | 
				
			||||||
 | 
							<keyword>INT</keyword>
 | 
				
			||||||
 | 
							<keyword>INTEGER</keyword>
 | 
				
			||||||
 | 
							<keyword>INTERSECT</keyword>
 | 
				
			||||||
 | 
							<keyword>INTERVAL</keyword>
 | 
				
			||||||
 | 
							<keyword>INTO</keyword>
 | 
				
			||||||
 | 
							<keyword>IS</keyword>
 | 
				
			||||||
 | 
							<keyword>ISOLATION</keyword>
 | 
				
			||||||
 | 
							<keyword>JOIN</keyword>
 | 
				
			||||||
 | 
							<keyword>LANGUAGE</keyword>
 | 
				
			||||||
 | 
							<keyword>LARGE</keyword>
 | 
				
			||||||
 | 
							<keyword>LATERAL</keyword>
 | 
				
			||||||
 | 
							<keyword>LEADING</keyword>
 | 
				
			||||||
 | 
							<keyword>LEFT</keyword>
 | 
				
			||||||
 | 
							<keyword>LIKE</keyword>
 | 
				
			||||||
 | 
							<keyword>LOCAL</keyword>
 | 
				
			||||||
 | 
							<keyword>LOCALTIME</keyword>
 | 
				
			||||||
 | 
							<keyword>LOCALTIMESTAMP</keyword>
 | 
				
			||||||
 | 
							<keyword>MATCH</keyword>
 | 
				
			||||||
 | 
							<keyword>MEMBER</keyword>
 | 
				
			||||||
 | 
							<keyword>MERGE</keyword>
 | 
				
			||||||
 | 
							<keyword>METHOD</keyword>
 | 
				
			||||||
 | 
							<keyword>MINUTE</keyword>
 | 
				
			||||||
 | 
							<keyword>MODIFIES</keyword>
 | 
				
			||||||
 | 
							<keyword>MODULE</keyword>
 | 
				
			||||||
 | 
							<keyword>MONTH</keyword>
 | 
				
			||||||
 | 
							<keyword>MULTISET</keyword>
 | 
				
			||||||
 | 
							<keyword>NATIONAL</keyword>
 | 
				
			||||||
 | 
							<keyword>NATURAL</keyword>
 | 
				
			||||||
 | 
							<keyword>NCHAR</keyword>
 | 
				
			||||||
 | 
							<keyword>NCLOB</keyword>
 | 
				
			||||||
 | 
							<keyword>NEW</keyword>
 | 
				
			||||||
 | 
							<keyword>NO</keyword>
 | 
				
			||||||
 | 
							<keyword>NONE</keyword>
 | 
				
			||||||
 | 
							<keyword>NOT</keyword>
 | 
				
			||||||
 | 
							<keyword>NULL</keyword>
 | 
				
			||||||
 | 
							<keyword>NUMERIC</keyword>
 | 
				
			||||||
 | 
							<keyword>OF</keyword>
 | 
				
			||||||
 | 
							<keyword>OLD</keyword>
 | 
				
			||||||
 | 
							<keyword>ON</keyword>
 | 
				
			||||||
 | 
							<keyword>ONLY</keyword>
 | 
				
			||||||
 | 
							<keyword>OPEN</keyword>
 | 
				
			||||||
 | 
							<keyword>OR</keyword>
 | 
				
			||||||
 | 
							<keyword>ORDER</keyword>
 | 
				
			||||||
 | 
							<keyword>OUT</keyword>
 | 
				
			||||||
 | 
							<keyword>OUTER</keyword>
 | 
				
			||||||
 | 
							<keyword>OUTPUT</keyword>
 | 
				
			||||||
 | 
							<keyword>OVER</keyword>
 | 
				
			||||||
 | 
							<keyword>OVERLAPS</keyword>
 | 
				
			||||||
 | 
							<keyword>PARAMETER</keyword>
 | 
				
			||||||
 | 
							<keyword>PARTITION</keyword>
 | 
				
			||||||
 | 
							<keyword>PRECISION</keyword>
 | 
				
			||||||
 | 
							<keyword>PREPARE</keyword>
 | 
				
			||||||
 | 
							<keyword>PRIMARY</keyword>
 | 
				
			||||||
 | 
							<keyword>PROCEDURE</keyword>
 | 
				
			||||||
 | 
							<keyword>RANGE</keyword>
 | 
				
			||||||
 | 
							<keyword>READS</keyword>
 | 
				
			||||||
 | 
							<keyword>REAL</keyword>
 | 
				
			||||||
 | 
							<keyword>RECURSIVE</keyword>
 | 
				
			||||||
 | 
							<keyword>REF</keyword>
 | 
				
			||||||
 | 
							<keyword>REFERENCES</keyword>
 | 
				
			||||||
 | 
							<keyword>REFERENCING</keyword>
 | 
				
			||||||
 | 
							<keyword>REGR_AVGX</keyword>
 | 
				
			||||||
 | 
							<keyword>REGR_AVGY</keyword>
 | 
				
			||||||
 | 
							<keyword>REGR_COUNT</keyword>
 | 
				
			||||||
 | 
							<keyword>REGR_INTERCEPT</keyword>
 | 
				
			||||||
 | 
							<keyword>REGR_R2</keyword>
 | 
				
			||||||
 | 
							<keyword>REGR_SLOPE</keyword>
 | 
				
			||||||
 | 
							<keyword>REGR_SXX</keyword>
 | 
				
			||||||
 | 
							<keyword>REGR_SXY</keyword>
 | 
				
			||||||
 | 
							<keyword>REGR_SYY</keyword>
 | 
				
			||||||
 | 
							<keyword>RELEASE</keyword>
 | 
				
			||||||
 | 
							<keyword>RESULT</keyword>
 | 
				
			||||||
 | 
							<keyword>RETURN</keyword>
 | 
				
			||||||
 | 
							<keyword>RETURNS</keyword>
 | 
				
			||||||
 | 
							<keyword>REVOKE</keyword>
 | 
				
			||||||
 | 
							<keyword>RIGHT</keyword>
 | 
				
			||||||
 | 
							<keyword>ROLLBACK</keyword>
 | 
				
			||||||
 | 
							<keyword>ROLLUP</keyword>
 | 
				
			||||||
 | 
							<keyword>ROW</keyword>
 | 
				
			||||||
 | 
							<keyword>ROWS</keyword>
 | 
				
			||||||
 | 
							<keyword>SAVEPOINT</keyword>
 | 
				
			||||||
 | 
							<keyword>SCROLL</keyword>
 | 
				
			||||||
 | 
							<keyword>SEARCH</keyword>
 | 
				
			||||||
 | 
							<keyword>SECOND</keyword>
 | 
				
			||||||
 | 
							<keyword>SELECT</keyword>
 | 
				
			||||||
 | 
							<keyword>SENSITIVE</keyword>
 | 
				
			||||||
 | 
							<keyword>SESSION_USER</keyword>
 | 
				
			||||||
 | 
							<keyword>SET</keyword>
 | 
				
			||||||
 | 
							<keyword>SIMILAR</keyword>
 | 
				
			||||||
 | 
							<keyword>SMALLINT</keyword>
 | 
				
			||||||
 | 
							<keyword>SOME</keyword>
 | 
				
			||||||
 | 
							<keyword>SPECIFIC</keyword>
 | 
				
			||||||
 | 
							<keyword>SPECIFICTYPE</keyword>
 | 
				
			||||||
 | 
							<keyword>SQL</keyword>
 | 
				
			||||||
 | 
							<keyword>SQLEXCEPTION</keyword>
 | 
				
			||||||
 | 
							<keyword>SQLSTATE</keyword>
 | 
				
			||||||
 | 
							<keyword>SQLWARNING</keyword>
 | 
				
			||||||
 | 
							<keyword>START</keyword>
 | 
				
			||||||
 | 
							<keyword>STATIC</keyword>
 | 
				
			||||||
 | 
							<keyword>SUBMULTISET</keyword>
 | 
				
			||||||
 | 
							<keyword>SYMMETRIC</keyword>
 | 
				
			||||||
 | 
							<keyword>SYSTEM_USER</keyword>
 | 
				
			||||||
 | 
							<keyword>SYSTEM</keyword>
 | 
				
			||||||
 | 
							<keyword>TABLE</keyword>
 | 
				
			||||||
 | 
							<keyword>THEN</keyword>
 | 
				
			||||||
 | 
							<keyword>TIME</keyword>
 | 
				
			||||||
 | 
							<keyword>TIMESTAMP</keyword>
 | 
				
			||||||
 | 
							<keyword>TIMEZONE_HOUR</keyword>
 | 
				
			||||||
 | 
							<keyword>TIMEZONE_MINUTE</keyword>
 | 
				
			||||||
 | 
							<keyword>TO</keyword>
 | 
				
			||||||
 | 
							<keyword>TRAILING</keyword>
 | 
				
			||||||
 | 
							<keyword>TRANSLATION</keyword>
 | 
				
			||||||
 | 
							<keyword>TREAT</keyword>
 | 
				
			||||||
 | 
							<keyword>TRIGGER</keyword>
 | 
				
			||||||
 | 
							<keyword>TRUE</keyword>
 | 
				
			||||||
 | 
							<keyword>UESCAPE</keyword>
 | 
				
			||||||
 | 
							<keyword>UNION</keyword>
 | 
				
			||||||
 | 
							<keyword>UNIQUE</keyword>
 | 
				
			||||||
 | 
							<keyword>UNKNOWN</keyword>
 | 
				
			||||||
 | 
							<keyword>UNNEST</keyword>
 | 
				
			||||||
 | 
							<keyword>UPDATE</keyword>
 | 
				
			||||||
 | 
							<keyword>UPPER</keyword>
 | 
				
			||||||
 | 
							<keyword>USER</keyword>
 | 
				
			||||||
 | 
							<keyword>USING</keyword>
 | 
				
			||||||
 | 
							<keyword>VALUE</keyword>
 | 
				
			||||||
 | 
							<keyword>VALUES</keyword>
 | 
				
			||||||
 | 
							<keyword>VAR_POP</keyword>
 | 
				
			||||||
 | 
							<keyword>VAR_SAMP</keyword>
 | 
				
			||||||
 | 
							<keyword>VARCHAR</keyword>
 | 
				
			||||||
 | 
							<keyword>VARYING</keyword>
 | 
				
			||||||
 | 
							<keyword>WHEN</keyword>
 | 
				
			||||||
 | 
							<keyword>WHENEVER</keyword>
 | 
				
			||||||
 | 
							<keyword>WHERE</keyword>
 | 
				
			||||||
 | 
							<keyword>WIDTH_BUCKET</keyword>
 | 
				
			||||||
 | 
							<keyword>WINDOW</keyword>
 | 
				
			||||||
 | 
							<keyword>WITH</keyword>
 | 
				
			||||||
 | 
							<keyword>WITHIN</keyword>
 | 
				
			||||||
 | 
							<keyword>WITHOUT</keyword>
 | 
				
			||||||
 | 
							<keyword>YEAR</keyword>
 | 
				
			||||||
 | 
						</highlighter>
 | 
				
			||||||
 | 
					</highlighters>
 | 
				
			||||||