Компилятор:testCompile помещает все транзитивные зависимости в путь к модулю.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Компилятор:testCompile помещает все транзитивные зависимости в путь к модулю.

Сообщение Anonymous »

Я добавил модуль.info в свой src/main/java, а затем также в свой src/test/java, как показано в примере здесь. Компиляция моего основного кода не представляет проблем. Я вижу, что цель компилятор: компиляция добавляет только мои прямые (нетранзитивные) зависимости к пути модуля (большинство из них являются автоматическими модулями), а остальные - к пути к классу, что отлично, поскольку означает, что мне нужно иметь дело только с проблемы модульности в моих прямых зависимостях. Однако компиляция тестового кода завершается неудачей из-за множества ошибок, связанных с разделенными пакетами. Оказывается, цель compiler:testCompile помещает все мои зависимости в путь к модулю, даже транзитивные, где и возникают эти проблемы с разделенным пакетом.
Почему Плагин компилятора Maven обрабатывает тестовый код иначе, чем производственный код? Есть ли способ заставить цель compiler:testCompile разрешать путь к модулю так же, как цель compiler:compile?
Подробнее:
Соответствующий фрагмент помпы:

Код: Выделить всё

    

io.swagger.parser.v3
swagger-parser
2.1.20


com.fasterxml.jackson.core
jackson-databind
2.17.1


com.fasterxml.jackson.core
jackson-annotations
2.17.1


com.fasterxml.jackson.dataformat
jackson-dataformat-yaml
2.17.1


org.junit.jupiter
junit-jupiter
5.9.0
test


org.assertj
assertj-core
3.25.3
test






org.apache.maven.plugins
maven-compiler-plugin
3.13.0


org.apache.maven.plugins
maven-surefire-plugin
3.5.0



module.info в src/main/java:

Код: Выделить всё

module org.yonas.project {
exports services;
requires swagger.parser.core;
requires swagger.parser;
requires io.swagger.v3.oas.models;
requires com.fasterxml.jackson.annotation;
requires com.fasterxml.jackson.databind;
requires com.fasterxml.jackson.dataformat.yaml;
}
module.info в src/test/java:

Код: Выделить всё

open module org.yonas.project.test {
exports testpackage;
requires org.yonas.project;
requires transitive org.junit.jupiter.api;
requires transitive org.junit.jupiter.engine;
requires java.net.http;
requires com.fasterxml.jackson.databind;
requires swagger.parser.core;
requires swagger.parser;
requires io.swagger.v3.oas.models;
requires org.assertj.core;
}
Выполнение mvn compile -X возвращает результат (среди прочего):

Код: Выделить всё

[DEBUG] Classpath:
[a lot of jars here, including transitive dependencies]

[DEBUG] Modulepath:
[a few jars here, only direct dependencies]
Выполнение mvn test -X возвращает результат (среди прочего):

Код: Выделить всё

[DEBUG] Classpath:
[DEBUG] Modulepath:
[many jars here]

[...]

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0:testCompile (default-testCompile) on project ...
failure: Compilation failure:
[ERROR] the unnamed module reads package com.github.fge.jackson from both jackson.coreutils.equivalence and jackson.coreutils
[ERROR] the unnamed module reads package io.swagger.parser from both swagger.compat.spec.parser and swagger.parser
[ERROR] ...
[...and 97 more errors concerning split packages]
Я пытался удалить файл Module.info из src/test/java, но это приводит к новым проблемам, поскольку я использую в своем тестовом коде библиотеки и модули, которые я не использую в своем тестовом коде. производственный код. Я видел, как люди рекомендовали добавить require static в основной файл mod.info для этих модулей, но я не поклонник этого подхода, поскольку он делает рабочий модуль «знающим» о тестовом коде. Кроме того, для модульных тестов, я думаю, меня не особо волнуют модули, но для моих интеграционных тестов я хотел бы рассматривать свой рабочий код как модульную библиотеку, поэтому не имеет смысла исключать модуль.info из в этом случае src/test/java. Последнее также является причиной того, что я бы предпочел не устанавливать для флагов значение false в конфигурации компилятора и Surefire.

Подробнее здесь: https://stackoverflow.com/questions/790 ... odule-path
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»