Files
2026-06-17 14:00:51 +02:00

21 KiB

This is the JMRI distributed "lib" directory, available as the "lib" directory in JMRI/JMRI Git. These are the library files, .jars and others, needed at build and run time.

Contents:

Generally, we use subdirectories to hold the Git-resident versions of OS-specific code for Windows (.dll files) and Linux (.so files) so that we can separate various builds.

For example, the intelbth.dll comes in separate versions for 32-bit and 64-bit Windows, but the files have the same name. We store them in separate subdirectories under windows/, and let the installer sort them out.

A similar mechanism is used for Linux under the linux/ directory.

macOS binaries are treated slightly differently, see the README file there.

Updates

If you make a change in this directory (add/change/remove a file), please make corresponding changes in the control files that are used for various JMRI development and release operations:

  • build.xml - used by Ant; note that in addition to changing the classpath entry or entries, you should also ensure the three javadoc targets are linking to the proper sources
  • pom.xml - used by Maven (see notes below)

If the specific library being added or updated is not published to Maven Central by the upstream provider, run the following command after updating the pom.xml file, replacing the tokens in ALL CAPS with the correct values for that library:

mvn deploy:deploy-file -DgroupId=GROUP -DartifactId=ARTIFACT -Dversion=VERSION -Durl=file:./lib -DrepositoryId=lib -DupdateReleaseInfo=true -Dfile=./lib/FILE.jar

for example:

mvn deploy:deploy-file -DgroupId=net.bobis.jinput.hidraw -DartifactId=jhidrawplugin -Dversion=0.0 -Durl=file:./lib -DrepositoryId=lib -DupdateReleaseInfo=true -Dfile=./lib/jhidrawplugin.jar

After that, add and commit the additional files that were created within lib/

After you have committed your changes, please run

./scripts/check_lib_dates

which checks the dates of the control files to make sure they've been updated when lib/ is updated

Specific components:

JavaVersionCheckWindow.jar
  • Specific class files that have to be compiled with Java 8
    • This is used to launch the warning dialog when running on Java 8 % jdk8 % cd java/src % javac apps/JavaVersionCheckWindow.java % jar cf ../../lib/JavaVersionCheckWindow.jar apps/JavaVersionCheckWindow*.class % jar tf ../../lib/JavaVersionCheckWindow.jar META-INF/ META-INF/MANIFEST.MF apps/JavaVersionCheckWindow$Compatibility.class apps/JavaVersionCheckWindow.class % rm apps/*.class
jmri.script.jsr223graalpython.jar
  • Encapsulation of GraalVM-specific code.
  • See java/graalvm/README.MD for build instructions
apiguardian-api-1.1.0.jar
batik*
batik-js-1.8.jar is a "patched version of Rhino" needed for native-image closure with batik 1.4
        https://mvnrepository.com/artifact/org.apache.xmlgraphics/batik-js/1.8
jetty-*.jar
jsplitbutton-1.3.1.jar
jinputvalidator-0.6.0.jar
assertJ: assertj-core-3.27.7.jar
  • testing only
commons-compress-1.18.jar
  • version 1.18
  • webdrivermanager dependency
commons-lang3-3.7.jar
commons-net-3.9.0.jar
commons-text-1.2.jar
commons-csv-1.9.0.jar
commons-io-2.11.0.jar
  • version 2.11.0
  • JMRI uses this for file selectors
darklaf-, jsvg-, swing-dsl-, swing-extensions-
swingx-core-1.6.5-1.jar
jhall.jar
log4j-api-2.25.3.jar, log4j-core-2.25.3.jar
log4j-slf4j2-impl-2.25.3.jar
slf4j-api-2.0.17.jar
jul-to-slf4j-2.0.17.jar
jcl-over-slf4j-2.0.17.jar
  • commons logging to sl4fj bridge
  • replaces dependency of batik-transcoder
log4j-over-slf4j-2.0.17.jar
  • log4jv1 to slf4j bridge
  • Used by CATS
openlcb.jar
jlfgr-1_0.jar
jSerialComm-2.11.4.jar
purejavacomm-1.0.5.jar
security.policy
  • (JMRI file)
jdom2-2.0.6.1jar
jackson-annotations-2.13.4.jar, jackson-core-2.13.4.jar, jackson-databind-2.13.4.2.jar
json-schema-validator-1.3.3.jar
itu-1.14.0.jar
org.eclipse.paho.client.mqttv3-1.2.5.jar
BlueCove access to bluetooth

bluecove-2.1.1-SNAPSHOT.jar lib/bluecove-bluez-2.1.1-SNAPSHOT.jar bluecove-gpl-2.1.1-SNAPSHOT.jar Installed from JMRI patch 1037 BlueCove (http://bluecove.org/). The file bluecove-2.1.1-SNAPSHOT.jar is licensed under Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0) while the file bluecove-gpl-2.1.1-SNAPSHOT.jar, needed for use on linux, i is licensed under GNU General Public License (http://www.gnu.org/licenses/gpl.html). Questions to johan.bostrom@mollehem.se The particular files are actually lib/github-machaval/bluecove-2.1.1-SNAPSHOT.jar lib/github-machaval/bluecove-bluez-2.1.1-SNAPSHOT.jar lib/github-machaval/bluecove-gpl-2.1.1-SNAPSHOT.jar from https://github.com/ieee8023/blucat/find/master The source for these is also available there. The related project seems to be https://github.com/machaval/bluecove The native libraries were installed on a best guess effort; exact locations might not be right. lib/windows/bluecove.dll lib/windows/bluecove_ce.dll lib/windows/intelbth_ce.dll lib/windows/x64/intelbth_x64.dll lib/windows/x86/intelbth.dll

jython-standalone-2.7.4.jar
jinput (including jinput-2.0.9.jar and unpacked jinput-2.0.9-natives-all.jar)
  • 2.0.9 from maven central
JavaMail 1.4.1 (used to validate email address formats)
  • mailapi.jar
Joal 2.4.0-rc-20230507 (Windows x86 and Linux i386 from v2.4.0-rc-20210111)
  • from https://jogamp.org/deployment/archive/rc/v2.5.0-rc-20230507/jar/ (no longer accessible)

  • -javadoc at https://jogamp.org/deployment/jogamp-next/javadoc/joal/javadoc/

  • cross-platform .jar files joal.jar gluegen-rt.jar

  • plus helper native libraries: for MacOS X 10.4+ extracted from joal-natives-macosx-universal.jar libjoal.dylib libopenal.dylib extracted from gluegen-rt-natives-macosx-universal.jar libgluegen_rt.dylib

  • Windows and Linux libraries from v2.5.0-rc-20230507 https://jogamp.org/deployment/archive/master/gluegen_954-joal_672-jogl_1522-jocl_1160/jar/ for Windows x64 extracted from joal-natives-windows-amd64.jar joal.dll OpenAL32.dll extracted from glugen-rt-natives-windows-amd64.jar gluegen_rt.dll

    for Windows x86 not provided, see v2.4.0-rc-20210111 below

    for Linux x86_64 extracted from joal-natives-linux-amd64.jar libjoal.so libopenal.so extracted from glugen-rt-natives-linux-amd64.jar libgluegen_rt.so

    for Linux armv6l extracted from joal-natives-linux-armv6hf.jar libjoal.so libopenal.so extracted from glugen-rt-natives-linux-armv6hf.jar libgluegen_rt.so

    for Linux armv7l extracted from joal-natives-linux-armv6hf.jar libjoal.so libopenal.so extracted from glugen-rt-natives-linux-armv6hf.jar libgluegen_rt.so

    for Linux aarch64 extracted from joal-natives-linux-aarch64.jar libjoal.so libopenal.so extracted from glugen-rt-natives-linux-aarch64.jar libgluegen_rt.so

    for Linux i386 not provided, see v2.4.0-rc-20210111 below

  • Windows and Linux libraries from v2.4.0-rc-20210111 https://jogamp.org/deployment/archive/rc/v2.4.0-rc-20210111/jar/ (no longer accessible) for Windows x86 extracted from joal-natives-windows-i586.jar joal.dll soft_oal.dll extracted from glugen-rt-natives-windows-i586.jar gluegen_rt.dll

    for Linux i386 extracted from joal-natives-linux-i586.jar libjoal.so libopenal.so extracted from glugen-rt-natives-linux-i586.jar libgluegen_rt.so

jmdns.jar
jna-5.13.0.jar
jna-platform-5.13.0.jar
pi4j-core-2.8.0.jar, pi4j-library-gpiod-2.8.0.jar, pi4j-plugin-raspberrypi-2.8.0.jar, pi4j-plugin-linuxfs-2.8.0.jar, pi4j-plugin-gpiod-2.8.0.jar
  • Pi4J V2 (latest 2.x release, Java 11+ compatible)
  • from https://pi4j.com/
  • Used for supporting GPIO pins on a Raspberry Pi. pi4j-core is required at compile time and at runtime (it must be on the application classpath to avoid NoClassDefFoundError).
  • pi4j-library-gpiod is the JNI wrapper for the native libgpiod C library; transitive runtime dependency of pi4j-plugin-gpiod. Requires sudo apt install libgpiod2 on the Pi.
  • pi4j-plugin-gpiod uses the modern Linux GPIO character-device interface (/dev/gpiochip*) and is preferred on kernel 5.10+; pi4j-plugin-linuxfs uses the legacy sysfs interface (/sys/class/gpio).
  • All hardware plugins are loaded at runtime via Java ServiceLoader on Raspberry Pi hardware; they are optional on non-Pi systems.
  • Pin addressing uses BCM (Broadcom) numbers; e.g. system name "PS4" → BCM GPIO 4.
thumbnailator-0.4.8.jar
vecmath-1.5.2.jar
xAPlib.jar
xbee-java-library-1.3.1.jar
xercesImpl-2.12.2.jar
xml-apis-1.4.01.jar

#- For xercesImpl 2.12.2

but we use the one provided by the JRE - see pom.xml - so there's no file for this

xml-apis-ext-1.3.04.jar
  • from Maven
usb-api-1.0.2.jar, usb4java-.jar, libusb4java-.jar
beansbinding-1.2.1.jar
  • version 1.2.1
  • used in web server preference panels
cglib-nodep-2.2.2.jar
  • version 2.2.2
checkstyle-8.29-all.jar
  • version 8.29
datatable-1.1.12.jar and datatable-dependencies-1.1.12.jar
  • version 1.1.12
  • cucumber 4.3.1 dependency
gherkin-5.1.0.jar
  • cucumber 4.3.1 dependency
gherkin-jvm-deps-1.0.4.jar
  • version 1.0.4
hid4java-0.5.0.jar
  • version 0.5.0
  • cross-platform HID USB, eg RailDriverMenuItem
jarchivelib-1.0.0.jar
  • version 1.0.0
  • dependency for webdrivermanager
javacc.jar
  • version 7.0.3
javassist-3.28.0-GA.jar
  • initially used to mock an XBee Connection for testing.
javax.servlet-api-3.1.0.jar
  • version 3.1.0
  • Related to Jetty Web Server
jsoup-1.15.3.jar
  • version 1.15.3
  • used to test rebuild Help metadata
  • see jmri.util.GenerateSearchIndexTest
objenesis-3.3.jar
  • version 3.4
  • Mockito dependency
opentest4j-1.3.0.jar
  • version 1.3.0
  • Downloaded from Maven 2025-09-25
  • Used with JUnit ant
tag-expressions-1.1.1.jar
  • version 1.1.1
  • cucumber related
typetools-0.5.0.jar
  • version 0.5.0
  • cucumber dependency
webdrivermanager-4.2.2.jar
  • version 4.2.2
xmlgraphics-commons-2.6.jar
  • version 2.6
  • batik related
BiDiB protocol implementation: jbidibc--2.0.40.jar, bidibwizard--2.0.44.jar
  • version 2.0.40 / 2.0.44
  • bidibwizard*.jar supports the BiDiB connection simulation
commons-collections4-4.4.jar
  • version 4.4
  • used by jbidibc/bidibwizard
eventbus-1.4.jar
  • version 1.4
  • used by jbidibc/bidibwizard
javax.activation-api-1.2.0.jar
  • version 1.2.0
  • used by jbidibc/bidibwizard
jaxb-api-2.3.1.jar, jaxb-core-2.3.0.1.jar, jaxb-impl-2.3.2.jar
  • version 2.3
  • used by jbidibc/bidibwizard
jgoodies-binding-2.13.0.jar
  • version 2.13.0
  • used by jbidibc/bidibwizard
jgoodies-common-1.8.1.jar
  • version 1.8.1
  • used by jbidibc/bidibwizard
reflections-0.10.2.jar
  • used for runtime intraspection of classes.

For unit tests & development work only:

ArchUnit: archunit-.jar, archunit-junit5-api-.jar, archunit-junit5-engine-.jar, archunit-junit5-engine-api.jar
byte-buddy-1.14.15
  • version 1.18.2
  • Mockito dependency
checker-framework directory and contents
cucumber-core-4.3.1.jar
  • version 4.3.1
  • Used for testing only, not at runtime
cucumber-expressions-6.2.2.jar
  • version 6.2.2
cucumber-html-0.2.7.jar
  • version 0.2.7
cucumber-java-4.3.1.jar
  • version 4.3.1
cucumber-java8-4.3.1.jar
  • version 4.3.1
cucumber-junit-4.3.1.jar
  • version 4.3.1
cucumber-jvm-deps-1.0.6.jar
  • version 1.0.6
cucumber-picocontainer-4.3.1.jar
  • version 4.3.1
ecj.jar
jemmy-2.3.1.1-RELEASE125.jar
junit-jupiter-*
  • version 5.13.4
  • Downloaded from Maven Central 2025-09-25
junit-platform-*
  • version 1.13.4
  • Downloaded from Maven Central 2025-09-25
junit-vintage-engine-5.13.4.jar
  • Downloaded from Maven Central 2025-09-25
junit-platform-console-standalone
  • version 5.13.4
  • for ant builds
  • Downloaded from Maven Central 2025-09-25
mockito-core
  • version 5.21.0
OpenIDE Utilities
PlantUML
rscbundlecheck.jar
  • check for duplicated properties
selenium-server-standalone-3.141.59
system-rules-1.16.0.jar
  • Handle rules for testing calls to java.System methods
jcip-annotations-1.0.jar
jsr305.jar
spotbugs-annotations-4.9.8.jar
picocontainer-2.15.jar
  • version 2.15
  • Required by Cucumber 4.3.1 Tests.
  • Used for testing only, not at runtime
org.jacoco.ant-0.8.14-nodeps.jar
  • version 0.8.14

Older, no longer present:

junit-4.12.jar
UmlGraph-5.7
javacsv.jar
crimson.jar
MRJAdaper.jar
  • version, source unknown
  • No longer used as of JMRI 2.13.4
ExternalLinkContentViewerUI.jar
  • made with Java 1.6 by JMRI to handle the single jmri.util.ExternalLinkContentViewerUI class, now being carried in this jar file instead of source until we migrate to Java 1.6
  • No longer used as of JMRI 2.99.1
servlet.jar:
  • jakarta-servletapi-3.2.3-src/lib/servlet.jar but no longer included
Serialio.jar
libusb-jar (ch.ntb.usb.jar)
    http://inf.ntb.ch/infoportal/help/index.jsp?topic=/ch.ntb.infoportal/tools.html
    http://libusb.wiki.sourceforge.net/
    libusb installers from "TWAIN SANE" http://www.ellert.se/twain-sane/
hamcrest-core-1.3.jar
org-openide-util-RELEASE126.jar
  • No longer used as of JMRI 5.1.5

SpotBugs static analysis

  • used in pom.xml
springframework-*