首页 > 解决方案 > 如何在 Eclipse 动态 Web 应用程序中使用 java jar 库

问题描述

我正在尝试为需要共享一组通用 Jars(在某些情况下是刚刚导入工作项目中的代码)的项目设置目录结构(和项目文件)。

例如,假设我有一个名为“common”的通用项目。该项目包含可能由独立的 Java 应用程序或在本例中为动态 Web 应用程序使用的通用代码和 jar。

我的 web 项目(我们称之为 webapp1)从“common”导入源,所以这不是问题。我这样做的原因是,在这一点上,我真的没有任何东西可以创建一个“通用”项目并将其编译成一个 jar,然后从 webapp1 引用它,因为 webapp1 不会拿起供应商的 jars它们必须都在 WEB-INF/lib 下。

那么我该怎么做呢?我曾考虑让 WEB-INF 成为另一个目录的符号链接,其中包含我的 jar,但这不适用于 Windows 环境。但这基本上就是我想要的东西。这是对此的描述:

common \
  src \
    some.source.packages
  lib \
    HibernateLibs \
      hibernate.jar
      hibernate2.jar
    ApacheCommonLibs \
      common-string.jar \
      etc.

webapp1
  src \
    local.source.packages
    reference to common.source.packages above
  WebContent \
    WEB-INF \
      lib \
        This is where I'd like to place references to the libs in common
        (only those I need for this web app)

如果我只有 webapp1 参考通用,这种工作,但是当我尝试从 IDE 运行我的 webapp1 时,这些库实际上并不在正确的位置。

请注意,像 Maven 等构建系统或多或少已经退出,因为我的公司只允许特定的库和这些库的版本(这很痛苦,但这是我必须使用的)。

感谢您对此的见解。我并没有拘泥于项目结构,但我确实想避免多个项目都使用相同的 JAR,并且必须使它们保持同步(更不用说它会使检查代码变得非常慢)。

标签: javaeclipsetomcatdynamic

解决方案


创建 Web 项目时,无需将库添加到 WEB_INF 文件夹中。

解决方案:

  1. 您写道您不想使用 maven “因为我的公司只允许特定的库和这些库的版本”

您可以将库安装到本地 maven 存储库、本地计算机。因此,将从您的本地计算机中检索依赖项。这很简单:

 mvn install:install-file -Dfile=[file_path] -DgroupId=[your group id] -DartifactId=[artifact id] -Dversion=[version]   -Dpackaging=jar

您也可以使用NexusJfrog 神器服务器来检索 jar。此服务器适用于您的公司。因此,只有您的公司才能访问这些罐子。

  1. 您也可以从您的 JAR/EAR/WAR 中提取依赖项(但这取决于您使用的技术 - Spring、EJB 还是只是 Servlets);例如,让我们为 Spring 框架编写示例:

默认情况下,spring boot 插件将项目的所有依赖打包在可执行 JAR 中,结构如下:

    • 引导信息
      • 类(包含 java 包和类)
      • lib(包含依赖 jars)
    • META-INF(包含 MANIFEST.MF)
    • org(spring 运行时支持包)

MANIFEST.MF负责查找 JAR 文件。在 Spring 中,我们有以下午餐器:JarLauncherWarLauncherPropertiesLauncher。它们的目的是加载资源。JarLauncher只能定位和加载 BOOT-INF 中的类和 lib 目录中的 JAR。但是您可以使用PropertiesLauncher在项目之外指定 jar 文件。所以让我们去做吧!首先,您应该使用 ZIP 布局。

马文:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <layout>ZIP</layout>
    </configuration>
</plugin>

摇篮:

springBoot{
    layout = "ZIP"
}

然后一切都很简单。现在运行Web 应用程序

java -Dloader.path=lib,external-jar.jar -jar starter.jar

现在我们有了没有WEB_INF 文件夹的 Web 应用程序,并且我们拥有应用程序之外的所有依赖 jar 文件。最后 ,我们有许多项目使用项目外部的相同库 jar。


推荐阅读