Skip to content
A Java Serial Port system. This is a fork of the RXTX project that uses in jar loading of the native code.
Branch: master
Clone or download
Latest commit e06ed10 Jan 5, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
src/main Use named threads Jan 5, 2019
test Added missing license information Aug 29, 2018
.gitignore 0.15.0 Nov 15, 2018
.travis.yml Fix Travis build Sep 1, 2017
LICENSE Added missing license information Aug 29, 2018
Makefile Merge pull request #117 from hammo/master Nov 16, 2018
gradlew Added Travis configuration May 25, 2017


Join the chat at Maven Central Build Status License

This is a fork of the RXTX library with a focus on ease of use and embeddability in other libraries.

Some of the features we have added

  • A simplified serial port object called NRSerialPort. See below for an example.

  • Self-deployment of native libraries (all native code is stored inside the JAR and deployed at runtime). No more manual installation of native code.

  • Arm Cortex support (Gumstix).

  • Android Support (requires a rooted phone to access the serial hardware).

  • Single Makefile compile which simplifies the compilation of project binaries.

  • Gradle support for JAR creation.

  • Removal of partially-implemented RXTX code to streamline the library for just serial port access.

  • Full Eclipse integration for testing application code against sources.

  • RFC 2217 support provided by incorporating the jvser library.

And a bunch of bug fixes

  • Fixed the memory access error that causes OS X to crash the JVM when serial.close() is called.

  • Fixed the Windows serial port zombie bind that prevents re-accessing serial ports when exiting on an exception.

  • Fixed erroneous printouts of native library mis-match.

Dependency Management



Building the JAR

  1. Checkout the repository.

     $ git clone
  2. Build with Gradle.

     $ cd nrjavaserial
     $ gradle build

The resulting JAR will be found in the build/libs/ directory.

Building Native Code

Native code is built using the Makefile found in the root of the repository. After the native code is built, the JAR is rebuilt.

# Build both the 32- and 64-bit Windows binaries.
$ mingw32-make windows

# Build the windows binaries on Linux via Wine.
$ make wine

# Build both the 32- and 64-bit Linux x86 binaries.
$make linux

# Build 32- or 64-bit Linux binaries, respectively.
$ make linux32
$ make linux64

# Build the binaries for all the supported ARM flavors (requires arm-linux-geabi-* packages)
$ make arm

# Build the OSX binaries.
$ make osx

# Build the PPC binaries.
$ make ppc

Building on Windows

You'll need some installation of GCC. We recommend the TDM-GCC distribution of mingw64-w64.

Building on OS X

We're pretty big on maintaining backwards compatibility as far as reasonable. Our OS X natives target OS X 10.5, so to build them, you'll need an appropriate SDK installed. This StackOverflow answer provides pointers for getting the appropriate SDK installed.

How to use NRSerialPort objects

for(String s:NRSerialPort.getAvailableSerialPorts()){
		System.out.println("Availible port: "+s);
String port = "COM3";
int baudRate = 115200;
NRSerialPort serial = new NRSerialPort(port, baudRate);

DataInputStream ins = new DataInputStream(serial.getInputStream());
DataOutputStream outs = new DataOutputStream(serial.getOutputStream());

byte b =;

You can’t perform that action at this time.