У меня был проект maven со старыми зависимостями docx4j, и я хотел обновить его до java 9. Во время обновления я изменил свой проект с maven на gradle.
Итак, теперь у меня есть проект Gradle в IntelliJ с этими зависимостями:
dependencies {
implementation('commons-io:commons-io:2.6')
implementation('javax.xml.bind:jaxb-api:2.4.0-b180725.047')
implementation('org.docx4j:docx4j:6.0.1')
implementation('org.docx4j:docx4j-ImportXHTML:6.0.1')
implementation('org.docx4j:docx4j-export-fo:6.0.1')
testImplementation('junit:junit:4.12')
}
строить работает, но если я хочу открыть файл .docx, с помощью Docx4J.load (...) или WordprocessingMLPackage.load (...) он выдает исключение RuntimeException. В режиме отладки я вижу это сообщение: Класс не загружен: org.docx4j.jaxb.Context
Этот файл Context.java имеет такой статический блок кода:
static {
...
}
Я думаю, что это ошибка, связанная с gradle, потому что я создал новый проект maven с тем же кодом и зависимостями, что и проект gradle, и он работает.
Есть ли какое-то решение для этого, или я должен использовать maven в будущем?




На https://stackoverflow.com/a/51235096/1031689 есть ответ, специфичный для Gradle
Или вместо этого «добавить модуль», см. Например:
Или mac java 9 gradle ClassNotFoundException: javax.xml.bind.JAXBElement при создании
Большой. Если вы хотите внести свой рабочий файл Gradle, я добавлю его в docx4j :-)
Конечно. Я предпочитаю стеклянную рыбу солнцу, поэтому у меня есть перечисленные выше зависимости плюс следующие: org.glassfish.jaxb: jaxb-core: 2.3.0.1 org.glassfish.jaxb: jaxb-runtime: 2.3.0.1
Спасибо за ваш ответ. Первая ссылка мне подошла. Я добавил еще 2 зависимости (jaxb-core и jaxb-impl), и теперь он работает. Я не знаю, почему эти зависимости не нужны для maven.