SlideShare a Scribd company logo

HTL Compilers and Tooling

For the past two years HTL / Sightly has allowed developers to write cleaner and more secure scripts for their rendering components. However, tooling in this area mostly relied on HTML syntax highlighting in an editor of your choice and script validation through platform deployment. What if I told you that there's a better alternative now? An independent HTL compiler eased the way to developing the HTL Maven Plugin.

1 of 23
Download to read offline
APACHE SLING & FRIENDS TECH MEETUP
BERLIN, 26-28 SEPTEMBER 2016
Sightly HTL Compilers and Tooling
rev 3.20160926
@raducotescu
Apache Sling PMC member
Computer Scientist @ Adobe Systems
radu@apache.org
adaptTo()
HTL Compilers and Tooling
2
What’s changed since last September?
1. Sightly has been renamed

https://docs.adobe.com/content/docs/en/htl/update.html

adaptTo()
HTL Compilers and Tooling
3
What’s changed since last September?
2. Version 1.2 of the HTL language specification was released on March 30th, 2016:

• enums can now be used in comparisons



<div data-sly-test=“{enumConstant == ‘CONSTANT_NAME’}”></div>



adaptTo()
HTL Compilers and Tooling
4
What’s changed since last September?
3. Sling-level improvements: Resource objects can now be used directly in

data-sly-resource:



<sly data-sly-resource=“${myResource}”/>
adaptTo()
HTL Compilers and Tooling
5
What’s changed since last September?
3. Sling-level improvements: Resource objects can be used directly in the Use-API



<sly data-sly-use.myRes=“${'some/path'}">

${myRes.title}

</sly>
adaptTo()
HTL Compilers and Tooling
6
What’s changed since last September?
3. Sling-level improvements: request attributes can be passed in both data-sly-
resource and data-sly-include:



<sly data-sly-include="${'script.html' @
requestAttributes=helper.attributesMap}"/>

<sly data-sly-resource="${'some/path' @
resourceType='some/type',
requestAttributes=helper.attributesMap}"/>

Recommended

Using google appengine
Using google appengineUsing google appengine
Using google appengineWei Sun
 
Sling IDE Tooling @ adaptTo 2013
Sling IDE Tooling @ adaptTo 2013Sling IDE Tooling @ adaptTo 2013
Sling IDE Tooling @ adaptTo 2013Robert Munteanu
 
Analysis Of Open Positions In Data Science
Analysis Of Open Positions In Data ScienceAnalysis Of Open Positions In Data Science
Analysis Of Open Positions In Data ScienceDaniel Cuneo
 
Python harness fundamental
Python harness fundamentalPython harness fundamental
Python harness fundamentalRobin0590
 
Test your Kubernetes operator with Operator Lifecycle Management
Test your Kubernetes operator with Operator Lifecycle ManagementTest your Kubernetes operator with Operator Lifecycle Management
Test your Kubernetes operator with Operator Lifecycle ManagementBaiju Muthukadan
 
Jetpack Compose - Android’s modern toolkit for building native UI
Jetpack Compose - Android’s modern toolkit for building native UIJetpack Compose - Android’s modern toolkit for building native UI
Jetpack Compose - Android’s modern toolkit for building native UIGilang Ramadhan
 

More Related Content

Similar to HTL Compilers and Tooling

Paving the way to a native Sling
Paving the way to a native SlingPaving the way to a native Sling
Paving the way to a native SlingRadu Cotescu
 
Modern Web Applications with Sightly
Modern Web Applications with SightlyModern Web Applications with Sightly
Modern Web Applications with SightlyRadu Cotescu
 
Android application architecture
Android application architectureAndroid application architecture
Android application architectureRomain Rochegude
 
Angular 2 Crash Course
Angular  2 Crash CourseAngular  2 Crash Course
Angular 2 Crash CourseElisha Kramer
 
Kubecon SIG Apps December 2017 Update
Kubecon SIG Apps December 2017 UpdateKubecon SIG Apps December 2017 Update
Kubecon SIG Apps December 2017 UpdateMatthew Farina
 
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten ZiegelerNew and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegelermfrancis
 
Moduarlity patterns with OSGi
Moduarlity patterns with OSGiModuarlity patterns with OSGi
Moduarlity patterns with OSGiPaul Bakker
 
Apache Shindig, from Server Side Portlets to Open Social Gadgets
Apache Shindig, from Server Side Portlets to Open Social GadgetsApache Shindig, from Server Side Portlets to Open Social Gadgets
Apache Shindig, from Server Side Portlets to Open Social GadgetsTyrell Perera
 
Improving the Accumulo User Experience
 Improving the Accumulo User Experience Improving the Accumulo User Experience
Improving the Accumulo User ExperienceAccumulo Summit
 
Give your Foreman a greater toolbox with Plugins - Dirk Goetz - Foreman Birth...
Give your Foreman a greater toolbox with Plugins - Dirk Goetz - Foreman Birth...Give your Foreman a greater toolbox with Plugins - Dirk Goetz - Foreman Birth...
Give your Foreman a greater toolbox with Plugins - Dirk Goetz - Foreman Birth...NETWAYS
 
Introducing Pebble SDK 2.0
Introducing Pebble SDK 2.0Introducing Pebble SDK 2.0
Introducing Pebble SDK 2.0Cherie Williams
 
Introduction to Google App Engine with Python
Introduction to Google App Engine with PythonIntroduction to Google App Engine with Python
Introduction to Google App Engine with PythonBrian Lyttle
 
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.Luciano Resende
 
A DevOps guide to Kubernetes
A DevOps guide to KubernetesA DevOps guide to Kubernetes
A DevOps guide to KubernetesPaul Czarkowski
 
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...Milen Dyankov
 

Similar to HTL Compilers and Tooling (20)

Paving the way to a native Sling
Paving the way to a native SlingPaving the way to a native Sling
Paving the way to a native Sling
 
Modern Web Applications with Sightly
Modern Web Applications with SightlyModern Web Applications with Sightly
Modern Web Applications with Sightly
 
Android application architecture
Android application architectureAndroid application architecture
Android application architecture
 
Angular 2 Crash Course
Angular  2 Crash CourseAngular  2 Crash Course
Angular 2 Crash Course
 
Kube cfg-mgmt
Kube cfg-mgmtKube cfg-mgmt
Kube cfg-mgmt
 
Kubecon SIG Apps December 2017 Update
Kubecon SIG Apps December 2017 UpdateKubecon SIG Apps December 2017 Update
Kubecon SIG Apps December 2017 Update
 
AtoZ about TYPO3 v8 CMS
AtoZ about TYPO3 v8 CMSAtoZ about TYPO3 v8 CMS
AtoZ about TYPO3 v8 CMS
 
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten ZiegelerNew and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
 
TiConf EU 2014
TiConf EU 2014TiConf EU 2014
TiConf EU 2014
 
Moduarlity patterns with OSGi
Moduarlity patterns with OSGiModuarlity patterns with OSGi
Moduarlity patterns with OSGi
 
Apache Shindig, from Server Side Portlets to Open Social Gadgets
Apache Shindig, from Server Side Portlets to Open Social GadgetsApache Shindig, from Server Side Portlets to Open Social Gadgets
Apache Shindig, from Server Side Portlets to Open Social Gadgets
 
Crafting APIs
Crafting APIsCrafting APIs
Crafting APIs
 
Improving the Accumulo User Experience
 Improving the Accumulo User Experience Improving the Accumulo User Experience
Improving the Accumulo User Experience
 
Give your Foreman a greater toolbox with Plugins - Dirk Goetz - Foreman Birth...
Give your Foreman a greater toolbox with Plugins - Dirk Goetz - Foreman Birth...Give your Foreman a greater toolbox with Plugins - Dirk Goetz - Foreman Birth...
Give your Foreman a greater toolbox with Plugins - Dirk Goetz - Foreman Birth...
 
Announcing Pebble SDK 2.0
Announcing Pebble SDK 2.0Announcing Pebble SDK 2.0
Announcing Pebble SDK 2.0
 
Introducing Pebble SDK 2.0
Introducing Pebble SDK 2.0Introducing Pebble SDK 2.0
Introducing Pebble SDK 2.0
 
Introduction to Google App Engine with Python
Introduction to Google App Engine with PythonIntroduction to Google App Engine with Python
Introduction to Google App Engine with Python
 
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
 
A DevOps guide to Kubernetes
A DevOps guide to KubernetesA DevOps guide to Kubernetes
A DevOps guide to Kubernetes
 
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
 

Recently uploaded

killingcamp longest common subsequence.pdf
killingcamp longest common subsequence.pdfkillingcamp longest common subsequence.pdf
killingcamp longest common subsequence.pdfssuser82c38d
 
OpenChain AI Study Group - North America and Europe - 2024-02-20
OpenChain AI Study Group - North America and Europe - 2024-02-20OpenChain AI Study Group - North America and Europe - 2024-02-20
OpenChain AI Study Group - North America and Europe - 2024-02-20Shane Coughlan
 
How AI is preventing account fraud at web scale
How AI is preventing account fraud at web scaleHow AI is preventing account fraud at web scale
How AI is preventing account fraud at web scaleAmir Moghimi
 
killing camp 주차장 나누기-2 topology sort.pdf
killing camp 주차장 나누기-2 topology sort.pdfkilling camp 주차장 나누기-2 topology sort.pdf
killing camp 주차장 나누기-2 topology sort.pdfssuser82c38d
 
Role of DevOps in SaaS product Development.pdf.pptx
Role of DevOps in SaaS product Development.pdf.pptxRole of DevOps in SaaS product Development.pdf.pptx
Role of DevOps in SaaS product Development.pdf.pptxMindInventory
 
Workshop híbrido: Stream Processing con Flink
Workshop híbrido: Stream Processing con FlinkWorkshop híbrido: Stream Processing con Flink
Workshop híbrido: Stream Processing con Flinkconfluent
 
Orion Context Broker introduction 20240227
Orion Context Broker introduction 20240227Orion Context Broker introduction 20240227
Orion Context Broker introduction 20240227Fermin Galan
 
killingcamp 광고삽입문제 풀이, killingcamp 광고삽입문제 풀이
killingcamp 광고삽입문제 풀이, killingcamp 광고삽입문제 풀이killingcamp 광고삽입문제 풀이, killingcamp 광고삽입문제 풀이
killingcamp 광고삽입문제 풀이, killingcamp 광고삽입문제 풀이ssuser82c38d
 
Cybersecurity Measures For Remote Workers.pdf
Cybersecurity Measures For Remote Workers.pdfCybersecurity Measures For Remote Workers.pdf
Cybersecurity Measures For Remote Workers.pdfCIOWomenMagazine
 
Welcome to AltTask - the nexus where innovation converges with empowerment!
Welcome to AltTask - the nexus where innovation converges with empowerment!Welcome to AltTask - the nexus where innovation converges with empowerment!
Welcome to AltTask - the nexus where innovation converges with empowerment!alttaskcom
 
What are the Reasons for Tracking the Attendance of the Employees?
What are the Reasons for Tracking the Attendance of the Employees?What are the Reasons for Tracking the Attendance of the Employees?
What are the Reasons for Tracking the Attendance of the Employees?NYGGS Automation Suite
 
The Top Outages of 2023: Analyses and Takeaways
The Top Outages of 2023: Analyses and TakeawaysThe Top Outages of 2023: Analyses and Takeaways
The Top Outages of 2023: Analyses and TakeawaysThousandEyes
 
Open Source vs Closed Source LLMs. Pros and Cons
Open Source vs Closed Source LLMs. Pros and ConsOpen Source vs Closed Source LLMs. Pros and Cons
Open Source vs Closed Source LLMs. Pros and ConsSprings
 
Machine Learning Basics for Dummies (no math!)
Machine Learning Basics for Dummies (no math!)Machine Learning Basics for Dummies (no math!)
Machine Learning Basics for Dummies (no math!)Dmitry Zinoviev
 
Passbolt Introduction and Usage for secret managment
Passbolt Introduction and Usage for secret managmentPassbolt Introduction and Usage for secret managment
Passbolt Introduction and Usage for secret managmentThierry Gayet
 
No more Dockerfiles? Buildpacks to help you ship your image!
No more Dockerfiles? Buildpacks to help you ship your image!No more Dockerfiles? Buildpacks to help you ship your image!
No more Dockerfiles? Buildpacks to help you ship your image!Anthony Dahanne
 
Alluxio Monthly Webinar | Why a Multi-Cloud Strategy Matters for Your AI Plat...
Alluxio Monthly Webinar | Why a Multi-Cloud Strategy Matters for Your AI Plat...Alluxio Monthly Webinar | Why a Multi-Cloud Strategy Matters for Your AI Plat...
Alluxio Monthly Webinar | Why a Multi-Cloud Strategy Matters for Your AI Plat...Alluxio, Inc.
 
Automation for Bonterra Impact Management (fka Apricot)
Automation for Bonterra Impact Management (fka Apricot)Automation for Bonterra Impact Management (fka Apricot)
Automation for Bonterra Impact Management (fka Apricot)Jeffrey Haguewood
 
Joseph Yoder : Being Agile about Architecture
Joseph Yoder : Being Agile about ArchitectureJoseph Yoder : Being Agile about Architecture
Joseph Yoder : Being Agile about ArchitectureHironori Washizaki
 
killing camp week 6 problem - maximal matrix.pdf
killing camp week 6 problem - maximal matrix.pdfkilling camp week 6 problem - maximal matrix.pdf
killing camp week 6 problem - maximal matrix.pdfssuser82c38d
 

Recently uploaded (20)

killingcamp longest common subsequence.pdf
killingcamp longest common subsequence.pdfkillingcamp longest common subsequence.pdf
killingcamp longest common subsequence.pdf
 
OpenChain AI Study Group - North America and Europe - 2024-02-20
OpenChain AI Study Group - North America and Europe - 2024-02-20OpenChain AI Study Group - North America and Europe - 2024-02-20
OpenChain AI Study Group - North America and Europe - 2024-02-20
 
How AI is preventing account fraud at web scale
How AI is preventing account fraud at web scaleHow AI is preventing account fraud at web scale
How AI is preventing account fraud at web scale
 
killing camp 주차장 나누기-2 topology sort.pdf
killing camp 주차장 나누기-2 topology sort.pdfkilling camp 주차장 나누기-2 topology sort.pdf
killing camp 주차장 나누기-2 topology sort.pdf
 
Role of DevOps in SaaS product Development.pdf.pptx
Role of DevOps in SaaS product Development.pdf.pptxRole of DevOps in SaaS product Development.pdf.pptx
Role of DevOps in SaaS product Development.pdf.pptx
 
Workshop híbrido: Stream Processing con Flink
Workshop híbrido: Stream Processing con FlinkWorkshop híbrido: Stream Processing con Flink
Workshop híbrido: Stream Processing con Flink
 
Orion Context Broker introduction 20240227
Orion Context Broker introduction 20240227Orion Context Broker introduction 20240227
Orion Context Broker introduction 20240227
 
killingcamp 광고삽입문제 풀이, killingcamp 광고삽입문제 풀이
killingcamp 광고삽입문제 풀이, killingcamp 광고삽입문제 풀이killingcamp 광고삽입문제 풀이, killingcamp 광고삽입문제 풀이
killingcamp 광고삽입문제 풀이, killingcamp 광고삽입문제 풀이
 
Cybersecurity Measures For Remote Workers.pdf
Cybersecurity Measures For Remote Workers.pdfCybersecurity Measures For Remote Workers.pdf
Cybersecurity Measures For Remote Workers.pdf
 
Welcome to AltTask - the nexus where innovation converges with empowerment!
Welcome to AltTask - the nexus where innovation converges with empowerment!Welcome to AltTask - the nexus where innovation converges with empowerment!
Welcome to AltTask - the nexus where innovation converges with empowerment!
 
What are the Reasons for Tracking the Attendance of the Employees?
What are the Reasons for Tracking the Attendance of the Employees?What are the Reasons for Tracking the Attendance of the Employees?
What are the Reasons for Tracking the Attendance of the Employees?
 
The Top Outages of 2023: Analyses and Takeaways
The Top Outages of 2023: Analyses and TakeawaysThe Top Outages of 2023: Analyses and Takeaways
The Top Outages of 2023: Analyses and Takeaways
 
Open Source vs Closed Source LLMs. Pros and Cons
Open Source vs Closed Source LLMs. Pros and ConsOpen Source vs Closed Source LLMs. Pros and Cons
Open Source vs Closed Source LLMs. Pros and Cons
 
Machine Learning Basics for Dummies (no math!)
Machine Learning Basics for Dummies (no math!)Machine Learning Basics for Dummies (no math!)
Machine Learning Basics for Dummies (no math!)
 
Passbolt Introduction and Usage for secret managment
Passbolt Introduction and Usage for secret managmentPassbolt Introduction and Usage for secret managment
Passbolt Introduction and Usage for secret managment
 
No more Dockerfiles? Buildpacks to help you ship your image!
No more Dockerfiles? Buildpacks to help you ship your image!No more Dockerfiles? Buildpacks to help you ship your image!
No more Dockerfiles? Buildpacks to help you ship your image!
 
Alluxio Monthly Webinar | Why a Multi-Cloud Strategy Matters for Your AI Plat...
Alluxio Monthly Webinar | Why a Multi-Cloud Strategy Matters for Your AI Plat...Alluxio Monthly Webinar | Why a Multi-Cloud Strategy Matters for Your AI Plat...
Alluxio Monthly Webinar | Why a Multi-Cloud Strategy Matters for Your AI Plat...
 
Automation for Bonterra Impact Management (fka Apricot)
Automation for Bonterra Impact Management (fka Apricot)Automation for Bonterra Impact Management (fka Apricot)
Automation for Bonterra Impact Management (fka Apricot)
 
Joseph Yoder : Being Agile about Architecture
Joseph Yoder : Being Agile about ArchitectureJoseph Yoder : Being Agile about Architecture
Joseph Yoder : Being Agile about Architecture
 
killing camp week 6 problem - maximal matrix.pdf
killing camp week 6 problem - maximal matrix.pdfkilling camp week 6 problem - maximal matrix.pdf
killing camp week 6 problem - maximal matrix.pdf
 

HTL Compilers and Tooling

  • 1. APACHE SLING & FRIENDS TECH MEETUP BERLIN, 26-28 SEPTEMBER 2016 Sightly HTL Compilers and Tooling rev 3.20160926 @raducotescu Apache Sling PMC member Computer Scientist @ Adobe Systems radu@apache.org
  • 2. adaptTo() HTL Compilers and Tooling 2 What’s changed since last September? 1. Sightly has been renamed
 https://docs.adobe.com/content/docs/en/htl/update.html

  • 3. adaptTo() HTL Compilers and Tooling 3 What’s changed since last September? 2. Version 1.2 of the HTL language specification was released on March 30th, 2016:
 • enums can now be used in comparisons
 
 <div data-sly-test=“{enumConstant == ‘CONSTANT_NAME’}”></div>
 

  • 4. adaptTo() HTL Compilers and Tooling 4 What’s changed since last September? 3. Sling-level improvements: Resource objects can now be used directly in
 data-sly-resource:
 
 <sly data-sly-resource=“${myResource}”/>
  • 5. adaptTo() HTL Compilers and Tooling 5 What’s changed since last September? 3. Sling-level improvements: Resource objects can be used directly in the Use-API
 
 <sly data-sly-use.myRes=“${'some/path'}">
 ${myRes.title}
 </sly>
  • 6. adaptTo() HTL Compilers and Tooling 6 What’s changed since last September? 3. Sling-level improvements: request attributes can be passed in both data-sly- resource and data-sly-include:
 
 <sly data-sly-include="${'script.html' @ requestAttributes=helper.attributesMap}"/>
 <sly data-sly-resource="${'some/path' @ resourceType='some/type', requestAttributes=helper.attributesMap}"/>
  • 7. adaptTo() HTL Compilers and Tooling 7 What’s changed since last September? 4. The org.apache.sling.scripting.sightly module has now evolved into 3 modules:
 
 org.apache.sling.scripting.sightly.compiler
 
 org.apache.sling.scripting.sightly.compiler.java
 
 org.apache.sling.scripting.sightly - now just the ScriptEngine + runtime
  • 9. adaptTo() HTL Compilers and Tooling 9 The HTL Compiler (aka The Front End HTL Compiler)
 1. compiles HTL into an Abstract Syntax Tree (almost; it’s actually an Abstract Semantic Graph)
  • 10. adaptTo() HTL Compilers and Tooling 10 The HTL Compiler (aka The Front End HTL Compiler) 2. provides a warnings and errors report with information about where they occurred into the original script
 
 CompilationResult result = compiler.compile(compilationUnit, backendCompiler);
 for (CompilerMessage m : result.getErrors()) {
 // do stuff
 }

  • 11. adaptTo() HTL Compilers and Tooling 11 The HTL Compiler (aka The Front End HTL Compiler) 3. exposes an API into which back end compilers can be hooked
 o.a.s.scripting.sightly.compiler o.a.s.scripting.sightly.compiler.backend o.a.s.scripting.sightly.compiler.commands o.a.s.scripting.sightly.compiler.expression o.a.s.scripting.sightly.compiler.expression.nodes o.a.s.scripting.sightly.compiler.util
  • 12. The HTL Java Compiler adaptTo() 12
  • 13. adaptTo() HTL Compilers and Tooling 13 The HTL Java Compiler (aka The Back End HTL Compiler) 1. implements a back end compiler which can be hooked into the HTL Compiler to generate Java code
  • 14. adaptTo() HTL Compilers and Tooling 14 The HTL Java Compiler (aka The Back End HTL Compiler) 2. provides the Java Runtime API
 
 org.apache.sling.scripting.sightly
 org.apache.sling.scripting.sightly.extension
 org.apache.sling.scripting.sightly.java.compiler
 org.apache.sling.scripting.sightly.pojo
 org.apache.sling.scripting.sightly.render
 org.apache.sling.scripting.sightly.use
  • 15. adaptTo() HTL Compilers and Tooling 15 The HTL Java Compiler (aka The Back End HTL Compiler) 3. generates Java classes that use the Runtime API to which a custom org.apache.sling.scripting.sightly.render.RenderContext implementation can be provided for rendering the compiled HTL scripts
  • 16. adaptTo() HTL Compilers and Tooling 16 AST
  • 17. adaptTo() HTL Compilers and Tooling 17 Both compilers: • are OSGi bundles for convenience • can also be used in non-OSGi environments - you just have to manually instantiate the two compilers • are independent of the Sling API, which would allow them to be used in combination with other frameworks / platforms or even other scripting / programming languages
  • 18. The HTL Maven Plugin adaptTo() 18
  • 19. adaptTo() HTL Compilers and Tooling 19 The HTL Maven Plugin <plugin>
 <groupId>org.apache.sling</groupId>
 <artifactId>htl-maven-plugin</artifactId> <version>1.0.0</version>
 <executions>
 <execution>
 <id>validate-scripts</id>
 <goals>
 <goal>validate</goal>
 </goals>
 <phase>compile</phase>
 </execution>
 </executions>
 </plugin>
  • 20. adaptTo() HTL Compilers and Tooling 20 The HTL Maven Plugin 1. its only life goal is to validate your scripts 🙃 
 mvn htl:validate
 2. it has the following configuration options:
 sourceDirectory - defaults to ${project.build.sourceDirectory}
 includes - defaults to **/*.html
 excludes
 failOnWarnings - defaults to false
  • 21. adaptTo() HTL Compilers and Tooling 21 The HTL Maven Plugin 3. it’s also compatible with M2Eclipse - warnings and errors are available in the Markers view in Eclipse (thanks to @rombert)
  • 23. adaptTo() HTL Compilers and Tooling 23 Credits & Resources Captain Obvious - http://captainobvious.website/ HTL - https://github.com/apache/sling/tree/trunk/bundles/scripting/sightly HTL Maven Plugin - https://sling.apache.org/documentation/development/htl- maven-plugin.html