What is the best practice for referencing a full file path in my deployed application?

5 visualizaciones (últimos 30 días)
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?

Respuesta aceptada

MathWorks Support Team
MathWorks Support Team el 8 de Mayo de 2020

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.

  1 comentario
cr
cr el 22 de Oct. de 2025 a las 5:23
This can be a problem if there is a file on the desktop "mysql-connector-java-8.0.20.jar" which is say corrupt or an older version of the correct file. Won't which() return the path of the version on desktop rather than the one I packaged with the application?
Isn't ctfroot expected to reliably tell the exact path where the files are copied?

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Application Deployment en Help Center y File Exchange.

Productos


Versión

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by