gpt4 book ai didi

java - 我的项目层次结构中的 spring 依赖项

转载 作者:行者123 更新时间:2023-11-28 23:40:08 25 4
gpt4 key购买 nike

我整天都在研究这个问题。我有一个具有这种结构的工作区:

  • cmn-lib(常用基础算法)#Java
  • cmn-server(基于通用服务器的逻辑)# Java
  • cmn-dao(数据库接口(interface))#Java
  • qz-tomcat(tomcat项目)#Java
  • qz-client(客户端)#安卓

使用 Spring 的 cmn-server 和 cmn-dao(测试运行没有问题)。cmn-server-spring.xml 的 spring 配置包括 common-dao-spring.xml(因为一些 Handler 类需要 Dao 支持)。这是 cmn-server-spring.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config />
<import resource="cmn-dao-spring.xml" />
<bean id="scoreHandler" class="de.bc.qz.handler.score.ScoreHandler"
autowire="byName">
</bean>
</beans>

现在我想将所有这些库包含到 qz-tomcat 中。问题是那个异常(exception):

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from relative location [cmn-dao-spring.xml]
Offending resource: URL [jar:file:/C:/Users/BC/qz/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/quiz-tomcat/WEB-INF/lib/cmn-server.jar!/cmn-serv-spring.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from URL [jar:file:/C:/Users/BC/qz/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/quiz-tomcat/WEB-INF/lib/cmn-server.jar!/cmn-dao-spring.xml]; nested exception is java.io.FileNotFoundException: JAR entry cmn-dao-spring.xml not found in C:\Users\BC\qz\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\quiz-tomcat\WEB-INF\lib\cmn-server.jar
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76)

它在我启动本地 tomcat 时发生。在“Web 部署程序集”的帮助下,cmn-server 和 cmn-dao 作为 JAR 包含在内。

但是...我的 webapp 在 SpringBeanAutowiringSupport 期间崩溃了:

@WebServlet("/ScoreServlet")
public class ScoreServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

@Autowired
ScoreHandler mScoreHandler;
@Autowired
TransferAdapter mTransferAdapter;

ScoreCreator mScoreCreator;

public void init(ServletConfig config) throws ServletException {
super.init(config);
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
config.getServletContext());
}

我的 cmn-server.jar 有问题吗?我认为主要问题是异常中的那一行:

IOException parsing XML document from URL [jar:file:/C:/Users/BC/qz/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/quiz-tomcat/WEB-INF/lib/cmn-server.jar!/cmn-dao-spring.xml

我的cmn-server.jar里面没有common-dao-spring.xml。我已经通过 Java Build Path->Project->Add->cmn-dao 将项目 cmn-dao 添加到 cmn-server该配置似乎适用于 JUnit 测试,但不适用于已部署的 Jar 文件。

知道任何人如何解决该问题。

感谢您的每一次帮助。

最佳答案

您应该将 Spring 配置文件保存在它们所属的 jar 中,使用标准的 META-INF/spring 位置是个不错的主意。您要做的是告诉 Spring 在类路径中查找配置文件:

<import resource="classpath:[/META-INF/spring]/cmn-dao.xml" />

此外,请注意您的命名显然不匹配,这可能是真正破坏运行时的唯一问题:您不断地在 cmncommon 之间来回切换> 最后有或没有 spring。选择一个约定并使用它。

关于java - 我的项目层次结构中的 spring 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20459428/

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