Java Web 项目引用另一个 Java 项目
Posted
技术标签:
【中文标题】Java Web 项目引用另一个 Java 项目【英文标题】:Java Web Project referencing another Java project 【发布时间】:2010-12-14 01:48:48 【问题描述】:我有一个Java Project
,我现在正在为它创建一个Web 界面,使用来自Eclipse 的Dynamic Web Project
。 Web 项目由一个servlet
和两个JSP
组成。像这样的:
/JavaApplication
/src
/lib
/resources
/WebApplication
/src
/Servlet.java
/WebContent
/WEB-INF
index.jsp
other.jsp
现在,我需要从WebApplication
引用JavaApplication
,以便使用它的类来处理网络请求。实现这一目标的最佳方法是什么?我的想法是创建一个JavaApplication
的.jar
,包含所有.class
文件、/resources
和/libs
。通过这种方式,我可以将 .jar 包含在 Web 应用程序中,并且我可以拥有一个包含整个应用程序的 .war
文件。
你怎么看?这个问题一般是怎么解决的?
注意:我不想将 Java 项目转换为 Web 项目。
【问题讨论】:
我遇到了同样的问题。答案在:***.com/questions/1693322/… 解决了。 【参考方案1】:在 Eclipse 项目属性中,将项目添加到 Java EE Module Dependencies(Eclipse 3.5 或更早版本)
或部署程序集(Eclipse 3.6 或更高版本)项目属性中的条目。
这样 Eclipse 将注意做正确的事情来从这一切中创建一个 WAR(它将以/WEB-INF/lib
结束)。不需要其他配置,甚至不需要在 Build Path 中进行一些摆弄。
【讨论】:
简短说明:对于 Eclipse 3.6 及更高版本,“Java EE 模块依赖项”重命名为“部署程序集” 我已经为此搜索了几个小时。这非常有效。谢谢。【参考方案2】:在 Eclipse 下,您可以为给定项目(在您的案例中为 Web 应用程序)声明 项目引用。为此,请右键单击您的 Web 应用程序项目,然后转到 Properties > Project References 并选择 JavaApplication
项目。这应该允许您从WebApplication
调用来自JavaApplication
项目的代码,而无需构建WAR。这是开发的解决方案。
对于标准部署(在 IDE 之外),您确实应该创建一个标准 WAR。为此,您必须将 JavaApplication
打包为 JAR,包括 .class
文件和 /resources
下的文件,但不是它所依赖的库(/lib
下的 JAR )。这些依赖项实际上最终会出现在 WAR 的 WEB-INF/lib
目录中,在您的 JavaApplication
的 JAR 旁边。这些步骤通常使用Ant 或Maven 等工具自动完成。
【讨论】:
是的,我正在使用该解决方案进行开发。至于部署,在研究了一些 .EAR 文件之后,这就是我可能要做的事情。谢谢。 这个建议是否有效,我正在尝试,但在运行时不断收到 java.lang.NoClassDefFoundError 尽管一切都在我的 servlet 中正确编译。【参考方案3】:将 Java 应用程序连接到 Web 应用程序以进行开发:
右键单击网络项目:
properties>项目引用>添加你要引用的java项目
现在在 web 项目的属性选项卡中转到
properties>部署程序集>手动添加项目并运行应用
【讨论】:
【参考方案4】:如果您的 Web 容器支持,请考虑升级到 EAR 级别。
共享代码的棘手部分是公共代码应该放在哪里。复制公关网络应用程序? Web 容器中的副本?过度“共享这些类”可能会导致类加载器问题。
如果您要创建两个单独的 Web 应用程序,请将公共 java 代码重构到一个单独的 Eclipse 项目中,并从两个 WAR 项目中引用它。
编辑:显然我误读了问题描述,并认为您询问了现有和新的 Web 应用程序共享代码。
如果您的应用程序有一个 Eclipse 项目,而您的 Web 前端有另一个项目,那么您可以让您的应用程序导出必要的资源,Eclipse Java EE 中的“Export WAR”可以将这些资源包装在一个 jar 文件中并放入WEB-INF/lib 给你。您需要在您的 Web 项目的 Properties -> Java EE Module Dependencies 中使用复选标记明确说明这一点。预计您必须进行一些实验 - 这花了我一段时间来学习。
【讨论】:
谢谢,我会研究一下 EAR 解决方案。关于共享代码,没有。 Web 应用程序是 java 应用程序的简单前端,它使用Engine
来处理请求并将一些简单的 bean 提供给 JSP。由于这个接口是为了演示目的,所以需要很方便的部署(我目前用的是jetty-runner
)。对于开发,我正在使用@Pascal 描述的解决方案,但我仍在寻找更好的部署解决方案(目前,我正在将我需要的所有内容 [libs、resources、.classes] 传递给jetty-runner
)。
【参考方案5】:
通常,您会使用来自 Java 应用程序的远程服务 bean 创建一个 API 接口,这些 bean 公开您希望在 Web 应用程序中调用的方法。您将在 Web 应用程序中包含 API 接口的代理,该代理在 Java 应用程序中调用远程服务 bean。请记住,您需要在 web.xml 文件中注册远程 bean。
【讨论】:
JG 想使用他的应用程序中的类,这可能是一个简单的可执行 jar,我不确定使用远程服务 bean 会有所帮助。我猜他的解决方案是正确的。 是的,这对于我目前的需求来说有点过头了。以上是关于Java Web 项目引用另一个 Java 项目的主要内容,如果未能解决你的问题,请参考以下文章
java web项目怎么调用java普通项目里面的类及方法.... 也就是说我在web项目里调用另一个项目的类
Eclipse - 项目引用另一个项目而不是 .jar 文件
在另一个 maven 项目中使用 JAXB2 生成 java 类