严重:Begin事件引发错误java.lang.ExceptionInInitializerError Intellij / Tomcat

时间:2019-02-05 22:49:10

标签: java tomcat intellij-idea catalina

因此,我得到了一个新项目,希望在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构建应用程序时,都会以某种方式收到此错误:

----COMPLETE-----STACKTRACE------

这很有趣,因为如果我们尝试使用eclipse来构建应用程序,tomcat会顺利运行并且实际上可以正确地构建项目。

这些是我们为Intellij / Tomcat进行的设置:

first

second

third

这些是我的vm-options(实际上,我什至不知道您是否需要此选项,以防万一):

-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"

所以基本上这就是我们的tomcat的样子: fourth

在“共享的”内部是一个名为“ nightshift”的文件夹,在我们的 catalina.properties 文件中提到了所有必需的.jar文件。

其他信息: 在我们的工件中,我们没有包括“ nightshift” jars ,因为我们希望将其安装在tomcat中,而不是在我们的应用程序中。

如果您需要任何其他信息,请询问。我会很乐意为您提供其他信息。

感谢先进和亲切的问候 路卡

1 个答案:

答案 0 :(得分:1)

您的应用程序的日志记录初始化似乎有问题:

 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集成产品。

(无论如何,您都不应该热部署到生产服务器中。这是不明智的做法。您不应该浪费生产环境,这是一个错误。如果这只是一个开发/测试环境,那么获取它是一个好主意养成在开发人员中以正确的方式做事的习惯。)