Ресурс 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)