引用另一个Java项目的Java Web项目
我有一个引用另一个Java项目的Java Web项目,java,eclipse,jakarta-ee,Java,Eclipse,Jakarta Ee,我有一个Java项目,现在使用Eclipse的动态Web项目为其创建一个Web界面。Web项目由一个servlet和两个JSP组成。大概是这样的: /JavaApplication /src /lib /resources /WebApplication /src /Servlet.java /WebContent /WEB-INF index.jsp other.jsp 现在,我需要引用WebApplication中的JavaApplica
Java项目
,现在使用Eclipse的动态Web项目
为其创建一个Web界面。Web项目由一个servlet
和两个JSP
组成。大概是这样的:
/JavaApplication
/src
/lib
/resources
/WebApplication
/src
/Servlet.java
/WebContent
/WEB-INF
index.jsp
other.jsp
现在,我需要引用WebApplication
中的JavaApplication
,以便使用它的类来处理web请求。实现这一目标的最佳方式是什么?我的想法是创建JavaApplication
的.jar
,其中包含所有.class
文件、/resources
和/libs
。通过这种方式,我可以在web应用程序中包含.jar,并且可以有一个包含整个应用程序的.war
文件
你觉得怎么样?这个问题通常是如何解决的
注意:我不想将Java项目转换为Web项目。通常,您会使用Java应用程序中的远程服务bean创建一个API接口,以公开要在Web应用程序中调用的方法。您将在web应用程序中包含API接口的代理,该代理在Java应用程序中调用远程服务bean。请记住,您需要在web.xml文件中注册远程bean。在Eclipse下,您可以声明给定项目的项目引用,即您的web应用程序。为此,右键单击web应用程序项目,然后转到属性>项目引用并选择
JavaApplication
项目。这应该允许您从WebApplication
调用JavaApplication
项目中的代码,而无需构建WAR。这是一个用于开发的解决方案
对于标准部署(在IDE之外),您确实应该创建一个标准WAR。为此,您必须将
JavaApplication
打包为一个JAR,包括.class
文件和/resources
下的文件,但不是它所依赖的库(/lib
下的JAR)。这些依赖关系实际上会在WAR的WEB-INF/lib
目录中结束,在JavaApplication
的JAR旁边。这些步骤通常使用诸如或之类的工具实现自动化 如果您的web容器支持,请考虑升级到EAR级别
共享代码的棘手部分是公共代码应该放在哪里。复制pr web应用程序?web容器中的副本?过度使用“共享这些类”可能会导致类装入器问题
如果要创建两个独立的web应用程序,请将公共java代码重构为一个独立的Eclipse项目,并从两个WAR项目中引用它
编辑:显然我误读了问题描述,还以为您询问了一个现有的和一个新的web应用程序共享代码
如果您的应用程序中有一个Eclipse项目,web前端中有另一个项目,那么您可以让应用程序导出必要的资源,Eclipse Java EE中的“导出战”可以将这些资源封装在jar文件中,并为您放入web-INF/lib中。您需要在web项目的Properties->JavaEE模块依赖项中使用复选标记明确说明这一点。希望您必须进行一点实验-这花了我一段时间来学习。在Eclipse项目属性中,将项目添加到Java EE模块依赖项(Eclipse 3.5或更早版本) 或项目属性中的部署程序集(Eclipse3.6或更新版本)条目
通过这种方式,Eclipse将注意做正确的事情来创建一场战争(它将以
/WEB-INF/lib
结束)。不需要其他配置,甚至不需要修改构建路径。将java应用程序连接到web应用程序进行开发:
右键单击web项目:
属性>项目引用>添加要引用的java项目
现在,在web项目的“属性”选项卡中,转到
属性>部署程序集>手动添加项目并运行应用程序
JG希望使用来自其应用程序的类,这些类可能是一个简单的可执行jar,我不确定使用远程服务bean是否有帮助。我想他的解决方案是正确的。是的,对于我目前的需求来说,这有点过头了。是的,我正在使用这个解决方案进行开发。至于部署,在研究了一些.EAR文件之后,我可能会这么做。谢谢。这个建议行得通吗,我正在尝试,但是在运行时不断得到java.lang.NoClassDefFoundError,尽管在我的servlet中一切都编译正确。谢谢,我将研究EAR解决方案。关于共享代码,没有任何。web应用程序是java应用程序的一个简单前端,它使用
引擎处理请求并向jsp提供一些简单bean。由于此接口用于演示,因此需要轻松部署(我目前使用的是jetty runner
)。对于开发,我正在使用所描述的解决方案@Pascal,但我仍在寻找更好的部署解决方案(目前,我正在将我需要的所有[libs、resources、.classes]传递给jetty runner
)。请注意:对于Eclipse 3.6及更高版本,“Java EE模块依赖项”被重命名为“部署程序集”我已经找了好几个小时了。这很有效。谢谢,我也有同样的问题。答案是:解决了它。