You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@training.apache.org by rb...@apache.org on 2026/05/24 17:12:58 UTC
(training) 01/01: Add Ant starter presentation
This is an automated email from the ASF dual-hosted git repository.
rbowen pushed a commit to branch ant-starter-presentation
in repository https://gitbox.apache.org/repos/asf/training.git
commit 69b46470c2c447dabfa78b2fbdc5025637df6f27
Author: Rich Bowen <rb...@rcbowen.com>
AuthorDate: Sun May 24 13:11:57 2026 -0400
Add Ant starter presentation
Generated training module for Apache Ant.
Content researched from ant.apache.org.
Requires human review before publishing.
---
content/Apache/Ant/metadata.yaml | 28 ++
content/Apache/Ant/pom.xml | 39 ++
.../Apache/Ant/src/main/asciidoc/_settings.adoc | 36 ++
.../Ant/src/main/asciidoc/images/project-logo.svg | 5 +
content/Apache/Ant/src/main/asciidoc/index.adoc | 510 +++++++++++++++++++++
content/Apache/Ant/src/main/theme/apache.css | 457 ++++++++++++++++++
6 files changed, 1075 insertions(+)
diff --git a/content/Apache/Ant/metadata.yaml b/content/Apache/Ant/metadata.yaml
new file mode 100644
index 0000000..da4beda
--- /dev/null
+++ b/content/Apache/Ant/metadata.yaml
@@ -0,0 +1,28 @@
+# 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.
+
+title: "Apache Ant"
+project_id: ant
+description: "Java-based build tool with XML build files"
+tags:
+ - build-tools
+ - jvm
+ - intro
+ - developer
+duration: "45-60 min"
+level: beginner
+language: java
+slides: 29
+updated: "2026-05-24"
diff --git a/content/Apache/Ant/pom.xml b/content/Apache/Ant/pom.xml
new file mode 100644
index 0000000..4b47e9a
--- /dev/null
+++ b/content/Apache/Ant/pom.xml
@@ -0,0 +1,39 @@
+<?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.
+
+-->
+<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>
+
+ <parent>
+ <groupId>org.apache.training</groupId>
+ <artifactId>content-parent-pom</artifactId>
+ <version>1.5.0-SNAPSHOT</version>
+ <relativePath>../../../tools/content-parent-pom/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.apache.training.content</groupId>
+ <artifactId>training-content-apache-ant</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>war</packaging>
+
+ <name>Training: Content: Apache: Ant</name>
+ <description>Training module for Apache Ant build tool</description>
+
+</project>
diff --git a/content/Apache/Ant/src/main/asciidoc/_settings.adoc b/content/Apache/Ant/src/main/asciidoc/_settings.adoc
new file mode 100644
index 0000000..9a16917
--- /dev/null
+++ b/content/Apache/Ant/src/main/asciidoc/_settings.adoc
@@ -0,0 +1,36 @@
+////
+
+ 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.
+
+////
+
+:goto:
+:menu:
+:navigation:
+:status:
+:arrows:
+:revealjs_theme: black
+:revealjs_progress: true
+:revealjs_slidenumber: true
+:revealjs_center: false
+:revealjs_history: true
+:customcss: reveal.js-5.2.1/dist/theme/apache.css
+:favicon: https://apache.org/favicon.ico
+:icons: font
+:imagesdir: images
+:sourcedir: ../java
+:idprefix:
+:idseparator: -
diff --git a/content/Apache/Ant/src/main/asciidoc/images/project-logo.svg b/content/Apache/Ant/src/main/asciidoc/images/project-logo.svg
new file mode 100644
index 0000000..b9289bc
--- /dev/null
+++ b/content/Apache/Ant/src/main/asciidoc/images/project-logo.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="120" height="36" viewBox="0 0 120 36">
+ <rect width="120" height="36" fill="none"/>
+ <text x="60" y="22" text-anchor="middle" font-family="sans-serif" font-size="10" fill="#999">project-logo</text>
+</svg>
diff --git a/content/Apache/Ant/src/main/asciidoc/index.adoc b/content/Apache/Ant/src/main/asciidoc/index.adoc
new file mode 100644
index 0000000..a6f3269
--- /dev/null
+++ b/content/Apache/Ant/src/main/asciidoc/index.adoc
@@ -0,0 +1,510 @@
+////
+ 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.
+
+////
+
+include::_settings.adoc[]
+:presenter_name: Your Name
+:presenter_company: Your Company
+:description: Introduction to Apache Ant
+:keywords: Apache, Ant, Build Tool, Java
+:author: Your Name
+:email: Your email
+:position: Your role
+
+== Apache Ant
+
+image::https://ant.apache.org/images/ant_logo_large.gif[Apache Ant, width=400, align=center]
+
+Java's Original Build Tool
+
+== Who am I?
+
+* {presenter_name}
+* {presenter_company}
+* {position}
+* {email}
+
+== Table of Contents
+
+* *Part 1:* What is Apache Ant?
+* *Part 2:* Installation & Getting Started
+* *Part 3:* Community Participation
+
+// ==========================================================
+// PART 1: WHAT IS IT?
+// ==========================================================
+
+== What is Apache Ant?
+
+* A Java-based build tool for automating software build processes
+* One of the oldest and most established Apache projects
+* Top-Level Project (TLP) since November 2002
+* Uses XML-based build files (`build.xml`)
+
+[.notes]
+--
+Apache Ant ("Another Neat Tool") is a Java library and command-line tool
+whose mission is to drive processes described in build files as targets
+and extension points dependent upon each other. It is one of the most
+venerable projects at the ASF.
+--
+
+== History of Apache Ant
+
+* Created by *James Duncan Davidson* in 2000
+* Built while developing Apache Tomcat
+* Needed a cross-platform build tool (Make was Unix-centric)
+* Donated to the Apache Software Foundation
+* Predecessor to Maven and Gradle
+
+[.notes]
+--
+James Duncan Davidson created Ant because he was frustrated with
+Make's platform dependencies while building Tomcat. The name stands
+for "Another Neat Tool." It quickly became the standard Java build
+tool before Maven and later Gradle emerged. Still widely used in
+legacy and enterprise Java projects.
+--
+
+== Why Ant? The Problem with Make
+
+* `make` relies on shell commands — platform-dependent
+* Tab-sensitivity causes subtle, hard-to-debug errors
+* No native understanding of Java compilation model
+* Ant: Java-native, XML-driven, platform-independent
+
+[.notes]
+--
+Make was designed for C/Unix environments. Java projects needed
+something that understood classpaths, JARs, and could run identically
+on Windows, Linux, and macOS without relying on shell specifics.
+--
+
+== Key Features
+
+* *XML-based build files* — declarative, structured
+* *Platform independence* — runs anywhere Java runs
+* *Extensible* — custom tasks written in Java
+* *Rich built-in task library* — 150+ tasks
+* *Ivy* — optional dependency management
+
+[.notes]
+--
+Ant ships with over 150 built-in tasks. Custom tasks are simply
+Java classes that extend org.apache.tools.ant.Task. This makes
+Ant incredibly flexible for specialized build scenarios. JUnit
+integration provides first-class test support.
+--
+
+== How Ant Works
+
+[source,text]
+----
+┌─────────────┐ ┌──────────────┐ ┌──────────────┐
+│ build.xml │────▶│ Ant Engine │────▶│ Outputs │
+│ (targets, │ │ (resolves │ │ (.class, │
+│ tasks) │ │ deps, │ │ .jar, │
+│ │ │ executes) │ │ reports) │
+└─────────────┘ └──────────────┘ └──────────────┘
+----
+
+* Ant reads `build.xml`, resolves target dependencies
+* Executes tasks in order, produces build artifacts
+
+== Ant vs. Make vs. Maven vs. Gradle
+
+[cols="1,1,1,1", options="header"]
+|===
+| Feature | Ant | Maven | Gradle
+| Config format | XML | XML | Groovy/Kotlin
+| Convention | None | Strong | Flexible
+| Dependency mgmt | Via Ivy | Built-in | Built-in
+| Flexibility | Very high | Opinionated | High
+|===
+
+[.notes]
+--
+Ant gives you maximum flexibility with zero conventions imposed.
+Maven took the opposite approach with "convention over configuration."
+Gradle tried to combine the best of both worlds.
+--
+
+== Sub-Projects
+
+* *Apache Ivy* — Dependency management (like Maven deps, but for Ant)
+* *Antlibs* — Libraries of reusable Ant tasks
+** antlib:compress, antlib:dotnet, antlib:svn, and more
+
+[.notes]
+--
+Ivy is the most significant sub-project. It brings transitive dependency
+resolution to Ant builds, allowing integration with Maven repositories.
+Antlibs provide optional task collections that extend Ant's capabilities
+without bloating the core distribution.
+--
+
+// ==========================================================
+// PART 2: INSTALLATION & GETTING STARTED
+// ==========================================================
+
+== Part 2: Installation & Getting Started
+
+image::https://ant.apache.org/images/ant_logo_large.gif[width=200, align=center]
+
+Prerequisites: *Java 8* or higher
+
+== Installation Methods
+
+*Download:* https://ant.apache.org/bindownload.cgi
+
+*Package managers:*
+
+[source,bash]
+----
+# macOS
+brew install ant
+# Debian/Ubuntu
+apt install ant
+# Windows (Chocolatey)
+choco install ant
+----
+
+== Environment Setup
+
+[source,bash]
+----
+# Set ANT_HOME
+export ANT_HOME=/usr/local/opt/ant/libexec
+# Add to PATH
+export PATH=$ANT_HOME/bin:$PATH
+# Verify installation
+ant -version
+----
+
+Expected output: `Apache Ant(TM) version 1.10.14`
+
+[.notes]
+--
+On macOS with Homebrew, ANT_HOME is typically set automatically.
+On Windows, set these as system environment variables.
+JAVA_HOME must also be set correctly.
+--
+
+== Your First build.xml (Part 1)
+
+[source,xml]
+----
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="HelloWorld" default="run" basedir=".">
+ <property name="src.dir" value="src"/>
+ <property name="build.dir" value="build"/>
+
+ <target name="clean">
+ <delete dir="${build.dir}"/>
+ </target>
+</project>
+----
+
+* Properties define reusable values
+* Targets group related tasks
+
+== Your First build.xml (Part 2)
+
+[source,xml]
+----
+<target name="compile">
+ <mkdir dir="${build.dir}"/>
+ <javac srcdir="${src.dir}"
+ destdir="${build.dir}"
+ includeantruntime="false"/>
+</target>
+<target name="run" depends="compile">
+ <java classname="HelloWorld"
+ classpath="${build.dir}"/>
+</target>
+----
+
+* `depends` creates a target execution chain
+* Run with: `ant run` (or just `ant` since `run` is the default)
+
+== Key Concepts: Projects
+
+[source,xml]
+----
+<project name="MyApp" default="build" basedir=".">
+ ...
+</project>
+----
+
+* Every build file has exactly one `<project>` element
+* `name` — project identifier
+* `default` — target to run when none specified
+* `basedir` — base directory for path calculations
+
+== Key Concepts: Targets
+
+[source,xml]
+----
+<target name="compile" depends="init"
+ description="Compile Java sources">
+ ...
+</target>
+----
+
+* Named groups of tasks
+* Can depend on other targets (DAG execution)
+* `depends` — comma-separated prerequisite targets
+* `description` — shown with `ant -projecthelp`
+
+== Key Concepts: Tasks
+
+[source,xml]
+----
+<javac srcdir="src" destdir="build/classes"/>
+<jar destfile="dist/myapp.jar"
+ basedir="build/classes"/>
+<junit printsummary="yes" haltonfailure="yes">
+ <test name="com.example.MyTest"/>
+</junit>
+----
+
+* The actual units of work
+* 150+ built-in tasks (javac, jar, copy, delete, mkdir…)
+* Tasks are Java classes implementing `o.a.t.ant.Task`
+
+== Key Concepts: Properties
+
+[source,xml]
+----
+<property name="version" value="1.0.0"/>
+<property file="build.properties"/>
+<echo message="Building version ${version}"/>
+----
+
+* Immutable once set (first definition wins)
+* Can be loaded from files, environment, or CLI
+* CLI override: `ant -Dversion=2.0.0`
+
+== Common Commands
+
+[source,bash]
+----
+ant # run default target
+ant compile # run specific target
+ant clean compile jar # run multiple targets
+ant -projecthelp # show available targets
+----
+
+== Common Commands (continued)
+
+[source,bash]
+----
+ant -verbose compile # verbose output
+ant -Denv=production deploy # pass a property
+ant -f other-build.xml # different build file
+----
+
+== Real-World Build: Structure
+
+[source,xml]
+----
+<project name="webapp" default="dist">
+ <property name="src" value="src/main/java"/>
+ <property name="lib" value="lib"/>
+ <property name="build" value="build"/>
+ <path id="classpath">
+ <fileset dir="${lib}" includes="**/*.jar"/>
+ </path>
+ <target name="init">
+ <mkdir dir="${build}/classes"/>
+ </target>
+----
+
+== Real-World Build: Compile & Test
+
+[source,xml]
+----
+<target name="compile" depends="init">
+ <javac srcdir="${src}" destdir="${build}/classes"
+ classpathref="classpath"/>
+</target>
+<target name="test" depends="compile">
+ <junit printsummary="yes" haltonfailure="yes">
+ <classpath refid="classpath"/>
+ </junit>
+</target>
+----
+
+[.notes]
+--
+Note the dependency chain: dist → test → compile → init.
+This ensures proper ordering. The path element shows how
+to manage classpaths for compilation and testing.
+--
+
+== Real-World Build: Package
+
+[source,xml]
+----
+<target name="dist" depends="test">
+ <jar destfile="dist/webapp.jar"
+ basedir="${build}/classes"/>
+</target>
+----
+
+* Dependency chain: `dist` → `test` → `compile` → `init`
+* Running `ant dist` triggers the full build pipeline
+* Each target runs only once, even if depended on multiple times
+
+== Using Ivy for Dependencies
+
+[source,xml]
+----
+<ivy-module version="2.0">
+ <info organisation="com.example" module="myapp"/>
+ <dependencies>
+ <dependency org="junit" name="junit"
+ rev="4.13.2"/>
+ <dependency org="org.slf4j" name="slf4j-api"
+ rev="2.0.9"/>
+ </dependencies>
+</ivy-module>
+----
+
+* Resolves from Maven Central (and other repos)
+* In build.xml: `<ivy:retrieve/>`
+
+== Writing Custom Tasks
+
+[source,java]
+----
+public class HelloTask extends Task {
+ private String name;
+
+ public void setName(String name) {
+ this.name = name;
+ }
+ public void execute() throws BuildException {
+ log("Hello, " + name + "!");
+ }
+}
+----
+
+== Using Custom Tasks
+
+[source,xml]
+----
+<taskdef name="hello"
+ classname="com.example.HelloTask"
+ classpath="custom-tasks.jar"/>
+<hello name="World"/>
+----
+
+* Any Java developer can extend Ant's capabilities
+* Ideal for organizations with unique build requirements
+
+[.notes]
+--
+Custom tasks are one of Ant's great strengths. Any Java developer
+can extend Ant's capabilities by writing a simple class. This makes
+it ideal for organizations with unique build requirements.
+--
+
+// ==========================================================
+// PART 3: COMMUNITY PARTICIPATION
+// ==========================================================
+
+== Part 3: Community Participation
+
+* Mailing lists
+* Issue tracker
+* Source code
+* How to contribute
+
+== Mailing Lists
+
+* *User list:* user@ant.apache.org
+** Ask questions, get help
+* *Dev list:* dev@ant.apache.org
+** Development discussions, patches, releases
+* *Announcements:* announcements@ant.apache.org
+
+[.notes]
+--
+As with all Apache projects, the mailing lists are the primary
+communication channel. "If it didn't happen on the mailing list,
+it didn't happen." Subscribe by emailing user-subscribe@ant.apache.org
+or dev-subscribe@ant.apache.org.
+--
+
+== Issue Tracking & Source Code
+
+* *Issue Tracker:* https://issues.apache.org/jira/browse/ANT
+* *GitHub:* https://github.com/apache/ant
+* *Ivy GitHub:* https://github.com/apache/ant-ivy
+* PRs are accepted and linked to JIRA issues
+
+[.notes]
+--
+The project uses JIRA for issue tracking. GitHub pull requests
+are also accepted and are linked to JIRA issues. The canonical
+source is in ASF Git, mirrored to GitHub.
+--
+
+== Project Vitals
+
+* *22 PMC members* — mature, stable community
+* *TLP since:* November 2002
+* *Sub-projects:* Ant core, Ivy, Antlibs
+* *Latest stable:* 1.10.x line
+
+== How to Contribute
+
+1. Subscribe to dev@ant.apache.org
+2. Pick an issue from JIRA ("newbie" or "easy-fix" labels)
+3. Fork on GitHub: https://github.com/apache/ant
+4. Make changes, write tests, submit a Pull Request
+5. Discuss on dev@ if needed
+
+[.notes]
+--
+Contributions don't have to be code! Documentation improvements,
+bug reports, and helping on the user mailing list are all valued
+contributions to the project.
+--
+
+== Non-Code Contributions
+
+* Answer questions on user@ant.apache.org
+* Improve documentation
+* Write tutorials and blog posts
+* Report bugs with clear reproduction steps
+* Test release candidates
+
+== Further Resources
+
+* *Ant Website:* https://ant.apache.org/
+* *Ant Manual:* https://ant.apache.org/manual/
+* *Ivy Website:* https://ant.apache.org/ivy/
+* *GitHub:* https://github.com/apache/ant
+
+== Summary
+
+* *What:* Java-based, XML-driven, platform-independent build tool
+* *Install:* Download or package manager, set ANT_HOME
+* *Use:* Write `build.xml` with projects, targets, tasks, properties
+* *Contribute:* Mailing lists, JIRA, GitHub PRs
diff --git a/content/Apache/Ant/src/main/theme/apache.css b/content/Apache/Ant/src/main/theme/apache.css
new file mode 100644
index 0000000..d8f2a14
--- /dev/null
+++ b/content/Apache/Ant/src/main/theme/apache.css
@@ -0,0 +1,457 @@
+/*
+ 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
+
+ https://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.
+*/
+
+/*********************************************
+ * APACHE TRAINING DARK THEME
+ * White text on black, large fonts for
+ * conference room visibility.
+ *********************************************/
+
+/*********************************************
+ * GLOBAL STYLES
+ *********************************************/
+body {
+ background-color: #1a1a1a;
+ background-image: none;
+}
+
+.reveal-viewport {
+ background-color: #1a1a1a;
+ color: #f0f0f0;
+ background-image: none !important;
+}
+
+.reveal {
+ font-family: "Segoe UI", Helvetica, Arial, sans-serif;
+ font-size: 32px;
+ font-weight: normal;
+ color: #f0f0f0;
+}
+
+/*********************************************
+ * SLIDE OVERFLOW — allow scrolling if content
+ * exceeds slide height
+ *********************************************/
+.reveal .slides section {
+ height: auto !important;
+ overflow-y: auto !important;
+}
+
+::selection {
+ color: #fff;
+ background: #42affa;
+ text-shadow: none;
+}
+
+.reveal .slides > section, .reveal .slides > section > section {
+ line-height: 1.4;
+ font-weight: inherit;
+}
+
+/*********************************************
+ * HEADERS — smaller than default
+ *********************************************/
+.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
+ margin: 0 0 20px 0;
+ color: #ffffff;
+ font-family: "Segoe UI", Helvetica, Arial, sans-serif;
+ font-weight: 600;
+ line-height: 1.2;
+ letter-spacing: normal;
+ text-transform: none;
+ text-shadow: none;
+ word-wrap: break-word;
+}
+
+.reveal h1 {
+ font-size: 1.4em;
+}
+
+.reveal h2 {
+ font-size: 1.0em;
+}
+
+.reveal h3 {
+ font-size: 0.9em;
+}
+
+.reveal h4 {
+ font-size: 0.8em;
+}
+
+/*********************************************
+ * BODY TEXT — large for back-of-room
+ *********************************************/
+.reveal p {
+ margin: 20px 0;
+ line-height: 1.4;
+ font-size: 1em;
+}
+
+.reveal li {
+ font-size: 0.95em;
+ margin-bottom: 0.3em;
+}
+
+/* Ensure certain elements are never larger than the slide itself */
+.reveal img, .reveal video, .reveal iframe {
+ max-width: 95%;
+ max-height: 85%;
+}
+
+.reveal strong, .reveal b {
+ font-weight: bold;
+ color: #ffffff;
+}
+
+.reveal em {
+ font-style: italic;
+}
+
+.reveal ol, .reveal dl, .reveal ul {
+ display: inline-block;
+ text-align: left;
+ margin: 0 0 0 1em;
+}
+
+.reveal ol {
+ list-style-type: decimal;
+}
+
+.reveal ul {
+ list-style-type: disc;
+}
+
+.reveal ul ul {
+ list-style-type: square;
+}
+
+.reveal ul ul ul {
+ list-style-type: circle;
+}
+
+.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
+ display: block;
+ margin-left: 40px;
+}
+
+.reveal dt {
+ font-weight: bold;
+}
+
+.reveal dd {
+ margin-left: 40px;
+}
+
+.reveal q, .reveal blockquote {
+ quotes: none;
+}
+
+.reveal blockquote {
+ display: block;
+ position: relative;
+ width: 70%;
+ margin: 20px auto;
+ padding: 5px;
+ font-style: italic;
+ background: rgba(255, 255, 255, 0.05);
+ box-shadow: 0 0 2px rgba(255, 255, 255, 0.2);
+ color: #ccc;
+}
+
+.reveal blockquote p:first-child, .reveal blockquote p:last-child {
+ display: inline-block;
+}
+
+.reveal q {
+ font-style: italic;
+}
+
+/*********************************************
+ * CODE
+ *********************************************/
+.reveal pre {
+ display: block;
+ position: relative;
+ width: 90%;
+ margin: 20px auto;
+ text-align: left;
+ font-size: 0.55em;
+ font-family: "Fira Code", "Consolas", monospace;
+ line-height: 1.3em;
+ word-wrap: break-word;
+ box-shadow: 0 0 6px rgba(0, 0, 0, 0.3);
+}
+
+.reveal code {
+ font-family: "Fira Code", "Consolas", monospace;
+}
+
+.reveal pre code {
+ display: block;
+ padding: 10px;
+ overflow: auto;
+ max-height: 450px;
+ word-wrap: normal;
+ background: #2d2d2d;
+ color: #e0e0e0;
+ border-radius: 4px;
+}
+
+/*********************************************
+ * TABLES
+ *********************************************/
+.reveal table {
+ margin: auto;
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+.reveal table th {
+ font-weight: bold;
+ color: #ffffff;
+}
+
+.reveal table th, .reveal table td {
+ text-align: left;
+ padding: 0.3em 0.6em;
+ border-bottom: 1px solid #555;
+ color: #e0e0e0;
+}
+
+.reveal table th[align="center"], .reveal table td[align="center"] {
+ text-align: center;
+}
+
+.reveal table th[align="right"], .reveal table td[align="right"] {
+ text-align: right;
+}
+
+.reveal table tr:last-child td {
+ border-bottom: none;
+}
+
+.reveal sup {
+ vertical-align: super;
+}
+
+.reveal sub {
+ vertical-align: sub;
+}
+
+.reveal small {
+ display: inline-block;
+ font-size: 0.6em;
+ line-height: 1.2em;
+ vertical-align: top;
+}
+
+.reveal small * {
+ vertical-align: top;
+}
+
+/*********************************************
+ * LINKS
+ *********************************************/
+.reveal a {
+ color: #42affa;
+ text-decoration: none;
+ -webkit-transition: color 0.15s ease;
+ -moz-transition: color 0.15s ease;
+ transition: color 0.15s ease;
+}
+
+.reveal a:hover {
+ color: #8dcffc;
+ text-shadow: none;
+ border: none;
+}
+
+.reveal .roll span:after {
+ color: #fff;
+ background: #068ee9;
+}
+
+/*********************************************
+ * IMAGES
+ *********************************************/
+.reveal section img {
+ margin: 15px 0;
+}
+
+.reveal a img {
+ -webkit-transition: all 0.15s linear;
+ -moz-transition: all 0.15s linear;
+ transition: all 0.15s linear;
+}
+
+.reveal a:hover img {
+ background: rgba(255, 255, 255, 0.2);
+ border-color: #42affa;
+ box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
+}
+
+/*********************************************
+ * NAVIGATION CONTROLS
+ *********************************************/
+.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {
+ border-right-color: #42affa;
+}
+
+.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
+ border-left-color: #42affa;
+}
+
+.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
+ border-bottom-color: #42affa;
+}
+
+.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
+ border-top-color: #42affa;
+}
+
+.reveal .controls div.navigate-left.enabled:hover {
+ border-right-color: #8dcffc;
+}
+
+.reveal .controls div.navigate-right.enabled:hover {
+ border-left-color: #8dcffc;
+}
+
+.reveal .controls div.navigate-up.enabled:hover {
+ border-bottom-color: #8dcffc;
+}
+
+.reveal .controls div.navigate-down.enabled:hover {
+ border-top-color: #8dcffc;
+}
+
+/*********************************************
+ * PROGRESS BAR
+ *********************************************/
+.reveal .progress {
+ background: rgba(255, 255, 255, 0.2);
+}
+
+.reveal .progress span {
+ background: #42affa;
+ -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+ -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+ transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+}
+
+/*********************************************
+ * SLIDE NUMBER
+ *********************************************/
+.reveal .slide-number {
+ color: #888;
+ background-color: rgba(0, 0, 0, 0);
+}
+
+/*********************************************
+ * GENERAL PURPOSE COLORS
+ *********************************************/
+.reveal .red {
+ color: #ff4444;
+}
+
+.reveal .orange {
+ color: #ffaa44;
+}
+
+.reveal .yellow {
+ color: #ffff44;
+}
+
+.reveal .green {
+ color: #44ff44;
+}
+
+/*********************************************
+ * HIDE THE PERSISTENT HEADER/FOOTER from
+ * document.html.slim template
+ *********************************************/
+.header,
+.footer {
+ display: none !important;
+}
+
+/*********************************************
+ * PROJECT LOGO — small, top left of every slide
+ * Each module should place a project-logo.png
+ * in src/main/asciidoc/images/ OR override
+ * this rule in a local customcss with the
+ * project's logo URL.
+ *********************************************/
+.reveal::before {
+ content: "";
+ position: fixed;
+ top: 16px;
+ left: 16px;
+ width: 120px;
+ height: 36px;
+ background-image: url("../../../images/project-logo.png");
+ background-size: contain;
+ background-repeat: no-repeat;
+ opacity: 0.7;
+ z-index: 100;
+ pointer-events: none;
+}
+
+/*********************************************
+ * APACHE OAK LEAF — bottom right of every slide
+ *********************************************/
+.reveal::after {
+ content: "";
+ position: fixed;
+ bottom: 16px;
+ left: 16px;
+ width: 36px;
+ height: 36px;
+ background-image: url("../../../images/logo-apache.png");
+ background-size: contain;
+ background-repeat: no-repeat;
+ opacity: 0.6;
+ z-index: 100;
+ pointer-events: none;
+}
+
+/*********************************************
+ * C3JS Charts (dark mode)
+ *********************************************/
+.c3 {
+ fill: white;
+}
+
+.c3 line, .c3 path {
+ stroke: white !important;
+}
+
+/*********************************************
+ * Column layout
+ *********************************************/
+.reveal .west {
+ position: fixed;
+ left: 5%;
+}
+
+.reveal .east {
+ position: fixed;
+ right: 5%;
+}