我正处于java项目的初始阶段(使用maven的jsp / servlet项目)。这是一个多模块项目。我正在使用maven。 现在说有3个模块。
模型,控制器和Web模块
model
需要mysql lib
controller
使用model
,扩展并使用模型的类
web
需要controller
和model
两个模块。
我已将mysql添加到模型的依赖项中,模型已添加到controller
模块的依赖项中,controller
已添加到web
模块中depencency。 (我是否需要将model
模块添加到web
模块的依赖项?)
我如何/应该如何配置这些模块的依赖关系范围?
编辑:结构
Root
|
|---Model *dependencies:mysqllib/compile*
|
|---Controller *dependencies:Model/compile*
|
|---Web *dependencies:Controller/compile*
所有内容都设置为complie
范围
我在web模块中有一个.jsp文件(默认为jsp),
这个jsp调用控制器模块内部类的静态方法Account.getAccount()
。
JSP代码
<%=xy.controller.Account.getAccount()%>
在浏览器中打开jsp文件时,我在浏览器中遇到异常
错误堆栈
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 8 in the jsp file: /index.jsp
xy.controller.AccountH cannot be resolved to a type
5: <title></title>
6: </head>
7: <body>
8: <%=xy.controller.Account.getAccount()%>
9: </body>
10: </html>
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:331)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:469)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
pom文件中的依赖关系
- 控制器 - pom
<dependency>
<groupId>xy</groupId>
<artifactId>model</artifactId>
<version>0.0.1</version>
<scope>compile</scope>
</dependency>
<dependency> <groupId>xy</groupId> <artifactId>controller</artifactId> <version>0.0.1</version> <scope>compile</scope> </dependency>
答案 0 :(得分:3)
项目可以使用当前项目及其祖先中的所有依赖项。
Root *dependencies:libA* | |---Model *dependencies:mysqllib* | |---Controller *dependencies:Model* | |---Web *dependencies:Model,Controller*
要回答您的问题:是,如果您具有上述结构,则需要将模型显式添加到Web模块的依赖关系列表中。请注意,libA
可供所有3个模块访问,但mysqllib
仅适用于Model。
您可以使用父子关系来决定如何构建项目。
答案 1 :(得分:0)
根据@mihi的评论
你确定你的问题是依赖吗?控制器需要 “罐子”和网络的包装是“战争”的包装,你必须这样做 要么先mvn安装控制器在mvn打包web之前,要么有 包含'pom'的父pom,它们都列为模块。还有,我 假设您部署了由'package'命令构建的war文件,并且 你的战争中没有任何“提供”的范围?检查你的 战争中的WEB-INF / lib如果libs那里也可能存在 有用...
添加'war'的包装并添加'pom'包装的父pom解决了这个问题。 谢谢@mihi。