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
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:
- Linux
- OSX
- Windows
SDKMAN! is a tool for managing parallel versions of multiple Software Development Kits on most Unix-based systems: sdk install gradle 8.1.1.
OSX users using brew can brew install gradle.
- Download the latest Gradle distribution.
- Create a new directory
C:\Gradlewith File Explorer. - Open a second File Explorer window and go to the directory where the Gradle distribution was downloaded. Double-click the ZIP archive to expose the content.
- Drag the content folder
gradle-8.1.1to your newly createdC:\Gradlefolder. - In File Explorer right-click on the This PC (or Computer) icon, then click Properties -> Advanced System Settings -> Environmental Variables.
- Under System Variables select Path, then click Edit. Add an entry for
C:\Gradle\gradle-8.1.1\bin. - Click OK to save.
To install Maven:
- Linux
- OSX
- Windows
Linux users can use their package manager to install at the command line: sudo apt-get install maven.
OSX users using brew can brew install maven.
Windows users can install via Chocolatey (choco install maven) or by downloading the installer at the Maven downloads page.
Download IDE and Set Up Your Workspace
- Eclipse
- IntelliJ
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.
Download IntelliJ Community Edition from https://www.jetbrains.com/idea/
When you first install IntelliJ, you will be prompted to do the following:
- Check the option to "Add 'bin' folder to the PATH".
- Check the option to "Add 'Open Folder as Project'".
- Accept all other defaults.
- Reboot when prompted.
We also recommend that you set up auto-import.
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-opensor-add-exportsarguments. Upgrade the dependencies that have added support or removed their implementations, breaking the strong encapsulation of the JDK. - Set
--illegal-access=denyon your current builds to show failures when you are ready to compile with Java 17. - Add the JVM argument
-Dsun.reflect.debugModuleAccessCheckswhen 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
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
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.