SEVERE: начало события сгенерировало ошибку java.lang.ExceptionInInitializerError Intellij / Tomcat - PullRequest
0 голосов
/ 06 февраля 2019

Итак, я получил новый проект, с которым хотел работать в Intellij.В качестве локального сервера мы используем Tomcat 7.0.68 и JDK 1.8.

Это моя конфигурация в tomcat.

lib / catalina / org / apache / catalina / startup / Authenticators.properties:

NIGHTSHIFT=com.glit.swidA9O.v1.authenticator.NightShiftAuthenticator

conf / catalina.properties:

common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,/Users/Administrator/dev/server/apache-tomcat-7.0.68/shared/nightShift/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar

conf / context:

<Valve className="com.glit.swidA9O.v1.authenticator.NightShiftAuthenticator" changeSessionIdOnAuthentication="true"/>

<Loader className="org.apache.catalina.loader.VirtualWebappLoader"
        virtualClasspath="/Users/Administrator/dev/PROJECT/config;/Users/Administrator/dev/PROJECT/data"/>

conf / server.xml

<Engine name="Catalina" defaultHost="localhost">

  <!--For clustering, please take a look at documentation at:
      /docs/cluster-howto.html  (simple how to)
      /docs/config/cluster.html (reference documentation) -->
  <!--
  <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
  -->
  <Realm className="com.glit.swidA7U.v1.realm.NightShiftRealm" roleClassNames="com.glit.swidBS0.v1.shared.principals.NightShiftGroup" userClassNames="com.glit.swidBS0.v1.shared.principals.NightShiftUser"/>

  <!-- Use the LockOutRealm to prevent attempts to guess user passwords
       via a brute-force attack -->
  <Realm className="org.apache.catalina.realm.LockOutRealm">
    <!-- This Realm uses the UserDatabase configured in the global JNDI
         resources under the key "UserDatabase".  Any edits
         that are performed against this UserDatabase are immediately
         available for use by the Realm.  -->
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
           resourceName="UserDatabase"/>
  </Realm>

  <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">

    <!-- SingleSignOn valve, share authentication between web applications
         Documentation at: /docs/config/valve.html -->
    <!--
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    -->

    <!-- Access log processes all example.
         Documentation at: /docs/config/valve.html
         Note: The pattern used is equivalent to using pattern="common" -->
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

  </Host>
</Engine>

НАША ПРОБЛЕМА:

Внутри нашего локального сервера Tomcat мы хотим использовать специальную библиотеку под названием NightShift.К сожалению, каждый раз, когда мы пытаемся построить наше приложение с intellij / tomcat, мы получаем эту ошибку как-то:

---- ПОЛНАЯ ----- STACKTRACE ------

Что забавно, потому что если мы попытаемся собрать приложение с помощью eclipse, tomcat будет работать без сбоев и действительно сможет правильно построить проект.

Это настройки для Intellij / Tomcat, которые мы сделали:

first

second

third

Это мои vm-опции (на самом деле я даже не знаю, нужно ли вам это, но на всякий случай):

-DLOG4J2-ROOT=/Users/Administrator/dev/PROJECT/data/logs
-Djava.security.auth.login.config=/Users/Administrator/dev/PROJECT/config/NightShift-config/common/NightShiftJAAS.conf
-Dpu8.config.path=/Users/Administrator/dev/PROJECT/config/NightShift-config
-Dpu8.configuration.id=A7U
-Dpu8.environment=ide
-Djava.util.logging.config.file=/Users/Administrator/dev/PROJECT/config/NightShift-config/log-config.properties
-Djava.security.manager
-Djava.security.policy="/Users/Administrator/dev/server/apache-tomcat-7.0.68/conf/catalina.policy"

Итак, вот как выглядит наш кот: fourth

Внутри «shared» находится папка «nightshift», и есть все необходимые файлы .jar, которые мы упоминали в файле catalina.properties .

Дополнительная информация: Внутри наших артефактов мы не включили "nighthift" jars , потому что мы хотим, чтобы он был установлен в tomcat, а не в нашем приложении.n.

Если вам нужна дополнительная информация, просто спросите.Я с радостью предоставлю вам дополнительную информацию.

Спасибо за продвинутые и наилучшие пожелания Luca

1 Ответ

0 голосов
/ 06 февраля 2019

Похоже, что проблема с инициализацией ведения журнала вашего приложения:

 Caused by: java.util.NoSuchElementException
    at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:365)
    at java.util.ServiceLoader$LazyIterator.access$700(ServiceLoader.java:323)
    at java.util.ServiceLoader$LazyIterator$2.run(ServiceLoader.java:407)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:409)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
    at com.glit.swidPV4.v1.common.log.LogFactory.getInstance(LogFactory.java:32)
    at com.glit.swidPV4.v1.common.log.LogFactory.getLog(LogFactory.java:42)
    at com.glit.swidA7R.v1.businessdelegate.VerifierBDFactory.<clinit>(VerifierBDFactory.java:29)
    ... 75 more

Это выглядит как , оно ищет поставщика услуг, которого не существует, и затем не можетразобраться с этим правильно.Это приводит к исключению времени выполнения, которое распространяется на другие вещи.

  1. Посмотрите на исходный код com.glit.swidPV4.v1.common.log.LogFactory, чтобы выяснить, что он ищет.

  2. Выясните, почему этого не хватает.Я думаю, что это будет отсутствующий / неуместный JAR-файл или отсутствующий / неуместный файл конфигурации.

  3. Исправьте это.

  4. (Может быть) исправьтеLogFactory код для большей устойчивости ... или для создания пользовательского исключения вместо простой бомбардировки неясным NoSuchElementException.

Выяснение удаленно где JAR и файлы конфигурации должны быть для вашего конкретного случая слишком сложно.Но это просто стандартное устранение неполадок Java / Tomcat ... как только вы выяснили причину проблемы.


К сожалению, каждый раз, когда мы пытаемся построить наше приложение с помощью intellij / tomcat, мы получаемэта ошибка:

Одним из "решений" было бы переключение на использование Maven или чего-либо другого для создания файлов WAR и тестирование / развертывание их вручную, а не использование "блестящих" средств интеграции Intellij.

(В любом случае, вам не следует горячо развертывать на производственном сервере. Это плохая практика. Вы - одна ошибка, когда вы не можете уничтожить вашу рабочую среду. И если это просто среда разработки / тестирования, это хорошаяидея привыкнуть делать вещи правильно в dev.)

...