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中一个Web项目引用另一个项目中的类

Eclipse - 项目引用另一个项目而不是 .jar 文件

在另一个 maven 项目中使用 JAXB2 生成 java 类

Java / Maven如何使用使用项目中已使用的另一个依赖项的旧版本的依赖项

Java Web项目引用外部Java项目