由于el-api jar文件冲突导致链接错误



我在JSF中生成动态组件,这是我的faces-config.xml文件:

<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0" >
<application>
    <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
    <resource-bundle>
        <base-name>build</base-name>
        <var>build</var>
    </resource-bundle>
    <resource-bundle>
        <base-name>message</base-name>
        <var>message</var>
    </resource-bundle>
    <locale-config>
     <default-locale>en</default-locale>
     <supported-locale>fr</supported-locale>
     <supported-locale>es</supported-locale>
    </locale-config>
</application>  

我得到了如下链接错误

    SEVERE: Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener
java.lang.RuntimeException: java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, com/sun/faces/config/ConfigureListener, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ExpressionFactory used in the signature
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:294)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)

我已经在我的/WEB-INF/lib文件夹中添加了el-api jar文件。我找到了一个解决方案,由于冲突而排除Spring EL。解决方案是在pom.xml中添加下面的代码,但我的应用程序中没有该文件。

 <dependencies>
    <dependency org="org.springframework" name="org.springframework.web.servlet" rev="3.0.5.RELEASE">
        <!-- Fix for java.lang.LinkageError: loader constraint violation -->
        <exclude name="com.springsource.javax.el" />
    </dependency>
</dependencies>

我需要把这个<dependency>标签放在哪里?我不知道。在我的应用程序中,我只有faces-config.xml, application-context.xmlweb.xml文件。我的应用程序是关于Spring和JSF集成的。我使用Tomcat服务器。包含context.xmlweb.xmlserver.xmltomcat-users.xml四个文件。我需要把<dependency>标签放在哪里?或者有其他解决方案吗?我不想删除el-api.jar文件

<dependency>标记是Maven的一部分。Maven是一个依赖项管理工具,它使您能够管理依赖项,而无需手动携带松散的JAR文件。实际上,Maven将自动下载正确的编译时依赖项,Maven将自动用正确的运行时依赖项填充/WEB-INF/lib,所有这些都基于pom.xml中的配置。这里的条目基本上告诉Maven在/WEB-INF/lib中排除Spring EL依赖项。

由于您没有使用Maven,因此在本质上您只需要做与Maven在幕后所做的完全相同的事情:而不是将Spring EL JAR文件放在/WEB-INF/lib中。

然而,我想知道这是否是正确的解决方案。我不这么认为。

EL API在默认情况下已经是Tomcat自己提供的。所以把你自己的/WEB-INF/lib只会导致问题,如果它不是相同的版本。您不清楚为什么不想删除它,也许您错误地认为特定的JAR文件可以解决您没有告诉任何事情的特定问题,但毕竟这实际上是错误的解决方案。

保持/WEB-INF/lib不受servlet容器本身已经提供的库的影响。无论您认为通过在/WEB-INF/lib中放置EL API JAR来解决什么问题,都必须以不同的方式解决。也许您正在使用Eclipse,并试图以错误的方式修复javax.el编译错误。请参阅下面的第二个链接以获得正确的解决方案。

参见:

  • . lang。LinkageError: javax.servlet.jsp.JspApplicationContext.getExpressionFactory
  • 如何导入javax. xml文件?我的Eclipse项目中的servlet API ?
  • https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem

相关内容

  • 没有找到相关文章

最新更新