SlideShare a Scribd company logo
NSF ODP TOOLING
BRING NSFS INTO THE CI/CD WORLD
JESSE
GALLAGHER
CTO - I KNOW SOME GUYS
IP MANAGER - OPENNTF
HTTP://FROSTILLIC.US
@GIDGERBY
CollabSphere 2020 - NSF ODP Tooling
What is it?
A set of Maven and Eclipse plugins for working with On-Disk Projects
Four main components
ODP → NSF compiler
NSF → ODP exporter
Deployment
Eclipse UI extensions
What is it?
No requirement for Designer
Works with a local Notes/Domino runtime or a remote server
Local runtime: macOS, Windows, or Linux on x86
Remote runtime: Anything that runs Java
Designed to allow clean, consistent builds without UI interaction
Provides some support for working with ODP projects in IDEs
Brief Aside: Maven
It’s not (inherently) scary!
Just look how cute that owl is
Maven is a tool used for build automation
It’s primarily used for Java projects, but is
adaptable to many things via plugins
A “pom.xml” file is a clear giveaway of
Maven’s use
We use it here because it allows for cleanly-
reproducible builds across systems, without
environment-specific details
Second Brief Aside: Complexity
Will this require lots of command-line knowledge?
Not really!
Will this require lots of complicated XML configuration?
Only kind of!
Will this complicate my day-to-day development experience?
Only if you want it to!
ODP COMPILER
ODP Compiler
Takes an ODP and creates an NSF
Allows use of Maven and OSGi dependencies (i.e. XPages libraries)
Allows dynamically enabling “production” XPages settings like
resource aggregation
Allows applying a template name and version + build timestamp
ODP Compiler
Example Configuration
<plugin>
<groupId>org.openntf.maven</groupId>
<artifactId>nsfodp-maven-plugin</artifactId>
<configuration>
<updateSites>
<updateSite>${project.baseDir}/../../../releng/org.openntf.nsfodp.exampl
e.updatesite/target/site</updateSite>
</updateSites>
<templateName>ExampleProject</templateName>
</configuration>
</plugin>
ODP Compiler
Can be standalone or part of a larger
project tree
Pairs beautifully with Tycho for OSGi
compilation and the Assembly Plugin
for distribution
ODP Compiler
Basic configuration is simple: put your ODP in an “odp” directory and add a pom.xml
file above it
Allows configuration during compilation:
Update Site references for OSGi plugins
Classpath JARs and Maven dependencies like jvm/lib/ext
Override the ODP’s ACL in the pom.xml
Add a template name and version on the fly
Set the ODS level to target
ODP EXPORTER
ODP Exporter
Takes an NSF and creates an ODP
Replicates the behavior of Designer’s source control support
Except it’s not incremental (at least not yet)
Can be used to export a local NSF file or a remote database
Automatically applies Swiper cleanup to exported DXL
ODP Exporter
ODP Exporter
Can be used in lieu of Designer’s export sync
It’s less convenient, but it’s also less fault-prone
Very useful when someone on your team doesn’t use source control
Useful to convert NSFs to processable text form
I use it for exactly this when doing IP checks for OpenNTF
NSF DEPLOYMENT
NSF Deployment
Deploys a compiled NSF to a server, optionally replacing an existing
NSF’s design
Allows you to sign the database as the server
Provides for Continuous Deployment to a staging server
Warning: this component is effectively “beta”
NSF Deployment
ECLIPSE UI EXTENSIONS
Eclipse Extensions
Configures the Java classpath
Includes OSGi dependencies
Adds categories for design elements
with nice little pictures
Adds DXL autocomplete via the
schema files
(To whoever at HCL maintains those:
thank you)
Eclipse Extensions
ODP Java classes can directly
reference plugins in the workspace
Allows for refactoring across both the
ODP and plugins, avoiding out-of-step
bugs
Code Autocomplete
WORKFLOWS
Generally Applicable
The ODP is the “source of truth”
NSFs only exist as development areas or deployable builds
The build process versions and timestamps NTFs
The build process is consistent every time
Clean NSF output
No unintended residue
No “Copy Application” mis-clicks
Single Developer, Simple NSF
Keeps focus on good source-control habits
Maven configuration is very small
Good way to dip into Jenkins
Encourages versioning and discourages shoot-from-the-hip
development
Works with classic design elements, XPages or no
Multi-Person Team, XPages
Libraries
Maven makes the OSGi bundle build process more consistent
Any team member can make a full build
Eclipse support allows Java refactoring across OSGi bundles and in-
NSF Java classes
Eclipse XSP editing allows some tasks to be done fully outside
Designer
Team With Uncooperative Members
If not everyone is on board, use the Exporter to make ODP snapshots
The ODP becomes the source of truth
In my case, I have a script I run periodically that exports a bunch of
NSFs to ODPs
It’s not the best workflow, but it’s better than the old ways
NPM-based App Container
Kick off the NPM install/build with frontend-maven-plugin
Include the built resources inside the NSF in WebContent
Avoid worries of having to coax Designer into doing it
https://frostillic.us/blog/posts/2020/7/17/nsf-odp-tooling-3-1-0-
dynamically-including-web-resources
Maven Assembly Plugin
The Assembly plugin allows you to create a final
distribution ZIP
In my case, I gather several dozen built NSFs, a
couple update sites, support libraries, and
instructions
This happens at the end of every build, with a ZIP
ready to hand off to admins
I also use this in almost every one of my OpenNTF
projects
(Great way to get those LICENSE and NOTICE
files in there!)
(Saves your friendly IP manager some hassle!)
Automated Builds - Jenkins, etc.
With some setup, Jenkins can build
your apps with every commit
Pairs very well with Assembly projects
https://frostillic.us/blog/posts/2020/8/27/
nsf-odp-tooling-setting-up-jenkins-
builds
THE FUTURE
Potential Future Additions
Improvements to deployment
If anybody could get me the true “Replace Design” API call, I’d
appreciate it
Docker-based build runtime
Work against a live NSF (“Designer-style”)
Ability to edit agents in Eclipse
Unit tests for in-NSF code
QUESTIONS

More Related Content

PPTX
OpenNTF Webinar May 2021 - Jesse
PDF
Dev112 let's calendar that
PPTX
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
PPTX
CollabSphere 2018 - Java in Domino After XPages
PDF
DNUG Webcast: IBM Notes V10 Performance Boost
PDF
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
PPTX
Let me introduce you: DOTS
PDF
Implementing your own Google App Engine
OpenNTF Webinar May 2021 - Jesse
Dev112 let's calendar that
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2018 - Java in Domino After XPages
DNUG Webcast: IBM Notes V10 Performance Boost
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
Let me introduce you: DOTS
Implementing your own Google App Engine

What's hot (20)

PDF
Sutol 2016 - Automation is developer's friend
ODP
Java and XPages
PDF
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
PDF
Modern infrastructure as code with ansible cake fest 2021
PDF
Mete Atamel
PPT
Introduction to Play Framework
ODP
Kickstart Jpa
PPT
Sleep Peacefully as Maven Tycho Builds your Product
PDF
Domino OSGi Development
PDF
Conquering AngularJS Limitations
PPTX
Utilizing the OpenNTF Domino API
PDF
Jenkins 101: Getting Started
PDF
Case study: JBoss Developer Studio, an IDE for Web, Mobile and Cloud applicat...
PPTX
Jenkins tutorial
PDF
IBM Drupal Users Group Discussion on Managing and Deploying Configuration
PPTX
Jenkins presentation
PPTX
Dockerizing your java development environment
PDF
Codecoon - A technical Case Study
PPTX
Jenkins Pipeline 101 and TCI - presentation and workshop
PPTX
Automated testing with Drupal
Sutol 2016 - Automation is developer's friend
Java and XPages
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
Modern infrastructure as code with ansible cake fest 2021
Mete Atamel
Introduction to Play Framework
Kickstart Jpa
Sleep Peacefully as Maven Tycho Builds your Product
Domino OSGi Development
Conquering AngularJS Limitations
Utilizing the OpenNTF Domino API
Jenkins 101: Getting Started
Case study: JBoss Developer Studio, an IDE for Web, Mobile and Cloud applicat...
Jenkins tutorial
IBM Drupal Users Group Discussion on Managing and Deploying Configuration
Jenkins presentation
Dockerizing your java development environment
Codecoon - A technical Case Study
Jenkins Pipeline 101 and TCI - presentation and workshop
Automated testing with Drupal
Ad

Similar to CollabSphere 2020 - NSF ODP Tooling (20)

PPTX
A Fabric/Puppet Build/Deploy System
ODP
A Happy Cloud Friendly Java Developer with OpenShift
PPTX
Introduction to node.js By Ahmed Assaf
PDF
Node.js an Exectutive View
ODP
Building JBoss AS 7 for Fedora
PPTX
How Gozengo Implemented a Continuous Deployment Culture from Day One
PPTX
Gozengo sauce presentation
PPT
Selenium2 and Jenkins: Almost pain-free UI Testing
PPT
Get ready for FRC 2015: Intro to Java 5 through 8 updates and Eclipse
PDF
CONTINUOUS INTEGRATION && DOCKER
PPTX
Eclipse Overview
PPTX
Developing SharePoint Framework Solutions for the Enterprise (SPC 2019)
PPTX
How to build an HA container orchestrator infrastructure for production – Giu...
DOCX
Muraliupdatedpersonal091215
PPTX
Riga Dev Day - Automated Android Continuous Integration
PPT
Part6 introducing the jas forge collaborative project
PDF
Extending DevOps to Big Data Applications with Kubernetes
PPTX
Mobile Application and Developments.pptx
PPT
"Eclipse Application Development" at GNUnify 07
PPT
Part 3 JasForge the collaborative and agile project v1.0
A Fabric/Puppet Build/Deploy System
A Happy Cloud Friendly Java Developer with OpenShift
Introduction to node.js By Ahmed Assaf
Node.js an Exectutive View
Building JBoss AS 7 for Fedora
How Gozengo Implemented a Continuous Deployment Culture from Day One
Gozengo sauce presentation
Selenium2 and Jenkins: Almost pain-free UI Testing
Get ready for FRC 2015: Intro to Java 5 through 8 updates and Eclipse
CONTINUOUS INTEGRATION && DOCKER
Eclipse Overview
Developing SharePoint Framework Solutions for the Enterprise (SPC 2019)
How to build an HA container orchestrator infrastructure for production – Giu...
Muraliupdatedpersonal091215
Riga Dev Day - Automated Android Continuous Integration
Part6 introducing the jas forge collaborative project
Extending DevOps to Big Data Applications with Kubernetes
Mobile Application and Developments.pptx
"Eclipse Application Development" at GNUnify 07
Part 3 JasForge the collaborative and agile project v1.0
Ad

Recently uploaded (20)

PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PDF
Softaken Excel to vCard Converter Software.pdf
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PPTX
Transform Your Business with a Software ERP System
PPTX
Odoo POS Development Services by CandidRoot Solutions
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PPTX
Reimagine Home Health with the Power of Agentic AI​
PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PDF
top salesforce developer skills in 2025.pdf
PDF
PTS Company Brochure 2025 (1).pdf.......
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
Understanding Forklifts - TECH EHS Solution
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Softaken Excel to vCard Converter Software.pdf
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
wealthsignaloriginal-com-DS-text-... (1).pdf
Transform Your Business with a Software ERP System
Odoo POS Development Services by CandidRoot Solutions
Navsoft: AI-Powered Business Solutions & Custom Software Development
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Reimagine Home Health with the Power of Agentic AI​
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
VVF-Customer-Presentation2025-Ver1.9.pptx
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
How to Choose the Right IT Partner for Your Business in Malaysia
Upgrade and Innovation Strategies for SAP ERP Customers
top salesforce developer skills in 2025.pdf
PTS Company Brochure 2025 (1).pdf.......
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
Design an Analysis of Algorithms I-SECS-1021-03
2025 Textile ERP Trends: SAP, Odoo & Oracle
Understanding Forklifts - TECH EHS Solution

CollabSphere 2020 - NSF ODP Tooling

  • 1. NSF ODP TOOLING BRING NSFS INTO THE CI/CD WORLD
  • 2. JESSE GALLAGHER CTO - I KNOW SOME GUYS IP MANAGER - OPENNTF HTTP://FROSTILLIC.US @GIDGERBY
  • 4. What is it? A set of Maven and Eclipse plugins for working with On-Disk Projects Four main components ODP → NSF compiler NSF → ODP exporter Deployment Eclipse UI extensions
  • 5. What is it? No requirement for Designer Works with a local Notes/Domino runtime or a remote server Local runtime: macOS, Windows, or Linux on x86 Remote runtime: Anything that runs Java Designed to allow clean, consistent builds without UI interaction Provides some support for working with ODP projects in IDEs
  • 6. Brief Aside: Maven It’s not (inherently) scary! Just look how cute that owl is Maven is a tool used for build automation It’s primarily used for Java projects, but is adaptable to many things via plugins A “pom.xml” file is a clear giveaway of Maven’s use We use it here because it allows for cleanly- reproducible builds across systems, without environment-specific details
  • 7. Second Brief Aside: Complexity Will this require lots of command-line knowledge? Not really! Will this require lots of complicated XML configuration? Only kind of! Will this complicate my day-to-day development experience? Only if you want it to!
  • 9. ODP Compiler Takes an ODP and creates an NSF Allows use of Maven and OSGi dependencies (i.e. XPages libraries) Allows dynamically enabling “production” XPages settings like resource aggregation Allows applying a template name and version + build timestamp
  • 12. ODP Compiler Can be standalone or part of a larger project tree Pairs beautifully with Tycho for OSGi compilation and the Assembly Plugin for distribution
  • 13. ODP Compiler Basic configuration is simple: put your ODP in an “odp” directory and add a pom.xml file above it Allows configuration during compilation: Update Site references for OSGi plugins Classpath JARs and Maven dependencies like jvm/lib/ext Override the ODP’s ACL in the pom.xml Add a template name and version on the fly Set the ODS level to target
  • 15. ODP Exporter Takes an NSF and creates an ODP Replicates the behavior of Designer’s source control support Except it’s not incremental (at least not yet) Can be used to export a local NSF file or a remote database Automatically applies Swiper cleanup to exported DXL
  • 17. ODP Exporter Can be used in lieu of Designer’s export sync It’s less convenient, but it’s also less fault-prone Very useful when someone on your team doesn’t use source control Useful to convert NSFs to processable text form I use it for exactly this when doing IP checks for OpenNTF
  • 19. NSF Deployment Deploys a compiled NSF to a server, optionally replacing an existing NSF’s design Allows you to sign the database as the server Provides for Continuous Deployment to a staging server Warning: this component is effectively “beta”
  • 22. Eclipse Extensions Configures the Java classpath Includes OSGi dependencies Adds categories for design elements with nice little pictures Adds DXL autocomplete via the schema files (To whoever at HCL maintains those: thank you)
  • 23. Eclipse Extensions ODP Java classes can directly reference plugins in the workspace Allows for refactoring across both the ODP and plugins, avoiding out-of-step bugs
  • 26. Generally Applicable The ODP is the “source of truth” NSFs only exist as development areas or deployable builds The build process versions and timestamps NTFs The build process is consistent every time Clean NSF output No unintended residue No “Copy Application” mis-clicks
  • 27. Single Developer, Simple NSF Keeps focus on good source-control habits Maven configuration is very small Good way to dip into Jenkins Encourages versioning and discourages shoot-from-the-hip development Works with classic design elements, XPages or no
  • 28. Multi-Person Team, XPages Libraries Maven makes the OSGi bundle build process more consistent Any team member can make a full build Eclipse support allows Java refactoring across OSGi bundles and in- NSF Java classes Eclipse XSP editing allows some tasks to be done fully outside Designer
  • 29. Team With Uncooperative Members If not everyone is on board, use the Exporter to make ODP snapshots The ODP becomes the source of truth In my case, I have a script I run periodically that exports a bunch of NSFs to ODPs It’s not the best workflow, but it’s better than the old ways
  • 30. NPM-based App Container Kick off the NPM install/build with frontend-maven-plugin Include the built resources inside the NSF in WebContent Avoid worries of having to coax Designer into doing it https://frostillic.us/blog/posts/2020/7/17/nsf-odp-tooling-3-1-0- dynamically-including-web-resources
  • 31. Maven Assembly Plugin The Assembly plugin allows you to create a final distribution ZIP In my case, I gather several dozen built NSFs, a couple update sites, support libraries, and instructions This happens at the end of every build, with a ZIP ready to hand off to admins I also use this in almost every one of my OpenNTF projects (Great way to get those LICENSE and NOTICE files in there!) (Saves your friendly IP manager some hassle!)
  • 32. Automated Builds - Jenkins, etc. With some setup, Jenkins can build your apps with every commit Pairs very well with Assembly projects https://frostillic.us/blog/posts/2020/8/27/ nsf-odp-tooling-setting-up-jenkins- builds
  • 34. Potential Future Additions Improvements to deployment If anybody could get me the true “Replace Design” API call, I’d appreciate it Docker-based build runtime Work against a live NSF (“Designer-style”) Ability to edit agents in Eclipse Unit tests for in-NSF code