如何配置Eclipse以使用`ehcache`

时间:2017-07-13 21:55:30

标签: spring eclipse maven ehcache

概要/问题

我已经开始使用ehcache的项目了。该项目已启用maven,当我从cli运行mvn clean install时,所有目的都很好。

项目也可以在NetBeans中打开,一切都正常显示,但是当我在eclipse中打开项目时,我发现了一些与ehcache相关的错误。在NetBeans中,spring-cache.xml位于" Web Pages"夹。这让我认为eclipse项目可能无法被识别为动态Web项目,但遵循这里的指示:https://www.mkyong.com/java/how-to-convert-java-project-to-web-project-in-eclipse/我能够验证项目确实设置为支持动态Web模块,Java和JavaScript。

我还在IntelliJ中打开了项目,并且没有看到spring-cache.xml的任何问题。

我也没有在http://www.ehcache.org/documentation/上找到与此版本的ehcache相关的文档,但事实上,NetBeans,IntelliJ和mvn clean install中的工作正常使我认为它是我的eclipse设置。想法?

更多详情:

我在日食中看到的错误是:

Multiple annotations found at this line:
- cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'ehcache:annotation-driven'.
- schema_reference.4: Failed to read schema document 'http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring-1.1.xsd, because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.

enter image description here

cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'ehcache:config'.

enter image description here

我的maven依赖关系如下:

<dependency>
    <groupId>com.googlecode.ehcache-spring-annotations</groupId>
    <artifactId>ehcache-spring-annotations</artifactId>
    <version>1.2.0</version>
</dependency>

根据:https://mvnrepository.com/artifact/com.googlecode.ehcache-spring-annotations/ehcache-spring-annotations/1.2.0

,它与应有的匹配

我的spring-cache.xml文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
       xsi:schemaLocation="
                http://www.springframework.org/schema/beans 
                http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring 
                http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">

    <ehcache:annotation-driven />
    <ehcache:config cache-manager="cacheManager">
        <ehcache:evict-expired-elements interval="60" />
    </ehcache:config>
    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
        <property name="configLocation"  value="${ehcache.config.location}"/>
    </bean>

</beans>

2 个答案:

答案 0 :(得分:2)

看起来当前版本的NetBeans和IntelliJ在检查事物方面并不像eclipse那样严格。 :)以下是我发现的内容。

ehcache with Spring. google code xsd file not found我发现最​​大的错误与xsd不再托管在提供的网址有关。

做了一些googles,我在github上找到了对该版本的引用:https://raw.githubusercontent.com/agentgt/ehcache-spring-annotations/master/core/src/main/resources/com/googlecode/ehcache/annotations/ehcache-spring-1.2.xsd通过将我的底部xsi schemalocation更改为上面的url,它在eclipse中解决了这个问题。

引用的堆栈溢出问题还提供了指向以下内容的Google代码存档的链接:https://code.google.com/archive/p/ehcache-spring-annotations/source/default/source

如果你下载了zip,你可以在邮箱中找到官方xsd:/schema/ehcache-spring/ehcache-spring-1.2.xsd(它还有ehcache-spring-1.0.xsdehcache-spring1.1.xsd以防万一其他人甚至更早出现问题版本)。

我找到了一种在这里引用本地模式文件的方法:How to reference a local XML Schema file correctly?

我将发布一个关于如何从项目的相对路径引用它的问题,因为我们在这个项目中有windows和mac开发人员。如果这对您有用,详细信息将在此处:How to Reference Local XSD File By Relative Path

答案 1 :(得分:0)

问题摘要:

xsi-schemaLocation参考:

http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd

导致eclipse中的验证问题,在命令行maven上没有问题。

将ref替换为:

https://raw.githubusercontent.com/agentgt/ehcache-spring-annotations/master/core/src/main/resources/com/googlecode/ehcache/annotations/ehcache-spring-1.1.xsd

在eclipse中解决问题。如果你没有连接到互联网,saxparser会在maven中抱怨。 通过代理ref: -Dhttp.proxyHost = [proxyhost] -Dhttp.proxyPort = [proxyport] -Dhttps.proxyHost = [proxyhost] -Dhttps.proxyPort = [proxyport] maven构建成功....

我调查了这种行为差异: 在ehcache-spring jar中,ehcache-spring-annotations-1.1.2.jar, 存在META-INF / spring.schemas文件。

该档案的内容: http\://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.0.xsd=com/googlecode/ehcache/annotations/ehcache-spring-1.0.xsd http\://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd=com/googlecode/ehcache/annotations/ehcache-spring-1.1.xsd

cmdline maven使用此内容(并在jar中查找xsd)。 日食没有。

我使用的解决方案: 去eclipse偏好,  XML - &gt; XML目录并添加新的用户条目:

地点:https://raw.githubusercontent.com/agentgt/ehcache-spring-annotations/master/core/src/main/resources/com/googlecode/ehcache/annotations/ehcache-spring-1.1.xsd

密钥类型:公开ID

键:http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd

替代网址:https://raw.githubusercontent.com/agentgt/ehcache-spring-annotations/master/core/src/main/resources/com/googlecode/ehcache/annotations/ehcache-spring-1.1.xsd

重新验证spring上下文文件解决了我的eclipse工作区中的问题。

我更喜欢这个解决方案,因为它是eclipse的缺点,我用特定于eclipse的解决方案解决了这个问题。