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 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:
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
it fairly straightforward as well, but you will need a number of prerequisites that are not terribly obvious as to how to get them.
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
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
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/
.
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/ |
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