MATLAB: What is the best practice for referencing a full file path in the deployed application

ctfrootfileMATLAB Compilerpathwhich

I am creating a compiled application using MATLAB Compiler, and want to make sure I'm following good pathing practices. I was reading the blog post here, which says that a compiled application behaves more consistently if it uses relative paths (or anchors paths to a known root via matlabroot or ctfroot functions).
In my application, I need to make a connection to a JDBC database. This requires configuring a JDBCConnectionOptions object, which takes in the full file path to the JDBC driver as an input argument, so I need to be able to reference the full file path. I have included the JDBC driver in my compiled application, and know the relative path of the file.
I tried following the instructions in the blog post which suggest using paths relative to the ctfroot; however, in newer (R2018b+) releases of MATLAB you cannot do this in the same way (the directory structure for compiled apps has changed and there is now an additional sub-directory between the ctfroot and the files included with the compiled application).
How can I go about referencing the full path for my JDBC driver in the deployed app?

Best Answer

You are correct that the folder structure has changed from R2018b forward.

In general, the best practice to use when referencing files included in the CTF is to use just the filename, as all files that you include with your application are added to your application's path. However, in cases where this is not possible (e.g. you need to specify a full file path as a function argument), you can do the following:

Use the which function to locate your desired JDBC file on the MATLAB path. For instance, if you include the 'mysql-connector-java-8.0.20.jar' file in your compiled application, you can find the full file path in your compiled application by executing:

>> driverPath = which('mysql-connector-java-8.0.20.jar');

You can then pass the resulting driverPath variable as an input to the setConnectionOptions function.