Skip to main content
Version: 8.1

Environment Setup

Prerequisites

Regardless of the Development environment you prefer, there are some common prerequisites:

Java JDK

You will need a Java JDK installed. Be mindful of which version you install:

  • Ignition platform 7 requires a Java 1.8 JDK
  • Ignition platform 8.1-8.1.32 requires a Java 11 JDK
  • Ignition platform 8.1.33+ requires a Java 17 JDK
tip

See the Module Setup Considerations: Java 11 and Java 17 section for more information regarding module requirements due to the Java 17 update.

You have several options for JDKs. Popular options are:

Build System

You will need to choose and install a build system. Recommended build systems include Gradle and Maven.

To install Gradle:

SDKMAN! is a tool for managing parallel versions of multiple Software Development Kits on most Unix-based systems: sdk install gradle 8.1.1.

To install Maven:

Linux users can use their package manager to install at the command line: sudo apt-get install maven.

Download IDE and Set Up Your Workspace

Download Eclipse IDE for Java Developers from http://www.eclipse.org/

When you first start Eclipse, you will be asked what workspace you want to work in. A workspace is a folder on your hard drive that holds a collection of projects. You can have multiple workspaces. If you're already an Eclipse user, you'll want to create a new workspace.

To make a workspace, create a folder to be your workspace or choose a path through Eclipse when you start the IDE. For example: C:\development\IgnitionSDK_Workspace. The SDK dependencies will be configured inside the IDE.

Module Setup Considerations: Java 11 and Java 17

Modules created prior to the Ignition Java 17 upgrade in version 8.1.33 may experience issues due to changes from Java 11. A notable difference between versions is that the JDK internals are now Strongly Encapsulated by Default as of Java 16. Module authors should audit their modules for any issues this may cause due to Reflection into the JDK internals.

Note that the Ignition platform and modules will still run on the classpath, meaning they are “unnamed modules”. Therefore, module access within Ignition's API (and even non-public) won’t break with this change.

Identify Issues

  • Audit your code for setAccessible(true) usage for calls within non-public areas of the JDK.
  • Inspect your dependencies for Java 9+ Module Path compatibility and any exceptions that must be required with --add-opens or -add-exports arguments. Upgrade the dependencies that have added support or removed their implementations, breaking the strong encapsulation of the JDK.
  • Set --illegal-access=deny on your current builds to show failures when you are ready to compile with Java 17.
  • Add the JVM argument -Dsun.reflect.debugModuleAccessChecks when running your module on a Nightly Gateway with Java 17 once available. This will log exceptions due to encapsulation, even if the exception is ignored in code.

Non-public JDK Classes

Ignition includes the following mechanisms for dealing with scenarios where you are unable fix your Reflection into non-public JDK classes.

Gateway

Add --add-opens and --add-exports JVM arguments to the ignition.conf file. The following defaults are already included:

--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.util=ALL-UNNAMED

Any additional arguments will need to be communicated by the module author to end users to ensure these values are added to the ignition.conf file.

Vision Clients and Designers

Ignition already supplies a default set of Opens and Exports for launching Clients and Designers to unnamed modules. These values may change over time, and they are visible in the lib/runtime/client-opens.conf and lib/runtime/client-exports.conf files. These files do not need to be modified as Ignition Upgrades will overwrite changes. Files with matching names and formats can be created by end users (per module author recommendation) in the data directory. These will persist across upgrades and will not be modified by Inductive Automation.

Defaults

client-opens.conf
java.base/java.lang
java.base/java.util
java.desktop/java.awt
java.desktop/java.awt.event
java.desktop/javax.swing
java.desktop/javax.swing.tree
java.desktop/javax.swing.plaf.basic
java.desktop/javax.swing.plaf.synth
java.desktop/javax.swing
java.desktop/javax.swing.tree
client-exports.conf
java.base/sun.security.action
java.desktop/com.apple.eawt
java.desktop/com.sun.awt
java.desktop/com.sun.java.swing.plaf.windows
java.desktop/sun.awt
java.desktop/sun.awt.image
java.desktop/sun.awt.shell
java.desktop/sun.awt.windows
java.desktop/sun.swing
java.desktop/sun.swing.plaf.synth
java.desktop/sun.swing.table
java.desktop/sun.print

To see the other changes that may your module, refer to the Java 17 Migration Guide.