Files
JIMRI/lib/README.md
T
2026-06-17 14:00:51 +02:00

650 lines
21 KiB
Markdown

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](http://maven.org) 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
- icons from see http://www.coderanch.com/t/341737/GUI/java/Expand-Collapse-Panels
##### 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 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
- 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