Ресурс Liquibase найден как в целевой папке Maven, так и в хранилище Maven

У меня есть проект Eclipse Maven GWT, и я добавил flowable-form-engine зависимость, которая использует Liquibase. Liquibase ищет файл журнала изменений org/flowable/form/db/liquibase/flowable-form-db-changelog.xml но находит два!

org.flowable.common.engine.api.FlowableException: Error initialising form data schema
    at org.flowable.form.engine.impl.db.FormDbSchemaManager.initSchema(FormDbSchemaManager.java:58)
    at org.flowable.form.engine.impl.cmd.SchemaOperationsFormEngineBuild.execute(SchemaOperationsFormEngineBuild.java:29)
    at org.flowable.form.engine.impl.cmd.SchemaOperationsFormEngineBuild.execute(SchemaOperationsFormEngineBuild.java:24)
    at org.flowable.common.engine.impl.interceptor.DefaultCommandInvoker.execute(DefaultCommandInvoker.java:10)
    at org.flowable.common.engine.impl.interceptor.TransactionContextInterceptor.execute(TransactionContextInterceptor.java:53)
    at org.flowable.common.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:71)
    at org.flowable.common.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:30)
    at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:56)
    at org.flowable.form.engine.impl.FormEngineImpl.<init>(FormEngineImpl.java:45)
    at org.flowable.form.engine.FormEngineConfiguration.buildFormEngine(FormEngineConfiguration.java:172)
    at org.flowable.form.engine.configurator.FormEngineConfigurator.initFormEngine(FormEngineConfigurator.java:83)
    at org.flowable.form.engine.configurator.FormEngineConfigurator.configure(FormEngineConfigurator.java:63)
    at org.flowable.common.engine.impl.AbstractEngineConfiguration.configuratorsAfterInit(AbstractEngineConfiguration.java:859)
    at org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl.init(ProcessEngineConfigurationImpl.java:985)
    at org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl.buildProcessEngine(ProcessEngineConfigurationImpl.java:887)
    at sk.dominanz.coarui.server.services.WorkflowServiceAdditional.<clinit>(WorkflowServiceAdditional.java:64)
    ... 33 more
Caused by: liquibase.exception.ChangeLogParseException: Error Reading Migration File: Found 2 files that match org/flowable/form/db/liquibase/flowable-form-db-changelog.xml
    at liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:118)
    at liquibase.parser.core.xml.AbstractChangeLogParser.parse(AbstractChangeLogParser.java:15)
    at liquibase.Liquibase.getDatabaseChangeLog(Liquibase.java:217)
    at liquibase.Liquibase.update(Liquibase.java:190)
    at liquibase.Liquibase.update(Liquibase.java:179)
    at liquibase.Liquibase.update(Liquibase.java:175)
    at liquibase.Liquibase.update(Liquibase.java:168)
    at org.flowable.form.engine.impl.db.FormDbSchemaManager.initSchema(FormDbSchemaManager.java:52)
    ... 48 more
Caused by: java.io.IOException: Found 2 files that match org/flowable/form/db/liquibase/flowable-form-db-changelog.xml
    at liquibase.util.StreamUtil.singleInputStream(StreamUtil.java:206)
    at liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:71)
    ... 55 more

Поэтому я отладил его, и он нашел один ресурс из целевого каталога:

jar:file:/C:/work/git/coarui/target/Main-1.0-SNAPSHOT/WEB-INF/lib/flowable-form-engine-6.4.0.jar!/org/flowable/form/db/liquibase/flowable-form-db-changelog.xml

и другой ресурс из репозитория Maven:

jar:file:/C:/Users/Piro/.m2/repository/org/flowable/flowable-form-engine/6.4.0/flowable-form-engine-6.4.0.jar!/org/flowable/form/db/liquibase/flowable-form-db-changelog.xml

Есть ли способ игнорировать один из них, или мой путь сборки или определение зависимости неверны?

Мой путь сборки содержит:

  • исходники src/main/java
  • исходники src/test/java
  • Системная библиотека JRE
  • Зависимости Maven (в C: /Users/Piro/.m2/repository...)
  • JUnit4

Глядя на ресурсы исходного кода читаются classLoader.getResources(path); где загрузчик класса - погрузчик класса пристани JettyLauncher$WebAppContextWithReload$WebAppClassLoaderExtension,

В моей конфигурации run / debug у меня есть classpath, аналогичный пути сборки плюс библиотека GWT gwt-dev-2.8.1.jar - C:\Users\Piro\.m2\repository\com\google\gwt\gwt-dev\2.8.1

В pom.xml зависимость определяется как:

<dependency>
  <groupId>org.flowable</groupId>
  <artifactId>flowable-form-engine-configurator</artifactId>
  <version>${flowableVersion}</version>
</dependency>

Maven GWT плагин groupId=net.ltgt.gwt.maven, artifactId=gwt-maven-plugin имеет параметр конфигурации classpathScope но я проверял <classpathScope>compile+runtime</classpathScope>, <classpathScope>compile</classpathScope> а также <classpathScope>runtime</classpathScope> и та же ошибка происходит.

Ища в интернете, я нашел похожие посты на текущем форуме ( 1, 2), но решения не найдено.

2 ответа

Решение

Кажется , что по какой-то причине ваш .m2 находится в пути к классам. Если это действительно имеет смысл для вас, то вы можете попробовать использовать <scope>provided</scope> в пом, где вы объявляете зависимость flowable-form-engine-configurator, Однако вы можете решить исключить .m2 от classpath, который лучше, я думаю.

Обычно это происходит, когда вы смешиваете код клиента и сервера в одном и том же модуле Maven, и, учитывая, как работает GWT, нет ничего (легкого) обхода этого, кроме разделения вашего кода на отдельные клиентские и серверные (и, возможно, общие) модули Maven.

Вы можете взглянуть на https://github.com/tbroyer/gwt-maven-archetypes для примеров (отказ от ответственности: я автор, но также являюсь членом Руководящего комитета GWT)

Другие вопросы по тегам