Я пытаюсь заставить j2objc работать на нескольких моих модулях только для Java в проекте Gradle. Я использую плагин gradle для j2objc, но не думаю, что это источник каких-либо проблем. Модуль использует XMLUnit для обнаружения различий во входных файлах. XMLUnit включает класс org.xmlunit.builder.JaxbBuilder
, который не может быть переведен из-за того, что не видит некоторые классы javax, опущенные в j2objc, предположительно, потому, что они не могут быть переведены. В любом случае мой код не использует класс JaxbBuilder
, поэтому я создал отчет о мертвом коде, чтобы опустить его. Я знаю, что могу использовать proguard для создания более полного набора, но на данный момент я сосредоточен только на предотвращении попыток использования этого класса, поскольку я все еще работаю над конвейером Gradle CI для всего этого. Отчет называется dead_code.log
и содержит только следующую строку:
org.xmlunit.builder.JaxbBuilder
Конфигурация плагина j2objc указана как:
j2objcConfig {
autoConfigureDeps true
// Xcode workspace directory
xcodeProjectDir '../ios'
translateArgs '--dead-code-report', './dead_code.log'
translateArgs '--doc-comments'
translateArgs '-v'
finalConfigure() // Must be last call to configuration
}
И я вижу в журнале, что аргументы мертвого кода были добавлены в командную строку, но при выполнении я тогда вижу:
Что я интерпретирую как означающее, что он пытался обработать класс
JaxbBuilder
. Есть ли что-то в конфигурации, чего мне не хватает?
Первым шагом преобразования j2objc является вызов компилятора Eclipse Java, поэтому ссылки на мертвый код должны быть разрешены, чтобы транслятор мог продолжить работу, даже если класс с этими ссылками позже удаляется на этапе устранения мертвого кода. Добавление файла jar для разрешения классов javax.xml.bind (например, jaxb-api.jar) устранит большинство этих ошибок.