Какие пути к классам используются Tomcats, встроенными в Eclipse во время выполнения? - PullRequest
0 голосов
/ 06 марта 2020

Справочная информация + Проблема

В прошлом был собственный веб-проект Eclipse Dynami c, который был перенесен в Gradle. С тех пор мой веб-интерфейс больше не может выполняться должным образом во встроенном Tomcat Eclipse, используя те же наборы Tomcat- и launch-config, что и раньше. Я вижу, что некоторые части моего веб-интерфейса успешно выполняются, но в какой-то момент ClassNotFoundException запускается и все перестает работать.

Отлажено это с помощью ProcMon и пришел к выводу, что все JAR-файлы, доступные в \.metadata\.plugins\org.eclipse.wst.server.core\tmp3\wtpwebapps\de.am_soft.sm_mtg.frontend\WEB-INF\lib, развернутые для встроенного (!) Tomcat, успешно прочитаны. Но в какой-то момент файлы JAR, хранящиеся в этом каталоге и необходимые позже, больше не используются. Вместо этого мне нужно добавить отсутствующие зависимости в classpath файла launch-config, связанного со встроенным Tomcat, перезапустить и все снова начинает работать до тех пор, пока не будет пропущена следующая зависимость, и ее нужно будет добавить.

Единственное другое решение, которое я нашел, - это добавление зависимостей в путь к классам проекта при развертывании во встроенный Tomcat, и это именно то, что было сделано в прошлом с собственным проектом Eclipse. Именно это и делает Gradle при создании файлов проекта для Eclipse, но по причинам, не относящимся к этой проблеме, у меня есть несколько вариантов использования, в которых Gradle НЕ добавляет эти зависимости в путь к классам проекта, используемый Tomcat.

Старый и новый конфигурации запуска для встроенного Tomcat

Old launch config

против

New launch config

Что заставляет меня задуматься

Журналы ProcMon совершенно ясно показывают, что некоторые из моих собственных JAR-файлов моего собственного программного обеспечения хранятся в WEB-INF\lib и читаются оттуда в какой-то момент. То же самое верно для сторонних библиотек, таких как SLF4J, например, можно прочитать в следующих строках:

20:02:25,8492518    javaw.exe   15684   CreateFile  [...]\WEB-INF\lib\slf4j-api-1.7.25.jar  SUCCESS
20:02:25,8493029    javaw.exe   15684   CloseFile   [...]\WEB-INF\lib\slf4j-api-1.7.25.jar  SUCCESS
20:02:25,8494953    javaw.exe   15684   ReadFile    [...]\WEB-INF\lib\slf4j-api-1.7.25.jar  SUCCESS
20:02:25,8495221    javaw.exe   15684   QueryStandardInformationFile    [...]\WEB-INF\lib\slf4j-api-1.7.25.jar  SUCCESS
20:02:25,8495409    javaw.exe   15684   ReadFile    [...]\WEB-INF\lib\slf4j-api-1.7.25.jar  SUCCESS
20:02:25,8495614    javaw.exe   15684   ReadFile    [...]\WEB-INF\lib\slf4j-api-1.7.25.jar  SUCCESS
20:02:25,8495959    javaw.exe   15684   ReadFile    [...]\WEB-INF\lib\slf4j-api-1.7.25.jar  SUCCESS
20:02:25,8496269    javaw.exe   15684   ReadFile    [...]\WEB-INF\lib\slf4j-api-1.7.25.jar  SUCCESS
20:02:25,8496463    javaw.exe   15684   ReadFile    [...]\WEB-INF\lib\slf4j-api-1.7.25.jar  SUCCESS
20:02:25,8497129    javaw.exe   15684   CloseFile   [...]\WEB-INF\lib\slf4j-api-1.7.25.jar  SUCCESS
20:02:25,8500387    javaw.exe   15684   QueryNetworkOpenInformationFile [...]\WEB-INF\lib\slf4j-api-1.7.25.jar  SUCCESS
20:02:25,8500583    javaw.exe   15684   CloseFile   [...]\WEB-INF\lib\slf4j-api-1.7.25.jar  SUCCESS

Но в некоторых моментах эти JAR больше не используются, а вместо этого только путь к классу конфигурации запуска для встроенный Tomcat считается. Если я добавлю отсутствующие JAR-файлы, они будут использоваться в любом месте, откуда я их добавил. Если я не добавляю что-то, там выдаются исключения, как в случае SLF4J:

20:03:23,9387918    javaw.exe   15684   CreateFile  [...]\Documents\Eclipse\Java Sm-Mtg bug_2590_gradle\de.am_soft.sm_mtg.parser.oms.search\bin\test\de\am_soft\util\api\conf\Conf.class    PATH NOT FOUND
20:03:23,9388307    javaw.exe   15684   ReadFile    [...]\Documents\Repos\Ivy\de.am_soft.util\api\0.1.0\api.jar SUCCESS Offset: 2.674, Length: 160
[...]
20:03:23,9443769    javaw.exe   15684   CloseFile   [...]\Documents\Repos\Ivy\de.am_soft.util\api\0.1.0\api.jar SUCCESS
20:03:23,9451049    javaw.exe   15684   CreateFile  [...]\Documents\Eclipse\Java Sm-Mtg bug_2590_gradle\de.am_soft.sm_mtg.api\bin\main\org\slf4j\LoggerFactory.class    PATH NOT FOUND

Важно отметить, что с помощью строк выше, api загружается из позиции, отличной от WEB-INF\lib хотя это было доступно там все время и не должно было привести к исключению вообще по моему мнению. То же самое для SLF4J, он больше не читается с WEB-INF\lib вместо прежнего, и, поскольку я не добавил его к пути к классу конфигурации запуска вручную, он не был найден во время этого теста.

Вопросы

Какие пути к классам используются Tomcats, встроенными в Eclipse во время выполнения? * Используется 1044 *

WEB-INF\lib, используется путь к классу конфигурации запуска, путь к классам модуля развертывание, кажется, используется ... Но все ли они используются в одно и то же время в течение срока службы Tomcat в теории, или по какой-то причине все меняется в какой-то момент? Я пытаюсь понять, откуда это может исходить, что в какой-то момент WEB-INF\lib, похоже, больше не используется. По какой-то причине это может быть что-то, что мешает самим классовым путям, а в настройках проекта может быть что-то иное, говорящее Tomcat, что он ведет себя по-другому по сравнению с ...

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...