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

问题描述 投票:0回答:1

我有一个要在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”的文件夹,并且在我们[文件中提到了所有必要的.jar文件。

在我们的工件中,我们没有包括“ nightshift”

jars

,因为我们希望将其安装在tomcat中,而不是在我们的应用程序中。
java tomcat intellij-idea catalina
1个回答
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轰炸出去。

找出

remotely

对于您的特定情况应该使用JAR和配置文件,这太困难了。但这只是标准的Java / Tomcat故障排除...一旦弄清楚是什么原因引起的,就可以了。
不幸的是,每次我们尝试使用intellij / tomcat构建应用程序时,都会出现此错误:

一个“解决方案”是切换到使用Maven或其他方式生成WAR文件,并手动测试/部署它们,而不是依靠“闪亮的” Intellij集成产品。

(无论如何,您不应该热部署到生产服务器中。这是一个糟糕的实践。您将错误地浪费在生产环境上是一个错误。如果这只是一个开发/测试环境,那么进入该环境是一个好主意。在开发中以正确的方式做事的习惯。)

© www.soinside.com 2019 - 2024. All rights reserved.