gpt4 book ai didi

java - Maven+Spring 项目无法加载依赖的 xsd 文件

转载 作者:数据小太阳 更新时间:2023-10-29 02:45:22 25 4
gpt4 key购买 nike

几天来我一直在为这个问题苦苦挣扎。我正在尝试使用通常的 spring 命名空间初始化一个标准的 Spring 项目:bean、aop、context、util...我当前非常初始的 beans.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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xml
http://www.springframework.org/schema/context http://www.springframework.org/schema/beans/spring-context.xml
http://www.springframework.org/schema/aop http://www.springframework.org/schema/beans/spring-aop.xml
http://www.springframework.org/schema/util http://www.springframework.org/schema/beans/spring-util.xml"
</beans>

当我尝试在 Glassfish 中编译和运行该项目时,我在调用 org.glassfish.weld.WeldDeployer 时遇到了 IllegalStateException。再往下,它指出依赖文档的 XML 必须格式正确,并显示其中一个依赖文件(例如 spring-beans.xml)的第一行,这显然是 HTML。在进一步挖掘之后,我发现确实在缓存这些 .xsd 文件的我的 mavencachedirs 中,每个文件都有相同的 HTML 内容引用 404 Not Found。我正在离线使用内部 Maven 存储库,但这应该不是问题,因为我的依赖 Spring jar 文件都具有适当的 spring.schemasspring.handlers 文件。我的项目似乎无法识别它们。

我对 Spring 有点陌生,但我觉得我已经尽职尽责地研究了这个问题。任何可能为我指明正确方向的建议将不胜感激。


更新 - 遵循 Spring schemaLocation fails when there is no internet connection 中发布的一些提示,我将我的 spring.handlers 和 spring.schemas 文件合并到 src/main/resources/META-INF 中的两个文件中。运行 getResource 返回此目录中每个文件的合并版本。尽管如此,这仍然没有解决问题。


更新 2 - 我在家里重现了这个问题。我使用以下原型(prototype)在 Netbeans 7.3.1 上创建了一个新的 Spring 项目:

群组ID:co.ntier
版本:1.0.2
Artifact ID:spring-mvc-archetype
存储库:http://repo.maven.apache.org/maven2/

创建项目后,我将一个 beans.xml 文件添加到类路径并将其剥离为最基本的形式:

<?xml version="1.0" encoding="windows-1252"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
/>

我构建了项目并通过 NetBeans 部署到 Glassfish 4.0,同时仍然连接到 Internet。这按预期工作,没有错误。但是,当我断开计算机与互联网的连接并再次部署时(并从 ...Netbeans\Cache\7.3.1\mavencachedirs 中清除缓存的 xsd 文件),我多次收到以下错误:

警告:WELD-001210 验证文件时出现警告:/C:/Users/Elliott/Desktop/Development/SpringTest/target/SpringTest/WEB-INF/beans.xml@5 针对 xsd。 schema_reference.4:无法读取架构文档“http://www.springframework.org/schema/beans/spring-beans.xsd” ', 因为 1) 找不到文档; 2)文档无法读取; 3) 文档的根元素不是 .

我知道 Spring 应该读取 spring.schemasspring.handlers 文件来定位这些资源,但是它显然不是!我挑战任何人尝试重现这个问题并证明这实际上是应该的。现在我还不确定。

最佳答案

进步!!

好的。我 90% 确定我已经解决了问题。当我创建 beans.xml 文件时,Netbeans 会创建一个 nb-configuration.xml 文件,其中包含以下内容:

<spring-data xmlns="http://www.netbeans.org/ns/spring-data/1">
<config-files>
<config-file>beans.xml</config-file>
</config-files>
<config-file-groups/>
</spring-data>

如果我在 web.xml 文件中创建一个 servlet:

<servlet>
<servlet-name>SpringDispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

并将 beans.xml 文件重命名为 SpringDispatcher-servlet.xml,项目将正确编译和加载 xsd 文件,无论是在线还是离线。

由于这在使用 SpringDispatcher-servlet.xml 时有效,但在 Netbeans 配置的 beans.xml 中无效,我认为可以安全地假设当 Netbeans 配置为通过 nb-configuration 加载 spring 配置文件时,它无法在类路径中引用所需的 spring.schemas 和 spring.handlers 文件。

也许我完全错了,而且在谈到 Spring 时只是 super 菜鸟(我是),但这种行为似乎并不正确。不管怎样,至少我现在有办法继续前进。

关于java - Maven+Spring 项目无法加载依赖的 xsd 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20427976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com