Building Tomcat from source on MacOS can require some additional work, especially if you want to build all of the optional items such as libtcnative
.
Building Tomcat
Building Tomcat itself is fairly straightforward. Simply download the source distribution of Tomcat and follow the instructions in the BUILDING.txt file bundled with the distribution.
Briefly, you'll need:
- The Tomcat source tarball (the ZIP file is fine, but we're on UNIX, so the tarball is more natural)
- A Java Development Kit, available from Java.net
- Apache ant, available from the Apache ant downloads page
Once you have all that,
ant deploy
You may have to set your JAVA_HOME
environment variable and/or specify the full path to your ant
binary.
Building libtcnative
Building libtcnative
it fairly straightforward as well, but you will need a number of prerequisites that are not terribly obvious as to how to get them.
- Xcode command-line tools, available from Apple's developer tools download site. Make sure you get the proper version for your XCode version (if you have XCode already installed) and your OS version (10.x)
Apache Portal Runtime (APR), available either directly from Apache (APR downloads) or by using https://brew.sh/ (
brew install apr
)
1. (Optional) OpenSSL 1.1.1 (latest at the time of this writing), available either directly from OpenSSL (OpenSSL Downloads) or by using brew ({{{brew install openssl1
Download and unpack the libtcnative sources:
$ tar xzf tomcat-native-x.y.x.tar.gz
$ cd tomcat-native-x.y.z/native
Using OpenSSL
If using OpenSSL:
$ ./configure --with-ssl=[path to OpenSSL] --with-apr=[path to APR] --with-java-home=[your java home]
For example:
$ ./configure --with-ssl=/usr/local/Cellar/openssl@1.1/1.1.1 --with-apr=/usr/local/Cellar/apr/1.6.5 --with-java-home=/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
Without OpenSSL (LibreSSL)
If not using OpenSSL:
./configure --with-ssl=yes --with-apr=[path to APR] --with-java-home=[your java home]
./configure --with-ssl=yes --with-apr=/usr/local/Cellar/apr/1.6.5 --with-java-home=/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
In either case (OpenSSL or not), proceed with the build process:
make
Once this process has completed, your built libraries can be found in .libs/
.
Installing libtcnative
While you can set ld.library.path
to include libraries from all over the place, I recommend that you copy everything into one place so you can easily find everything and it won't interfere with anything else on your system.
First, copy the libtcnative
binaries from where they were built:
$ cp -aR tomcat-native-x.y.z/native/.libs/* apache-tomcat-x.y.z-src/output/build/bin/
Next, copy the APR libraries:
$ cp -aR $APR_HOME/libexec/lib/* apache-tomcat-x.y.z-src/output/build/bin/
Finally, if you are using a custom OpenSSL build, copy those libraries as well:
$ cp -aR $OPENSSL_HOME/lib/* apache-tomcat-x.y.z-src/output/build/bin/
Running Tomcat with libtcnative
Tomcat (really Java) needs to know where to find these native libraries. We do that by setting the java.library.path
environment variable for the JVM during startup. The easiest way to do this is by setting CATALINA_OPTS
on startup. This can be done by adding this line to bin/setenv.sh
:
export CATALINA_OPTS="-Djava.library.path=$CATALINA_HOME/bin"
Then you can startup Tomcat as usual, either:
$ bin/startup.sh
or
$ bin/catalina.sh start