概要/问题
我已经开始使用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>.
和
cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'ehcache:config'.
我的maven依赖关系如下:
<dependency>
<groupId>com.googlecode.ehcache-spring-annotations</groupId>
<artifactId>ehcache-spring-annotations</artifactId>
<version>1.2.0</version>
</dependency>
,它与应有的匹配
我的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>
答案 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.xsd
和ehcache-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替换为:
在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目录并添加新的用户条目:
密钥类型:公开ID
键:http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd
重新验证spring上下文文件解决了我的eclipse工作区中的问题。
我更喜欢这个解决方案,因为它是eclipse的缺点,我用特定于eclipse的解决方案解决了这个问题。