Как мне получить mcc
для распознавания импорта из предоставленных пользователем библиотек Java или просто для игнорирования неразрешимого импорта?
У меня есть база кода Matlab, которую я создаю с помощью компилятора Matlab, носборка ломается, потому что mcc
выдает ошибку, когда встречает операторы import
для классов Java, которые были в JAR-файлах в динамическом пути к классам Matlab.Я включаю все файлы JAR в classpath с параметром mcc -a
.Код работает в IDE, и я думаю, что он будет работать в развернутом приложении, если он только позволит мне собрать.(Работает под R2009b, который игнорирует этот импорт в классах не-MCOS.)
Вот простое повторение.Этот файл находится в том же каталоге, что и guava-11.0.1.jar из Google Guava.
%file hello_world_with_import.m
function hello_world_with_import
import com.google.common.base.Stopwatch;
disp('Hello, world!');
end
Запуск его в Matlab работает нормально.Но построить его не удается.(javaaddpath
здесь не является строго необходимым в примере, потому что плохой импорт сам по себе не является ошибкой в простом Matlab. Просто показывает, как это работает на практике, и как я хочу, чтобы mcc
подобрал его.)
>> javaaddpath('guava-11.0.1.jar');
>> hello_world_with_import()
Hello, world!
>> mcc -m -a guava-11.0.1.jar hello_world_with_import
Error: File: C:\Temp\import_test\hello_world_with_import.m Line: 3 Column: 8
Arguments to IMPORT must either end with ".*"
or else specify a fully qualified class name: "com.google.common.base.Stopwatch" fails this test.
Unable to determine function name or input/output argument count for function
in MATLAB file "hello_world_with_import".
Please use MLINT to determine if this file contains errors.
Error using mcc
Error executing mcc, return status = 1 (0x1).
Это в Matlab R2011b на Windows.
Некоторые сведения о моем окружении.Мое приложение имеет около 40 JAR-файлов на динамическом пути к классам, которые представляют собой смесь сторонних библиотек и нашего собственного кода Java.Он развернут более чем на 50 пользователей на однопользовательских и многопользовательских компьютерах с Windows.Есть и другие группы, которые могут развертывать другие приложения MCR для тех же пользователей и машин.На любой машине разные приложения MCR могут запускаться одновременно одним и тем же или разными пользователями.Мы делаем еженедельные выпуски, и (в основном из-за изменений в нашем собственном Java-коде), по крайней мере, один JAR-файл изменяется во всех остальных выпусках.Мне нужен механизм, который будет работать в этой среде.
Есть предложения?Кто-нибудь знает хороший способ заставить mcc
добавить материал в его путь к классу Java на этапе компиляции, или просто игнорировать фиктивный импорт?Мой запасной план состоит в том, чтобы пройти через кодовую базу и удалить все импорты для классов Java, что является проблемой.
ОБНОВЛЕНИЕ 12/2/2012: я слышал от MathWorks, что это исправлено вMatlab R2012b.(Но я больше не использую Matlab, поэтому не могу лично проверить его.)
ОБНОВЛЕНИЕ 12/09/2014: я снова использую Matlab (R2014b), и теперь компилятор Matlab включает в себя JAR-файлы, которыена динамическом пути к классам в динамическом пути к классам скомпилированной программы.Похоже, он не включает автоматически файлы JAR в архив;Вы должны вручную включить их, используя ключ командной строки mcc
, или добавить их как «дополнительные включенные файлы» в приложение Matlab Compiler.