Когда я пытаюсь запустить приложение Java на Eclipse, конфликт между двумя зависимостями вызывает сбой приложения.
Я пытаюсь обновить версию Java своего проекта с OracleJDK 8 до OpenJDK 11. В результате мне также пришлось обновить GWT-зависимость с 2.6.0 до 2.8.2, а также перейти с MOJO gwt -maven-плагин к версии tboyer. Кроме того, сборка выполняется на Maven 4.0.0 в Eclipse IDE 4.9.0.
Фрагмент pom.xml
<properties>
<gwt.version>2.8.2</gwt.version>
...
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt</artifactId>
<version>${gwt.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-dev</artifactId>
<scope>provided</scope>
</dependency>
...
<build>
<plugins>
<plugin>
<groupId>net.ltgt.gwt.maven</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>1.0-rc-10</version>
<executions>
<execution>
<id>compile-common</id>
<goals>
<goal>compile</goal>
<goal>test</goal>
</goals>
<configuration>
<moduleName>XXXXModule</moduleName>
</configuration>
</execution>
<execution>
<id>XXXX</id>
<goals>
<goal>compile</goal>
<goal>test</goal>
</goals>
<configuration>
<moduleName>XXXXModule</moduleName>
</configuration>
</execution>
<execution>
<id>XXXX</id>
<goals>
<goal>compile</goal>
<goal>test</goal>
</goals>
<configuration>
<moduleName>XXXXModule</moduleName>
</configuration>
</execution>
<execution>
<id>XXXX</id>
<goals>
<goal>compile</goal>
<goal>test</goal>
</goals>
<configuration>
<moduleName>XXXXModule</moduleName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Поэтому, когда я запускаю приложение в Eclipse, я получаю следующую ошибку:
SEVERE: Application encountered an exception during Start.
XXXX.ApplicationException: Failed to reflect on start method.
at XXXX.ApplicationLauncher.startApplication(ApplicationLauncher.java:471)
at XXXX.ApplicationLauncher.doRun(ApplicationLauncher.java:185)
at XXXX.ApplicationLauncher.main(ApplicationLauncher.java:67)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at XXXX.ApplicationLauncher.startApplication(ApplicationLauncher.java:469)
... 2 more
Caused by: java.lang.NoSuchMethodError: org.apache.tomcat.util.ExceptionUtils.preload()V
at org.apache.catalina.startup.Tomcat.<init>(Tomcat.java:181)
....
После исследования я обнаружил, что две из моих зависимостей tomcat-embed-core-7.0.91 и apache-jsp-8.0.9.M3 обе содержат ExceptionUtils с несколькими отличиями, отсюда и Exception. Кроме того, apache-jsp извлекается зависимостью gwt-dev, которая требуется только во время сборки Maven для запуска плагина gwt-maven-plugin.
gwt-dev:2.8.2
apache-jsp:9.2.14.v20151106
apache-jsp:8.0.9.M3
Но по какой-то причине Eclipse включает в себя gwt-dev и его зависимость как часть пути выполнения, даже если у меня есть «предоставленный» тег области действия в pom.xml.
Я попытался исключить зависимость apache-jsp, но возникает проблема компиляции, потому что очевидно, что gwt-dev все еще добавляется, что зависит от apache-jsp.
Резюме
- TBroyer GWT-Maven-Plugin требует, чтобы файл pom включал gwt-dev в качестве зависимости для правильной работы во время сборки.
- Однако при запуске приложения в Eclipse возникает исключение NoSuchMethodException в org.apache.tomcat.util.ExceptionUtils.preload () V
- Проблема в том, что есть два класса ExceptionUtil с одинаковым пакетом из разных jar-файлов и методов.
- Одним из jar-файлов является apache-jsp, который зависит от gwt-dev. Gwt-dev и его зависимости не должны быть частью пути к классу времени выполнения.
Вопрос : Есть ли способ убедиться, что gwt-dev используется только во время сборки Maven и не является частью пути к классу времени выполнения приложения Java Eclipse?