0

我处于 java 项目的初始阶段(带有 maven 的 jsp/servlet 项目)。这是一个多模块项目。我正在使用 Maven。现在说有3个模块。

模型、控制器和 Web 模块。
model需要 mysql lib
controller使用model、扩展和使用模型的类
web需要controllermodel两个模块。

我已将 mysql 添加到模型的依赖项中,将模型添加到controller模块的依赖项中,并controller添加到模块的依赖项中web。(我是否需要将模块添加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>
  • 网络 - pom
<dependency>
            <groupId>xy</groupId>
            <artifactId>controller</artifactId>
            <version>0.0.1</version>
            <scope>compile</scope>
        </dependency>
4

2 回答 2

3

当前项目及其祖先中的所有依赖项都可用于项目。

Root  *dependencies:libA*
 |
 |---Model  *dependencies:mysqllib*
 |
 |---Controller *dependencies:Model*
 |
 |---Web  *dependencies:Model,Controller*

要回答您的问题:的,如果您具有上述结构,您将需要显式地将模型添加到 Web 模块的依赖项列表中。请注意,libA所有 3 个模块都可以访问,但mysqllib仅对模型可用。

您可以玩弄父子关系来决定如何构建项目。

于 2013-09-08T08:17:40.780 回答
0

根据@mihi 的评论

你确定你的问题是依赖关系吗?控制器需要一个 'jar' 的包装和 web 一个 'war' 的包装,并且您必须在 mvn 打包 web 之前首先 mvn install controller,或者有一个带有包装 'pom' 的父 pom,将两者都列为模块。另外,我假设您部署了由“包”命令构建的战争文件,并且您的战争中没有任何“提供”范围?如果库在那里,检查你在战争中的 WEB-INF/lib 也可能有帮助......

添加'war'的包装并添加带有'pom'的包装的父pom解决了这个问题。谢谢@mihi。

于 2013-09-10T04:04:40.707 回答