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
- version 1.1.0
- provides Javadoc markers of API stability
- from https://github.org/apiguardian-team/apiguardian
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
- version 9.4.28.v20200408
- provides the HTTP and WebSocket servers
- from https://search.maven.org/search?q=g:org.eclipse.jetty%20v:9.4.28.v20200428
jsplitbutton-1.3.1.jar
- version 1.3.1
- provides a Swing split button
- contributed by Randall Wood
- from https://github.com/rhwood/jsplitbutton
- javadoc at https://www.javadoc.io/doc/com.alexandriasoftware.swing/jsplitbutton/1.3.1
jinputvalidator-0.6.0.jar
- version 0.6.0
- provides validation for JComponents
- contributed by Randall Wood
- from https://github.com/rhwood/jinputvalidator
- javadoc at https://www.javadoc.io/doc/com.alexandriasoftware.swing/jinputvalidator/0.6.0
assertJ: assertj-core-3.27.7.jar
- testing only
commons-compress-1.18.jar
- version 1.18
- webdrivermanager dependency
commons-lang3-3.7.jar
- version 3.7
- provides org.apache.commons.lang3
- from https://commons.apache.org/proper/commons-lang/
commons-net-3.9.0.jar
- version 3.9.0
- not used in direct compilation, not clear where it is used
- from https://commons.apache.org/proper/commons-net/download_net.cgi
commons-text-1.2.jar
- version 1.2
- provides Apache Commons string utilities
- from https://commons.apache.org/proper/commons-text/
commons-csv-1.9.0.jar
- version 1.9.0
- provides Apache Commons CSV file parsing
- from https://commons.apache.org/proper/commons-csv/
commons-io-2.11.0.jar
- version 2.11.0
- JMRI uses this for file selectors
darklaf-, jsvg-, swing-dsl-, swing-extensions-
- from Maven Central, with version in file name
- These provide the DarkLaf look&feel package
- https://github.com/weisJ/darklaf
swingx-core-1.6.5-1.jar
- used by DarkLaf look&feel at runtime
- From https://repo1.maven.org/maven2/org/swinglabs/swingx/swingx-core/1.6.5-1/
jhall.jar
- version 2.03
- from http://java.sun.com/javase/technologies/desktop/javahelp/
log4j-api-2.25.3.jar, log4j-core-2.25.3.jar
- version 2.25.3
- from https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api/2.25.3
- from https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/2.25.3
log4j-slf4j2-impl-2.25.3.jar
- from https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j2-impl/2.25.3
- slf4j bridge to log4j2
slf4j-api-2.0.17.jar
- slf4j API
- from https://mvnrepository.com/artifact/org.slf4j/slf4j-api
jul-to-slf4j-2.0.17.jar
- java.util.logging to slf4j
- from https://mvnrepository.com/artifact/org.slf4j/jul-to-slf4j/2.0.17
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
- 0.8.6 from https://repo.maven.apache.org/maven2/org/openlcb/openlcb/0.8.6/openlcb-0.8.6.jar
- with PRs through #303 pre-release https://github.com/openlcb/OpenLCB_Java/pull/303
jlfgr-1_0.jar
jSerialComm-2.11.4.jar
- Supported serial lib since JMRI 5.7.1
- from https://fazecast.github.io/jSerialComm/
purejavacomm-1.0.5.jar
- version 1.0.5 plus custom change to the Mac M1 support (only)
- from https://search.maven.org/artifact/org.opensmarthouse/purejavacomm/1.0.5/jar
- formerly from http://www.sparetimelabs.com/maven2/com/sparetimelabs/purejavacomm/1.0.1/
- javadoc still at https://static.javadoc.io/com.github.purejavacomm/purejavacomm/1.0.1.RELEASE
- we are migrating away from this for JMRI itself, but we keep distributing it because BiDib and some scripts use it
security.policy
- (JMRI file)
jdom2-2.0.6.1jar
- version 2.0.6.1
- see <jdom.org>
- from Maven Central https://mvnrepository.com/artifact/org.jdom/jdom2/2.0.6.1
jackson-annotations-2.13.4.jar, jackson-core-2.13.4.jar, jackson-databind-2.13.4.2.jar
- JSON processing library com.fasterxml.jackson
- see http://www.journaldev.com/2324/jackson-json-processing-api-in-java-example-tutorial
json-schema-validator-1.3.3.jar
- JSON Schema validation library
- from https://github.com/networknt/json-schema-validator/releases
itu-1.14.0.jar
- Internet Time Utility date-time parser and formatter
- Required by json-schema-validator-1.3.3
- from https://mvnrepository.com/artifact/com.ethlo.time/itu/1.14.0 12/12/2025
org.eclipse.paho.client.mqttv3-1.2.5.jar
- Eclipse Paho library https://www.eclipse.org/paho/
- mqtt-client-0.4.0.jar starting in JMRI 4.11.5, move to 1.2.5 in JMRI 4.21.3
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
- from http://repo1.maven.org/maven2/org/python/jython-standalone/2.7.4/
- unlike jython-2.7.4.jar, includes embedded standard python libs
- unlike jython-slim-2.7.4.jar, includes embedded Java dependencies
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
- Version 3.5.5 (2018-12-04)
- from https://github.com/jmdns/jmdns/releases
jna-5.13.0.jar
- Java Native Access library
- from https://mvnrepository.com/artifact/net.java.dev.jna/jna/5.13.0
- See also https://github.com/java-native-access/jna
jna-platform-5.13.0.jar
- Java Native Access platform-specific utilities library
- from https://mvnrepository.com/artifact/net.java.dev.jna/jna-platform/5.13.0
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 libgpiod2on 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
- Thumbnailator
- from https://github.com/coobird/thumbnailator
- Used by jmri.util.swing.ResizableImagePanel to read Exif information in JPEG files.
vecmath-1.5.2.jar
- from Java3D 1.5.2
- from http://search.maven.org/#search%7Cga%7C1%7Cg%3Ajavax.vecmath
xAPlib.jar
- xAP automation protocol support
- From http://patrick.lidstone.net/html/dev_tools.html
- See license http://patrick.lidstone.net/html/xap.html
xbee-java-library-1.3.1.jar
- Official XBee support library from Digi
- from https://github.com/digidotcom/XBeeJavaLibrary
xercesImpl-2.12.2.jar
- version Xerces-J 2.12.2
- from Maven https://mvnrepository.com/artifact/xerces/xercesImpl/2.12.2
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
- usb4java version 1.3.0
- support for direct USB device usage
- from https://github.com/usb4java/usb4java/releases/tag/usb4java-1.3.0 and https://github.com/usb4java/usb4java-javax/releases/tag/usb4java-javax-1.3.0
- lib/libusb4java-1.3.0-darwin-aarch64.jar made from a .dylib found at https://github.com/developersu/ns-usbloader/issues/91
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
- See https://www.archunit.org
- Jars from https://mvnrepository.com/artifact/com.tngtech.archunit/ 2025-10-09
- version 1.4.1
byte-buddy-1.14.15
- version 1.18.2
- Mockito dependency
checker-framework directory and contents
- The Checker Framework 2.0.1 (1-Jun-2016)
- From http://types.cs.washington.edu/checker-framework/
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
- Eclipse compiler 4.19 from
- https://archive.eclipse.org/eclipse/downloads/drops4/R-4.19-202103031800/ (via selecting ecj-4.10.jar) March 3, 2021
- used in ant warnings target
jemmy-2.3.1.1-RELEASE125.jar
- Sept 13, 2021
- From https://mvnrepository.com/artifact/org.netbeans.external/jemmy-2.3.1.1/RELEASE125
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
- org-openide-util-lookup-RELEASE150.jar
- Downloaded from Maven Central 2022-10-07
- https://mvnrepository.com/artifact/org.netbeans.api/org-openide-util-lookup/RELEASE150
PlantUML
- plantuml.jar from plantuml.org plantuml-1.2025.2
- umldoclet.jar downloaded as umldoclet-2.0.10-javadoc.jar from https://github.com/talsma-ict/umldoclet/releases see https://github.com/talsma-ict/umldoclet
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
- From Java Concurrency In Practice (http://jcip.net)
- Only needed at compile/build time, not runtime
- http://repo1.maven.org/maven2/net/jcip/jcip-annotations/1.0/
jsr305.jar
- From FindBugs 3.0.0 from http://findbugs.sourceforge.net
- Only needed at compile/build time, not runtime
spotbugs-annotations-4.9.8.jar
- From SpotBugs 4.9.8
- Only needed at compile/build time, not runtime
- https://mvnrepository.com/artifact/com.github.spotbugs/spotbugs-annotations/4.9.8
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
- version 4.12
- from http://search.maven.org/#artifactdetails%7Cjunit%7Cjunit%7C4.12%7Cjar
- JUnit4 classes currently accessed via junit-platform-console-standalone
UmlGraph-5.7
- from http://www.umlgraph.org/download.html
- only used for ant javadoc-uml with earlier Java
- removed in JMRI 5.1.3
javacsv.jar
- version 2.0
- from http://javacsv.sourceforge.net
- No longer used as of JMRI 4.19.3
crimson.jar
- version 1.1.3
- from http://xml.apache.org/crimson/
- No longer used as of JMRI 2.7.6
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
- from http://serialio.com
- No longer used as of JMRI 4.7.X
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/
- version 0.5.7
- libusbJava.jnilib for MacOS X to get 64-bit, from http://wiki.ztex.de/doku.php?id=en:software:porting#macos_port requires /usr/local/lib/libusb-0.1.4.dylib via MacPorts or Homebrew or an installer from http://www.ellert.se/twain-sane/
- LibusbJava.dll for Windows is 0.2.3.0 (Feb 18, 2008)
- libusbJava.so for Linux was built on Ubuntu 7.10 w libusb 2:0.1.12-7
- No longer used as of JMRI 4.9.1
hamcrest-core-1.3.jar
- version 1.3
- Used for testing only, not at runtime
- from http://search.maven.org/#artifactdetails%7Corg.hamcrest%7Chamcrest-core%7C1.3%7Cjar
- No longer used as of JMRI 5.1.3
org-openide-util-RELEASE126.jar
- No longer used as of JMRI 5.1.5
SpotBugs static analysis
- used in pom.xml
springframework-*
- version 5.1.14
- from https://search.maven.org/search?q=g:org.springframework%20v:5.1.14.RELEASE
- Mocks Java Servlet requests and responses
- No longer used as of JMRI 5.15.5