Gradle 6 / Java 11 ошибка «модуль не найден» для poi и poi-oo xml, но jar-файлы существуют - PullRequest
3 голосов
/ 25 мая 2020

У меня проблема, которая уже несколько дней сводит меня с ума. Я относительно новичок в модульной системе Java, но мне удавалось правильно объявлять свои зависимости, пока я не начал использовать poi.

Вот мой фрагмент build.gradle (gradle v 6.4):

dependencies {

implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.slf4j:log4j-over-slf4j:1.7.30'

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'commons-net:commons-net:3.6'
implementation 'com.google.guava:guava:28.1-jre'

implementation 'org.apache.poi:poi:4.1.2'
implementation 'org.apache.poi:poi-ooxml:4.1.2'

}

Вот банки poi, правильно расположенные в моем кэше Gradle:

~/.gradle/caches/modules-2/files-2.1/org.apache.poi$ tree
.
├── poi
│   └── 4.1.2
│       ├── 964bf41cf68bce08e4ef6b2279b559fdf8d454f4
│       │   └── poi-4.1.2.jar
│       ├── 9ce4c76815903772b25324d8419df2d3fe227f4d
│       │   └── poi-4.1.2.pom
│       └── ac5af3832ebaef94562a39591a000338bbae0e4b
│           └── poi-4.1.2-sources.jar
├── poi-ooxml
│   └── 4.1.2
│       ├── 712cc02d5bbe729d2485a1579f3d8dfc47e25b51
│       │   └── poi-ooxml-4.1.2-sources.jar
│       ├── 87d9a22aa9a7dd26e80c360e709f7ee02e32ab3b
│       │   └── poi-ooxml-4.1.2.jar
│       └── ccbcde71e4f0fdfa80e1007dd1babfc9828c629e
│           └── poi-ooxml-4.1.2.pom

Вот моя информация о модуле. java:

module template {
    requires spring.core;
    requires poi;
    requires poi.ooxml;
}

Вот ошибка, которую я получаю при запуске чистой сборки gradle:

error: module not found: poi
    requires poi;
             ^

Вещи, которые я пробовал:

  1. Удаление моего кеша gradle и выполнение полной --refre sh -dependencies build
  2. Поиск всех подзависимостей poi и poi-oo xml и добавление в build.gradle
  3. Использование api вместо реализации для poi и poi- oo xml в build.gradle

Я в своем уме на этом - работаю в выходной! - и мог бы действительно оценить некоторый вклад.

1 Ответ

1 голос
/ 27 мая 2020

Как указано в моем комментарии выше, я заставил это работать, только войдя в jar библиотеки poi и добавив следующее в MANIFEST.MF:

Automatic-Module-Name: poi

Модуль automati c должен был быть создано java без этого (он просто генерирует имя модуля из имени jar), но не было, пока я не добавил это. Однако модули automati c были созданы правильно с другими библиотеками, поэтому не совсем понимаю, что отличает их. 1006 *

...