引用另一个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模块依赖项”被重命名为“部署程序集”我已经找了好几个小时了。这很有效。谢谢,我也有同样的问题。答案是:解决了它。